@carbonenginejs/runtime 0.1.0-alpha.6 → 0.1.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of @carbonenginejs/runtime might be problematic. Click here for more details.

Files changed (92) hide show
  1. package/dist/global/consts/effectPaths.js +4 -1
  2. package/dist/global/consts/effectPaths.js.map +1 -1
  3. package/dist/global/consts/index.js +1 -1
  4. package/dist/global/index.js +1 -1
  5. package/dist/index.js +3 -3
  6. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +19 -2
  7. package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
  8. package/dist/resource/format/index.js +1 -1
  9. package/dist/resource/formats/hlsl/core/carbonTypedViews.js +121 -65
  10. package/dist/resource/formats/hlsl/core/carbonTypedViews.js.map +1 -1
  11. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +10 -7
  12. package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
  13. package/dist/resource/formats/webgpu/core/effectBackendBodySet.js +3 -1
  14. package/dist/resource/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
  15. package/dist/resource/formats/webgpu/core/packageEffect.js +5 -0
  16. package/dist/resource/formats/webgpu/core/packageEffect.js.map +1 -1
  17. package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js +20 -0
  18. package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -1
  19. package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js +93 -4
  20. package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js.map +1 -1
  21. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +74 -64
  22. package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
  23. package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js +16 -7
  24. package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -1
  25. package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js +69 -27
  26. package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js.map +1 -1
  27. package/dist/resource/geometry/registerGeometryResources.js +10 -1
  28. package/dist/resource/geometry/registerGeometryResources.js.map +1 -1
  29. package/dist/sof/EveSOFDNA.js +4 -2
  30. package/dist/sof/EveSOFDNA.js.map +1 -1
  31. package/dist/sof/EveSOFDataMgr.js +83 -69
  32. package/dist/sof/EveSOFDataMgr.js.map +1 -1
  33. package/dist/trinity/core/Tr2Denoiser.js +6 -1
  34. package/dist/trinity/core/Tr2Denoiser.js.map +1 -1
  35. package/dist/trinity/core/Tr2ShadowMap.js +7 -2
  36. package/dist/trinity/core/Tr2ShadowMap.js.map +1 -1
  37. package/dist/trinity/core/context/Tr2RenderContext.js +43 -0
  38. package/dist/trinity/core/context/Tr2RenderContext.js.map +1 -1
  39. package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js +134 -0
  40. package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js.map +1 -0
  41. package/dist/trinity/core/index.js +1 -0
  42. package/dist/trinity/core/index.js.map +1 -1
  43. package/dist/trinity/core/lighting/Tr2LightManager.js +410 -124
  44. package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
  45. package/dist/trinity/eve/effect/lensflare/EveLensflare.js +303 -312
  46. package/dist/trinity/eve/effect/lensflare/EveLensflare.js.map +1 -1
  47. package/dist/trinity/eve/effect/lensflare/EveOccluder.js +117 -0
  48. package/dist/trinity/eve/effect/lensflare/EveOccluder.js.map +1 -0
  49. package/dist/trinity/eve/index.js +1 -0
  50. package/dist/trinity/eve/index.js.map +1 -1
  51. package/dist/trinity/eve/scene/EveSpaceScene.js +286 -6
  52. package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
  53. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +212 -32
  54. package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
  55. package/dist/trinity/generated/eve/effect/index.js +0 -1
  56. package/dist/trinity/generated/eve/effect/index.js.map +1 -1
  57. package/dist/trinity/generated/eve/index.js +0 -1
  58. package/dist/trinity/generated/eve/index.js.map +1 -1
  59. package/dist/trinity/generated/index.js +0 -2
  60. package/dist/trinity/generated/index.js.map +1 -1
  61. package/dist/trinity/generated/trinityCore/index.js +0 -1
  62. package/dist/trinity/generated/trinityCore/index.js.map +1 -1
  63. package/dist/trinity/index.js +2 -2
  64. package/dist/trinity/postProcess/Tr2PostProcessRenderer.js +4 -1
  65. package/dist/trinity/postProcess/Tr2PostProcessRenderer.js.map +1 -1
  66. package/dist/trinity/postProcess/Tr2SSAO.js +282 -21
  67. package/dist/trinity/postProcess/Tr2SSAO.js.map +1 -1
  68. package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js +71 -53
  69. package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js.map +1 -1
  70. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +81 -18
  71. package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
  72. package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js +46 -4
  73. package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js.map +1 -1
  74. package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js +32 -1
  75. package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js.map +1 -1
  76. package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js +27 -0
  77. package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js.map +1 -1
  78. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +29 -4
  79. package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
  80. package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js +32 -2
  81. package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js.map +1 -1
  82. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +57 -5
  83. package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -1
  84. package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js +111 -5
  85. package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js.map +1 -1
  86. package/docs/trinity/reference/classes/generated.md +20 -20
  87. package/docs/trinity/reference/classes/post-process.md +1 -1
  88. package/package.json +1 -1
  89. package/dist/trinity/generated/eve/effect/EveOccluder.js +0 -38
  90. package/dist/trinity/generated/eve/effect/EveOccluder.js.map +0 -1
  91. package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js +0 -48
  92. package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { normalizeResourceTransformPlan } from './buildResourceTransformPlan.js';
2
2
  import { TYPED_VIEW_FORMATS } from './wgslTypedViews.js';
3
+ import { ADDRESS_MODES_SYMBOL } from './emulatedAddressing.js';
3
4
 
4
5
  const KIND_ORDER = Object.freeze({
5
6
  "uniform-buffer": 0,
@@ -56,8 +57,9 @@ function declarationFor(program, binding) {
56
57
  return program.declarations.find(entry => entry.dxbcOffset === binding.declarationOffset) || null;
57
58
  }
58
59
  function uniformLayout(program, binding) {
59
- const declaration = declarationFor(program, binding);
60
- const sizeInVec4 = declaration?.data?.sizeInVec4;
60
+ // The emulated-addressing modes buffer has no DXBC declaration; its size
61
+ // is the program's (withEmulatedAddressing).
62
+ const sizeInVec4 = binding.synthetic === "emulated-addressing" ? program.emulatedAddressing?.sizeInVec4 : declarationFor(program, binding)?.data?.sizeInVec4;
61
63
  if (!Number.isInteger(sizeInVec4) || sizeInVec4 < 1) {
62
64
  throw new Error(`WGSL uniform ${binding.id} has no positive vec4 size`);
63
65
  }
@@ -96,23 +98,23 @@ const TEXTURE_DIMENSIONS = Object.freeze({
96
98
  /** Instructions that read a texture without filtering: a texel load and a size query. */
97
99
  const UNFILTERED_TEXTURE_OPCODES = new Set(["ld", "ld_ms", "resinfo"]);
98
100
 
99
- /**
100
- * Whether this program only ever loads the texture at a register, never
101
- * samples it. Such a texture binds as `unfilterable-float`, which is what lets
102
- * a 32-bit float texture bind at all: WebGPU cannot filter one without the
103
- * optional `float32-filterable` feature. The impact effects read
104
- * `ImpactShieldDataMap` (RGBA32F, Tr2DataTextureManager) only with `ld`.
105
- * A register this program never touches stays `float`.
106
- *
107
- * @param {object} program Decoded shader program.
108
- * @param {number} registerIndex The texture register.
109
- * @returns {boolean} True when every use is a load or a size query.
101
+ /**
102
+ * Whether this program only ever loads the texture at a register, never
103
+ * samples it. Such a texture binds as `unfilterable-float`, which is what lets
104
+ * a 32-bit float texture bind at all: WebGPU cannot filter one without the
105
+ * optional `float32-filterable` feature. The impact effects read
106
+ * `ImpactShieldDataMap` (RGBA32F, Tr2DataTextureManager) only with `ld`.
107
+ * A register this program never touches stays `float`.
108
+ *
109
+ * @param {object} program Decoded shader program.
110
+ * @param {number} registerIndex The texture register.
111
+ * @returns {boolean} True when every use is a load or a size query.
110
112
  */
111
- /**
112
- * Whether any atomic instruction addresses this UAV register. WGSL applies
113
- * atomic builtins only to `atomic<T>` elements, so a typed buffer an atomic
114
- * touches must be laid out atomic, whatever its view format would otherwise
115
- * choose.
113
+ /**
114
+ * Whether any atomic instruction addresses this UAV register. WGSL applies
115
+ * atomic builtins only to `atomic<T>` elements, so a typed buffer an atomic
116
+ * touches must be laid out atomic, whatever its view format would otherwise
117
+ * choose.
116
118
  */
117
119
  function isAtomicallyAccessed(program, registerIndex) {
118
120
  return program.instructions.some(instruction => !instruction.isDeclaration && /^(imm_)?atomic_/u.test(instruction.opcodeName) && instruction.operands?.[0]?.typeName === "uav" && instruction.operands[0].registerIndex === registerIndex);
@@ -166,12 +168,12 @@ function structuredBufferLayout(binding) {
166
168
  };
167
169
  }
168
170
 
169
- /**
170
- * A typed buffer whose bound view format the policy names
171
- * (`hlsl/core/carbonTypedViews.js`, mapped by `wgslTypedViews.js`): a storage array of that format's element,
172
- * which `ld` expands to D3D's four components. The declaration must agree
173
- * with the format's component class, so a reused parameter name cannot read
174
- * a buffer with the wrong element type.
171
+ /**
172
+ * A typed buffer whose bound view format the policy names
173
+ * (`hlsl/core/carbonTypedViews.js`, mapped by `wgslTypedViews.js`): a storage array of that format's element,
174
+ * which `ld` expands to D3D's four components. The declaration must agree
175
+ * with the format's component class, so a reused parameter name cannot read
176
+ * a buffer with the wrong element type.
175
177
  */
176
178
  function typedBufferViewLayout(binding, format, access) {
177
179
  const view = TYPED_VIEW_FORMATS[format];
@@ -179,6 +181,9 @@ function typedBufferViewLayout(binding, format, access) {
179
181
  if (!view || returns.length !== 4 || returns.some(entry => entry !== view.returnType)) {
180
182
  throw new Error(`WGSL typed buffer ${binding.id} is declared ${returns.join(",") || "untyped"}, which does not match its bound ${format} view`);
181
183
  }
184
+ if (view.writeOnly) {
185
+ throw new Error(`WGSL typed buffer ${binding.id} names ${format}, which is a storage-texture format only`);
186
+ }
182
187
  return {
183
188
  declaration: access === "read_write" ? "var<storage, read_write>" : "var<storage, read>",
184
189
  type: `array<${view.element}>`,
@@ -198,15 +203,15 @@ function viewFormatFor(program, policy, identity) {
198
203
  return TYPED_VIEW_FORMATS[format].renderStagesOnly && program.stage === "compute" ? null : format;
199
204
  }
200
205
 
201
- /**
202
- * Typed `Buffer` SRVs. A DXBC `dcl_resource` of dimension `buffer` declares
203
- * the component class `ld` returns but not the bound DXGI view's width or
204
- * conversion: one uniform-uint declaration may be bound as R32_UINT or
205
- * R32G32B32A32_UINT, and one WGSL element type would index one of them wrong.
206
- * The view format therefore comes from the binding policy (Carbon's own
207
- * buffer creation, recorded in the binding plan); without it a render stage
208
- * fails closed. Compute otherwise admits only the bounded profiles'
209
- * separately validated scalar-word view (`array<i32|u32>`, 4-byte minimum).
206
+ /**
207
+ * Typed `Buffer` SRVs. A DXBC `dcl_resource` of dimension `buffer` declares
208
+ * the component class `ld` returns but not the bound DXGI view's width or
209
+ * conversion: one uniform-uint declaration may be bound as R32_UINT or
210
+ * R32G32B32A32_UINT, and one WGSL element type would index one of them wrong.
211
+ * The view format therefore comes from the binding policy (Carbon's own
212
+ * buffer creation, recorded in the binding plan); without it a render stage
213
+ * fails closed. Compute otherwise admits only the bounded profiles'
214
+ * separately validated scalar-word view (`array<i32|u32>`, 4-byte minimum).
210
215
  */
211
216
  function typedBufferLayout(program, binding, policy) {
212
217
  if (binding.structureStride !== null && binding.structureStride !== undefined) {
@@ -282,14 +287,16 @@ function uavBufferLayout(program, binding, policy) {
282
287
  // out atomic (the lensflare occluder's pixel stage counts into
283
288
  // FlareOcclusionBuffer with atomic_iadd); loads and stores then go through
284
289
  // atomicLoad/atomicStore.
285
- const atomicView = viewFormat === "R32_UINT" && isAtomicallyAccessed(program, bindingRegister(binding));
290
+ const atomicView = (viewFormat === "R32_UINT" || viewFormat === "R32_SINT") && isAtomicallyAccessed(program, bindingRegister(binding));
286
291
  if (viewFormat && binding.resourceDimension === "buffer" && !atomicView) {
287
292
  return typedBufferViewLayout(binding, viewFormat, "read_write");
288
293
  }
289
- const signedAtomic = policy.signedAtomicI32Identities.has(identity);
294
+ // A buffer Carbon creates R32_SINT (the typed-view table) is the signed
295
+ // atomic words, in every stage: the render-stage view is only for loads.
296
+ const signedAtomic = policy.signedAtomicI32Identities.has(identity) || policy.typedViews.get(identity) === "R32_SINT";
290
297
  const scalar = signedAtomic ? "sint" : "uint";
291
298
  if (binding.resourceDimension !== "buffer" || returns.length !== 4 || returns.some(entry => entry !== scalar)) {
292
- throw new Error(`WGSL storage resource ${binding.id} shape is not supported; ` + (signedAtomic ? "the exact profile requires a uniform sint typed buffer UAV" : "only typed uint buffer UAVs are supported"));
299
+ throw new Error(`WGSL storage resource ${binding.id} shape is not supported; ` + (signedAtomic ? "the exact profile requires a uniform sint typed buffer UAV" : "only typed uint buffer UAVs are supported") + ` (dimension ${binding.resourceDimension}, returns ${JSON.stringify(returns)}, view ${viewFormat ?? "none"})`);
293
300
  }
294
301
  return {
295
302
  declaration: "var<storage, read_write>",
@@ -302,14 +309,14 @@ function uavBufferLayout(program, binding, policy) {
302
309
  };
303
310
  }
304
311
 
305
- /**
306
- * Typed texture UAVs as WGSL storage textures, write-only, for compute.
307
- *
308
- * WGSL names a storage texture's format where DXBC names only the component
309
- * type, so a float4 UAV takes `rgba16float`: a WebGPU storage format, and the
310
- * format Carbon's DX12 path chooses when its R11G11B10 target is not
311
- * UAV-compatible (Tr2ReflectionProbe.cpp:235-236). A render target bound here
312
- * must be created in it.
312
+ /**
313
+ * Typed texture UAVs as WGSL storage textures, write-only, for compute.
314
+ *
315
+ * WGSL names a storage texture's format where DXBC names only the component
316
+ * type, so a float4 UAV takes `rgba16float`: a WebGPU storage format, and the
317
+ * format Carbon's DX12 path chooses when its R11G11B10 target is not
318
+ * UAV-compatible (Tr2ReflectionProbe.cpp:235-236). A render target bound here
319
+ * must be created in it.
313
320
  */
314
321
  const STORAGE_TEXTURE_DIMENSIONS = Object.freeze({
315
322
  texture2d: {
@@ -323,11 +330,11 @@ const STORAGE_TEXTURE_DIMENSIONS = Object.freeze({
323
330
  });
324
331
  const STORAGE_TEXTURE_FORMAT = "rgba16float";
325
332
 
326
- /**
327
- * A typed UAV texture whose Carbon format the policy names: that exact
328
- * storage format, in the pixel or compute stage, read-write when the program
329
- * loads it (WebGPU allows read-write access on single-channel 32-bit formats).
330
- * The declaration must agree with the format's component class.
333
+ /**
334
+ * A typed UAV texture whose Carbon format the policy names: that exact
335
+ * storage format, in the pixel or compute stage, read-write when the program
336
+ * loads it (WebGPU allows read-write access on single-channel 32-bit formats).
337
+ * The declaration must agree with the format's component class.
331
338
  */
332
339
  function namedStorageTextureLayout(program, binding, dimension, returns, format) {
333
340
  const view = TYPED_VIEW_FORMATS[format];
@@ -339,6 +346,9 @@ function namedStorageTextureLayout(program, binding, dimension, returns, format)
339
346
  }
340
347
  const register = bindingRegister(binding);
341
348
  const loaded = program.instructions.some(instruction => !instruction.isDeclaration && instruction.opcodeName === "ld_uav_typed" && instruction.operands?.some(operand => operand?.typeName === "uav" && operand.registerIndex === register));
349
+ if (loaded && view.writeOnly) {
350
+ throw new Error(`WGSL storage texture ${binding.id} is loaded, and its bound ${format} view is write-only in WebGPU`);
351
+ }
342
352
  const access = loaded ? "read-write" : "write-only";
343
353
  return {
344
354
  declaration: "var",
@@ -405,7 +415,7 @@ function lowerOne(program, binding, bindingIndex, policy) {
405
415
  identity,
406
416
  scopeIdentity: `${identity}@${visibility}`,
407
417
  resourceKind: binding.resourceKind,
408
- generatedSymbol: `${KIND_PREFIX[binding.resourceKind]}${registerIndex}${registerSpace ? `_space${registerSpace}` : ""}`,
418
+ generatedSymbol: binding.synthetic === "emulated-addressing" ? ADDRESS_MODES_SYMBOL : `${KIND_PREFIX[binding.resourceKind]}${registerIndex}${registerSpace ? `_space${registerSpace}` : ""}`,
409
419
  registerSpace,
410
420
  registerIndex,
411
421
  rangeId: binding.range?.rangeId ?? null,
@@ -535,10 +545,10 @@ function transformBindings(bindings, plan, stage) {
535
545
  return output;
536
546
  }
537
547
 
538
- /**
539
- * The layout policy: `signedAtomicI32Identities` (exact profiles only) and
540
- * `typedViews`, D3D identity to bound view format. Either may be
541
- * absent; nothing else is accepted.
548
+ /**
549
+ * The layout policy: `signedAtomicI32Identities` (exact profiles only) and
550
+ * `typedViews`, D3D identity to bound view format. Either may be
551
+ * absent; nothing else is accepted.
542
552
  */
543
553
  function normalizeLayoutPolicy(value) {
544
554
  if (value === undefined || value === null) {
@@ -572,16 +582,16 @@ function normalizeTypedBufferViews(value) {
572
582
  return views;
573
583
  }
574
584
 
575
- /**
576
- * Converts D3D register declarations to one deterministic WebGPU bind group.
577
- * Register spaces participate in ordering and identity; SM 5.1 range ids are
578
- * deliberately not treated as globally unique bindings.
579
- *
580
- * @param {object} program Frozen CJS shader IR.
581
- * @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.
582
- * @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.
583
- * @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.
584
- * @returns {object[]} Frozen WebGPU binding records.
585
+ /**
586
+ * Converts D3D register declarations to one deterministic WebGPU bind group.
587
+ * Register spaces participate in ordering and identity; SM 5.1 range ids are
588
+ * deliberately not treated as globally unique bindings.
589
+ *
590
+ * @param {object} program Frozen CJS shader IR.
591
+ * @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.
592
+ * @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.
593
+ * @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.
594
+ * @returns {object[]} Frozen WebGPU binding records.
585
595
  */
586
596
  function lowerBindingLayout(program, bindingPlan = null, layoutPolicy = null, resourceTransformPlan = null) {
587
597
  if (program?.format !== "CJS_SHADER_IR" || program.formatVersion !== 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"lowerBindingLayout.js","sources":["../../../../../../../src/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js"],"sourcesContent":["import { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\nimport { TYPED_VIEW_FORMATS } from \"./wgslTypedViews.js\";\n\nconst KIND_ORDER = Object.freeze({\n \"uniform-buffer\": 0,\n \"sampled-resource\": 1,\n sampler: 2,\n \"storage-resource\": 3\n});\n\nconst KIND_PREFIX = Object.freeze({\n \"uniform-buffer\": \"cb\",\n \"sampled-resource\": \"t\",\n sampler: \"s\",\n \"storage-resource\": \"u\"\n});\n\nconst STAGE_VISIBILITY = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\nconst STAGES = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\nconst LEGACY_SHARED_STAGES = Object.freeze([ \"vertex\", \"fragment\" ]);\nconst IDENTITY_PATTERN = /^(uniform-buffer|sampled-resource|sampler|storage-resource):\\d+:\\d+$/u;\n\nfunction bindingRegister(binding)\n{\n return binding.range?.lowerBound ?? binding.registerIndex;\n}\n\nfunction bindingSpace(binding)\n{\n return binding.range?.registerSpace ?? 0;\n}\n\nfunction bindingIdentity(binding)\n{\n return `${binding.resourceKind}:${bindingSpace(binding)}:${bindingRegister(binding)}`;\n}\n\nfunction validateScopeIdentity(identity, scopeIdentity, stages)\n{\n if (scopeIdentity === identity) return;\n if (stages.length !== 1 || scopeIdentity !== `${identity}@${stages[0]}`)\n {\n throw new Error(`WGSL binding plan contains invalid scope identity ${scopeIdentity || \"<empty>\"}`);\n }\n}\n\nfunction bindingFingerprint(binding)\n{\n return JSON.stringify({\n resourceKind: binding.resourceKind,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n type: binding.type,\n transformId: binding.transformId ?? null,\n arrayLayerCount: binding.arrayLayerCount ?? null,\n structureStride: binding.structureStride ?? null,\n typedView: binding.typedView ?? null,\n buffer: binding.buffer || null,\n texture: binding.texture || null,\n sampler: binding.sampler || null\n });\n}\n\nfunction declarationFor(program, binding)\n{\n return program.declarations.find((entry) => entry.dxbcOffset === binding.declarationOffset) || null;\n}\n\nfunction uniformLayout(program, binding)\n{\n const declaration = declarationFor(program, binding);\n const sizeInVec4 = declaration?.data?.sizeInVec4;\n if (!Number.isInteger(sizeInVec4) || sizeInVec4 < 1)\n {\n throw new Error(`WGSL uniform ${binding.id} has no positive vec4 size`);\n }\n if (binding.accessPattern !== \"immediate_indexed\" && binding.accessPattern !== \"dynamic_indexed\")\n {\n throw new Error(`WGSL uniform ${binding.id} requires unsupported ${binding.accessPattern || \"unknown\"} indexing`);\n }\n return {\n declaration: `var<uniform>`,\n type: `array<vec4<f32>, ${sizeInVec4}>`,\n buffer: {\n type: \"uniform\",\n hasDynamicOffset: false,\n minBindingSize: sizeInVec4 * 16\n }\n };\n}\n\nconst TEXTURE_DIMENSIONS = Object.freeze({\n texture2d: { type: \"texture_2d<f32>\", viewDimension: \"2d\" },\n texturecube: { type: \"texture_cube<f32>\", viewDimension: \"cube\" },\n texture3d: { type: \"texture_3d<f32>\", viewDimension: \"3d\" },\n texture2darray: { type: \"texture_2d_array<f32>\", viewDimension: \"2d-array\" }\n});\n\n/** Instructions that read a texture without filtering: a texel load and a size query. */\nconst UNFILTERED_TEXTURE_OPCODES = new Set([ \"ld\", \"ld_ms\", \"resinfo\" ]);\n\n/**\n * Whether this program only ever loads the texture at a register, never\n * samples it. Such a texture binds as `unfilterable-float`, which is what lets\n * a 32-bit float texture bind at all: WebGPU cannot filter one without the\n * optional `float32-filterable` feature. The impact effects read\n * `ImpactShieldDataMap` (RGBA32F, Tr2DataTextureManager) only with `ld`.\n * A register this program never touches stays `float`.\n *\n * @param {object} program Decoded shader program.\n * @param {number} registerIndex The texture register.\n * @returns {boolean} True when every use is a load or a size query.\n */\n/**\n * Whether any atomic instruction addresses this UAV register. WGSL applies\n * atomic builtins only to `atomic<T>` elements, so a typed buffer an atomic\n * touches must be laid out atomic, whatever its view format would otherwise\n * choose.\n */\nfunction isAtomicallyAccessed(program, registerIndex)\n{\n return program.instructions.some((instruction) =>\n !instruction.isDeclaration\n && /^(imm_)?atomic_/u.test(instruction.opcodeName)\n && instruction.operands?.[0]?.typeName === \"uav\"\n && instruction.operands[0].registerIndex === registerIndex);\n}\n\nfunction isOnlyLoaded(program, registerIndex)\n{\n let used = false;\n for (const instruction of program.instructions)\n {\n const touches = instruction.operands?.some((operand) =>\n operand?.typeName === \"resource\" && operand.registerIndex === registerIndex);\n if (!touches || instruction.isDeclaration) continue;\n if (!UNFILTERED_TEXTURE_OPCODES.has(instruction.opcodeName)) return false;\n used = true;\n }\n return used;\n}\n\nfunction textureLayout(program, binding)\n{\n const dimension = TEXTURE_DIMENSIONS[binding.resourceDimension];\n if (!dimension)\n {\n throw new Error(`WGSL sampled resource ${binding.id} has unsupported dimension ${binding.resourceDimension}`);\n }\n const returns = binding.returnType?.returnTypeNames || [];\n if (returns.length !== 4 || returns.some((entry) => entry !== \"float\"))\n {\n throw new Error(`WGSL sampled resource ${binding.id} requires a float4 return type`);\n }\n return {\n declaration: \"var\",\n type: dimension.type,\n texture: {\n sampleType: isOnlyLoaded(program, bindingRegister(binding)) ? \"unfilterable-float\" : \"float\",\n viewDimension: dimension.viewDimension,\n multisampled: false\n }\n };\n}\n\nfunction structuredBufferLayout(binding)\n{\n const stride = binding.structureStride;\n if (!Number.isInteger(stride) || stride < 4 || stride % 4 !== 0)\n {\n throw new Error(`WGSL structured resource ${binding.id} requires a positive DWORD-aligned stride`);\n }\n if (binding.resourceDimension !== null || binding.returnType !== null)\n {\n throw new Error(`WGSL structured resource ${binding.id} has unexpected typed-resource metadata`);\n }\n return {\n declaration: \"var<storage, read>\",\n type: \"array<u32>\",\n structureStride: stride,\n buffer: {\n type: \"read-only-storage\",\n hasDynamicOffset: false,\n minBindingSize: stride\n }\n };\n}\n\n/**\n * A typed buffer whose bound view format the policy names\n * (`hlsl/core/carbonTypedViews.js`, mapped by `wgslTypedViews.js`): a storage array of that format's element,\n * which `ld` expands to D3D's four components. The declaration must agree\n * with the format's component class, so a reused parameter name cannot read\n * a buffer with the wrong element type.\n */\nfunction typedBufferViewLayout(binding, format, access)\n{\n const view = TYPED_VIEW_FORMATS[format];\n const returns = binding.returnType?.returnTypeNames || [];\n if (!view || returns.length !== 4 || returns.some((entry) => entry !== view.returnType))\n {\n throw new Error(`WGSL typed buffer ${binding.id} is declared ${returns.join(\",\") || \"untyped\"}, which does not match its bound ${format} view`);\n }\n return {\n declaration: access === \"read_write\" ? \"var<storage, read_write>\" : \"var<storage, read>\",\n type: `array<${view.element}>`,\n typedView: format,\n buffer: {\n type: access === \"read_write\" ? \"storage\" : \"read-only-storage\",\n hasDynamicOffset: false,\n minBindingSize: 4\n }\n };\n}\n\n/** The policy's view format for an identity, if it applies to this stage. */\nfunction viewFormatFor(program, policy, identity)\n{\n const format = policy.typedViews.get(identity);\n if (!format) return null;\n return TYPED_VIEW_FORMATS[format].renderStagesOnly && program.stage === \"compute\" ? null : format;\n}\n\n/**\n * Typed `Buffer` SRVs. A DXBC `dcl_resource` of dimension `buffer` declares\n * the component class `ld` returns but not the bound DXGI view's width or\n * conversion: one uniform-uint declaration may be bound as R32_UINT or\n * R32G32B32A32_UINT, and one WGSL element type would index one of them wrong.\n * The view format therefore comes from the binding policy (Carbon's own\n * buffer creation, recorded in the binding plan); without it a render stage\n * fails closed. Compute otherwise admits only the bounded profiles'\n * separately validated scalar-word view (`array<i32|u32>`, 4-byte minimum).\n */\nfunction typedBufferLayout(program, binding, policy)\n{\n if (binding.structureStride !== null && binding.structureStride !== undefined)\n {\n throw new Error(`WGSL typed buffer resource ${binding.id} has unexpected structured-resource metadata`);\n }\n const format = viewFormatFor(program, policy, `sampled-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`);\n if (format) return typedBufferViewLayout(binding, format, \"read\");\n const returns = binding.returnType?.returnTypeNames || [];\n if (program.stage === \"compute\")\n {\n const component = returns.length === 4 && returns.every((entry) => entry === returns[0])\n ? { sint: \"i32\", uint: \"u32\" }[returns[0]]\n : null;\n if (!component)\n {\n throw new Error(`WGSL compute typed buffer resource ${binding.id} return type is not supported; bounded scalar-word profiles require uniform sint or uint components`);\n }\n return {\n declaration: \"var<storage, read>\",\n type: `array<${component}>`,\n buffer: {\n type: \"read-only-storage\",\n hasDynamicOffset: false,\n minBindingSize: 4\n }\n };\n }\n throw new Error(`WGSL typed buffer resource ${binding.id} is not supported in the ${program.stage} stage without explicit bound-view format metadata`);\n}\n\nfunction sampledResourceLayout(program, binding, policy)\n{\n if (binding.resourceDimension === \"buffer\") return typedBufferLayout(program, binding, policy);\n return binding.structureStride === null || binding.structureStride === undefined\n ? textureLayout(program, binding)\n : structuredBufferLayout(binding);\n}\n\nfunction uavBufferLayout(program, binding, policy)\n{\n // Writable storage is admitted for fragment and compute shaders. Vertex\n // storage writes remain outside the current portability contract.\n if (program.stage !== \"pixel\" && program.stage !== \"compute\")\n {\n throw new Error(`WGSL storage resource ${binding.id} is not supported in the ${program.stage} stage`);\n }\n if (binding.structureStride !== null && binding.structureStride !== undefined)\n {\n const stride = binding.structureStride;\n if (program.stage !== \"compute\")\n {\n throw new Error(`WGSL structured storage resource ${binding.id} is not supported in the ${program.stage} stage`);\n }\n if (!Number.isInteger(stride) || stride < 4 || stride % 4 !== 0)\n {\n throw new Error(`WGSL structured storage resource ${binding.id} requires a positive DWORD-aligned stride`);\n }\n if (binding.resourceDimension !== null || binding.returnType !== null)\n {\n throw new Error(`WGSL structured storage resource ${binding.id} has unexpected typed-resource metadata`);\n }\n return {\n declaration: \"var<storage, read_write>\",\n type: \"array<u32>\",\n structureStride: stride,\n buffer: {\n type: \"storage\",\n hasDynamicOffset: false,\n minBindingSize: stride\n }\n };\n }\n const returns = binding.returnType?.returnTypeNames || [];\n const storageTexture = STORAGE_TEXTURE_DIMENSIONS[binding.resourceDimension];\n if (storageTexture)\n {\n return storageTextureLayout(program, binding, storageTexture, returns,\n policy.typedViews.get(`storage-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`));\n }\n // Typed buffer UAVs become `array<atomic<u32>>` (atomic i32 only for an\n // effect-proven signed counter): WGSL requires atomic builtins for every\n // access to an atomic element, so compute profiles store with atomicStore.\n // The engine binds raw 4-byte words; no DXGI view conversion is reproduced.\n const identity = `storage-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`;\n const viewFormat = viewFormatFor(program, policy, identity);\n // An R32_UINT view that an atomic touches is the same 4-byte words laid\n // out atomic (the lensflare occluder's pixel stage counts into\n // FlareOcclusionBuffer with atomic_iadd); loads and stores then go through\n // atomicLoad/atomicStore.\n const atomicView = viewFormat === \"R32_UINT\" && isAtomicallyAccessed(program, bindingRegister(binding));\n if (viewFormat && binding.resourceDimension === \"buffer\" && !atomicView)\n {\n return typedBufferViewLayout(binding, viewFormat, \"read_write\");\n }\n const signedAtomic = policy.signedAtomicI32Identities.has(identity);\n const scalar = signedAtomic ? \"sint\" : \"uint\";\n if (binding.resourceDimension !== \"buffer\"\n || returns.length !== 4 || returns.some((entry) => entry !== scalar))\n {\n throw new Error(\n `WGSL storage resource ${binding.id} shape is not supported; `\n + (signedAtomic\n ? \"the exact profile requires a uniform sint typed buffer UAV\"\n : \"only typed uint buffer UAVs are supported\")\n );\n }\n return {\n declaration: \"var<storage, read_write>\",\n type: `array<atomic<${signedAtomic ? \"i32\" : \"u32\"}>>`,\n buffer: {\n type: \"storage\",\n hasDynamicOffset: false,\n minBindingSize: 4\n }\n };\n}\n\n/**\n * Typed texture UAVs as WGSL storage textures, write-only, for compute.\n *\n * WGSL names a storage texture's format where DXBC names only the component\n * type, so a float4 UAV takes `rgba16float`: a WebGPU storage format, and the\n * format Carbon's DX12 path chooses when its R11G11B10 target is not\n * UAV-compatible (Tr2ReflectionProbe.cpp:235-236). A render target bound here\n * must be created in it.\n */\nconst STORAGE_TEXTURE_DIMENSIONS = Object.freeze({\n texture2d: { type: \"texture_storage_2d\", viewDimension: \"2d\" },\n texture2darray: { type: \"texture_storage_2d_array\", viewDimension: \"2d-array\" }\n});\n\nconst STORAGE_TEXTURE_FORMAT = \"rgba16float\";\n\n/**\n * A typed UAV texture whose Carbon format the policy names: that exact\n * storage format, in the pixel or compute stage, read-write when the program\n * loads it (WebGPU allows read-write access on single-channel 32-bit formats).\n * The declaration must agree with the format's component class.\n */\nfunction namedStorageTextureLayout(program, binding, dimension, returns, format)\n{\n const view = TYPED_VIEW_FORMATS[format];\n if (program.stage !== \"compute\" && program.stage !== \"pixel\")\n {\n throw new Error(`WGSL storage texture ${binding.id} is not supported in the ${program.stage} stage`);\n }\n if (returns.length !== 4 || returns.some((entry) => entry !== view.returnType))\n {\n throw new Error(`WGSL storage texture ${binding.id} is declared ${returns.join(\",\") || \"untyped\"}, which does not match its bound ${format} view`);\n }\n const register = bindingRegister(binding);\n const loaded = program.instructions.some((instruction) => !instruction.isDeclaration\n && instruction.opcodeName === \"ld_uav_typed\"\n && instruction.operands?.some((operand) => operand?.typeName === \"uav\" && operand.registerIndex === register));\n const access = loaded ? \"read-write\" : \"write-only\";\n return {\n declaration: \"var\",\n type: `${dimension.type}<${view.storageTextureFormat}, ${loaded ? \"read_write\" : \"write\"}>`,\n typedView: format,\n storageTexture: {\n access,\n format: view.storageTextureFormat,\n viewDimension: dimension.viewDimension\n }\n };\n}\n\nfunction storageTextureLayout(program, binding, dimension, returns, format)\n{\n if (format) return namedStorageTextureLayout(program, binding, dimension, returns, format);\n if (program.stage !== \"compute\")\n {\n throw new Error(`WGSL storage texture ${binding.id} is supported only in the compute stage`);\n }\n if (returns.length !== 4 || returns.some((entry) => entry !== \"float\"))\n {\n throw new Error(`WGSL storage texture ${binding.id} requires a float4 return type`);\n }\n return {\n declaration: \"var\",\n type: `${dimension.type}<${STORAGE_TEXTURE_FORMAT}, write>`,\n storageTexture: {\n access: \"write-only\",\n format: STORAGE_TEXTURE_FORMAT,\n viewDimension: dimension.viewDimension\n }\n };\n}\n\nfunction samplerLayout(program, binding)\n{\n const declaration = declarationFor(program, binding);\n const mode = declaration?.data?.samplerModeName;\n if (mode && mode !== \"default\")\n {\n throw new Error(`WGSL sampler ${binding.id} has unsupported mode ${mode}`);\n }\n return {\n declaration: \"var\",\n type: \"sampler\",\n sampler: { type: \"filtering\" }\n };\n}\n\nfunction lowerOne(program, binding, bindingIndex, policy)\n{\n const registerIndex = bindingRegister(binding);\n const registerSpace = bindingSpace(binding);\n if (!Number.isInteger(registerIndex) || registerIndex < 0\n || !Number.isInteger(registerSpace) || registerSpace < 0)\n {\n throw new Error(`WGSL binding ${binding.id} has an unresolved register identity`);\n }\n if (binding.range?.unbounded || binding.range?.registerCount !== 1)\n {\n throw new Error(`WGSL binding ${binding.id} requires an unsupported array or unbounded range`);\n }\n let layout;\n if (binding.resourceKind === \"uniform-buffer\") layout = uniformLayout(program, binding);\n else if (binding.resourceKind === \"sampled-resource\") layout = sampledResourceLayout(program, binding, policy);\n else if (binding.resourceKind === \"sampler\") layout = samplerLayout(program, binding);\n else if (binding.resourceKind === \"storage-resource\")\n {\n layout = uavBufferLayout(program, binding, policy);\n }\n else throw new Error(`WGSL binding ${binding.id} has unsupported kind ${binding.resourceKind}`);\n const identity = `${binding.resourceKind}:${registerSpace}:${registerIndex}`;\n const visibility = STAGE_VISIBILITY[program.stage];\n if (!visibility) throw new Error(`WGSL binding ${binding.id} has unsupported stage ${program.stage || \"unknown\"}`);\n return {\n kind: \"wgsl-binding\",\n id: binding.id,\n identity,\n scopeIdentity: `${identity}@${visibility}`,\n resourceKind: binding.resourceKind,\n generatedSymbol: `${KIND_PREFIX[binding.resourceKind]}${registerIndex}${registerSpace ? `_space${registerSpace}` : \"\"}`,\n registerSpace,\n registerIndex,\n rangeId: binding.range?.rangeId ?? null,\n group: 0,\n binding: bindingIndex,\n visibility,\n declarationOffset: binding.declarationOffset,\n ...(typeof binding.transformId === \"string\"\n ? {\n transformId: binding.transformId,\n arrayLayerCount: binding.arrayLayerCount\n }\n : {}),\n ...layout\n };\n}\n\nfunction normalizeBindingPlan(plan, stage)\n{\n if (plan === null || plan === undefined) return null;\n if (plan?.format !== \"CJS_WGSL_BINDING_PLAN\"\n || ![ 1, 2, 3 ].includes(plan.formatVersion)\n || !Array.isArray(plan.bindings))\n {\n throw new TypeError(\"WGSL binding plan must be a CJS_WGSL_BINDING_PLAN version 1, 2, or 3 document\");\n }\n const resourceTransformPlan = plan.resourceTransforms === undefined\n ? null\n : normalizeResourceTransformPlan({\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\n formatVersion: 1,\n resourceTransforms: plan.resourceTransforms\n });\n if ((plan.formatVersion === 3) !== Boolean(resourceTransformPlan))\n {\n throw new Error(\"WGSL binding plan version 3 requires resource transforms, and earlier versions cannot contain them\");\n }\n const visibility = STAGE_VISIBILITY[stage];\n if (!visibility) throw new Error(`WGSL binding plan cannot target unsupported stage ${stage || \"unknown\"}`);\n const requestedShared = plan.sharedIdentities === undefined ? [] : plan.sharedIdentities;\n if (!Array.isArray(requestedShared)\n || requestedShared.some((entry) => typeof entry !== \"string\" || !IDENTITY_PATTERN.test(entry))\n || new Set(requestedShared).size !== requestedShared.length)\n {\n throw new Error(\"WGSL binding plan contains invalid shared identities\");\n }\n const sharedIdentities = new Set(requestedShared);\n const confirmedShared = new Set();\n const identities = new Map(STAGES.map((name) => [ name, new Map() ]));\n const scopeIdentities = new Set();\n const slots = new Map();\n for (const entry of plan.bindings)\n {\n const identity = bindingIdentity(entry);\n const stages = plan.formatVersion === 1\n ? (sharedIdentities.has(identity) ? LEGACY_SHARED_STAGES : [ visibility ])\n : entry.stages;\n const scopeIdentity = plan.formatVersion === 1\n ? (sharedIdentities.has(identity) ? identity : `${identity}@${visibility}`)\n : entry.scopeIdentity;\n if (!IDENTITY_PATTERN.test(identity)\n || entry.identity !== identity\n || !Array.isArray(stages) || !stages.length\n || stages.some((name) => !STAGES.includes(name))\n || new Set(stages).size !== stages.length\n || !Number.isInteger(entry.group) || entry.group < 0\n || !Number.isInteger(entry.binding) || entry.binding < 0)\n {\n throw new Error(`WGSL binding plan contains an invalid entry ${entry.identity || identity}`);\n }\n validateScopeIdentity(identity, scopeIdentity, stages);\n if (stages.length > 1)\n {\n if (scopeIdentity !== identity || !sharedIdentities.has(identity))\n {\n throw new Error(`WGSL binding plan shares unconfirmed identity ${identity}`);\n }\n confirmedShared.add(identity);\n }\n else if (sharedIdentities.has(identity))\n {\n throw new Error(`WGSL shared identity ${identity} does not cover multiple stages`);\n }\n else if (plan.formatVersion >= 2 && scopeIdentity === identity)\n {\n throw new Error(`WGSL binding plan uses unshared base identity ${identity}`);\n }\n if (scopeIdentities.has(scopeIdentity))\n {\n throw new Error(`WGSL binding plan contains duplicate scope identity ${scopeIdentity}`);\n }\n scopeIdentities.add(scopeIdentity);\n const normalizedEntry = plan.formatVersion === 1\n ? { ...entry, identity, scopeIdentity }\n : entry;\n for (const name of stages)\n {\n if (identities.get(name).has(identity))\n {\n throw new Error(`WGSL binding plan contains overlapping ${name} identity ${identity}`);\n }\n identities.get(name).set(identity, normalizedEntry);\n }\n const slot = `${entry.group}:${entry.binding}`;\n if (slots.has(slot)) throw new Error(`WGSL binding plan assigns ${slot} to multiple scope identities`);\n slots.set(slot, scopeIdentity);\n }\n for (const identity of sharedIdentities)\n {\n if (!confirmedShared.has(identity)) throw new Error(`WGSL binding plan does not contain shared identity ${identity}`);\n }\n return {\n bindings: identities.get(visibility),\n exactStageCoverage: plan.formatVersion >= 2,\n resourceTransformPlan\n };\n}\n\nfunction transformBindings(bindings, plan, stage)\n{\n if (!plan) return bindings;\n const transforms = plan.resourceTransforms.filter((transform) =>\n transform.stage === stage);\n if (!transforms.length) return bindings;\n const byIdentity = new Map(bindings.map((binding) => [ bindingIdentity(binding), binding ]));\n const inputs = new Map();\n for (const transform of transforms)\n {\n for (const input of transform.inputs)\n {\n if (inputs.has(input.identity))\n {\n throw new Error(`WGSL resource transforms overlap ${input.identity}`);\n }\n if (!byIdentity.has(input.identity))\n {\n throw new Error(`WGSL resource transform ${transform.id} references missing ${input.identity}`);\n }\n inputs.set(input.identity, { transform, input });\n }\n }\n const output = [];\n for (const binding of bindings)\n {\n const identity = bindingIdentity(binding);\n const mapped = inputs.get(identity);\n if (!mapped)\n {\n output.push(binding);\n continue;\n }\n if (mapped.input.layer !== 0) continue;\n const { transform } = mapped;\n if (transform.output.identity !== identity\n || binding.resourceKind !== \"sampled-resource\"\n || binding.resourceDimension !== \"texture2d\"\n || binding.structureStride !== null)\n {\n throw new Error(`WGSL resource transform ${transform.id} cannot replace ${identity}`);\n }\n output.push({\n ...binding,\n resourceDimension: \"texture2darray\",\n transformId: transform.id,\n arrayLayerCount: transform.output.layerCount\n });\n }\n return output;\n}\n\n/**\n * The layout policy: `signedAtomicI32Identities` (exact profiles only) and\n * `typedViews`, D3D identity to bound view format. Either may be\n * absent; nothing else is accepted.\n */\nfunction normalizeLayoutPolicy(value)\n{\n if (value === undefined || value === null)\n {\n return { signedAtomicI32Identities: new Set(), typedViews: new Map() };\n }\n const keys = value && typeof value === \"object\" && !Array.isArray(value) ? Object.keys(value) : null;\n const atomics = value?.signedAtomicI32Identities ?? [];\n if (!keys || keys.some((key) => key !== \"signedAtomicI32Identities\" && key !== \"typedViews\")\n || !Array.isArray(atomics)\n || atomics.some((identity) =>\n typeof identity !== \"string\"\n || !/^storage-resource:\\d+:\\d+$/u.test(identity))\n || new Set(atomics).size !== atomics.length)\n {\n throw new TypeError(\n \"WGSL binding layout profile policy must contain unique signedAtomicI32Identities\"\n );\n }\n return {\n signedAtomicI32Identities: new Set(atomics),\n typedViews: normalizeTypedBufferViews(value.typedViews)\n };\n}\n\nfunction normalizeTypedBufferViews(value)\n{\n const views = new Map();\n if (value === undefined || value === null) return views;\n if (typeof value !== \"object\" || Array.isArray(value))\n {\n throw new TypeError(\"WGSL typedViews must map D3D identities to view formats\");\n }\n for (const [ identity, format ] of Object.entries(value))\n {\n if (!/^(sampled-resource|storage-resource):\\d+:\\d+$/u.test(identity) || !TYPED_VIEW_FORMATS[format])\n {\n throw new TypeError(`WGSL typedViews has an unsupported entry ${identity}: ${format}`);\n }\n views.set(identity, format);\n }\n return views;\n}\n\n/**\n * Converts D3D register declarations to one deterministic WebGPU bind group.\n * Register spaces participate in ordering and identity; SM 5.1 range ids are\n * deliberately not treated as globally unique bindings.\n *\n * @param {object} program Frozen CJS shader IR.\n * @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.\n * @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.\n * @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.\n * @returns {object[]} Frozen WebGPU binding records.\n */\nexport function lowerBindingLayout(\n program,\n bindingPlan = null,\n layoutPolicy = null,\n resourceTransformPlan = null\n)\n{\n if (program?.format !== \"CJS_SHADER_IR\" || program.formatVersion !== 1)\n {\n throw new TypeError(\"WGSL binding lowering expects CJS_SHADER_IR version 1 input\");\n }\n const policy = normalizeLayoutPolicy(layoutPolicy);\n const planned = normalizeBindingPlan(bindingPlan, program.stage);\n // A plan carries the view formats it was built with, so emitting from it\n // reads each typed buffer the way the plan declared it.\n for (const [ identity, entry ] of planned?.bindings || [])\n {\n if (entry.typedView) policy.typedViews.set(identity, entry.typedView);\n }\n const explicitTransforms = normalizeResourceTransformPlan(resourceTransformPlan);\n if (planned?.resourceTransformPlan && explicitTransforms\n && JSON.stringify(planned.resourceTransformPlan) !== JSON.stringify(explicitTransforms))\n {\n throw new Error(\"WGSL binding plan and explicit resource transform plan disagree\");\n }\n const transforms = planned?.resourceTransformPlan || explicitTransforms;\n const sorted = transformBindings(Array.from(program.bindings).sort((left, right) =>\n bindingSpace(left) - bindingSpace(right)\n || (KIND_ORDER[left.resourceKind] ?? 99) - (KIND_ORDER[right.resourceKind] ?? 99)\n || bindingRegister(left) - bindingRegister(right)\n || left.declarationOffset - right.declarationOffset), transforms, STAGE_VISIBILITY[program.stage]);\n const identities = new Set();\n for (const binding of sorted)\n {\n const identity = `${binding.resourceKind}:${bindingSpace(binding)}:${bindingRegister(binding)}`;\n if (identities.has(identity)) throw new Error(`WGSL binding layout contains duplicate ${identity}`);\n identities.add(identity);\n }\n const lowered = sorted.map((binding, index) =>\n lowerOne(program, binding, index, policy));\n const symbols = new Map();\n for (const binding of lowered)\n {\n const identity = bindingIdentity(binding);\n if (symbols.has(binding.generatedSymbol) && symbols.get(binding.generatedSymbol) !== identity)\n {\n throw new Error(`WGSL binding layout uses ${binding.generatedSymbol} for multiple identities`);\n }\n symbols.set(binding.generatedSymbol, identity);\n }\n if (!planned) return lowered;\n if (planned.exactStageCoverage && planned.bindings.size !== lowered.length)\n {\n const declared = new Set(lowered.map(bindingIdentity));\n const unexpected = Array.from(planned.bindings.keys()).find((identity) => !declared.has(identity));\n throw new Error(`WGSL binding plan contains unexpected ${lowered[0]?.visibility || STAGE_VISIBILITY[program.stage]} identity ${unexpected || \"unknown\"}`);\n }\n return lowered.map((binding) =>\n {\n const identity = bindingIdentity(binding);\n const entry = planned.bindings.get(identity);\n if (!entry) throw new Error(`WGSL binding plan does not contain ${identity}`);\n if (bindingFingerprint(entry) !== bindingFingerprint(binding))\n {\n throw new Error(`WGSL binding plan layout for ${identity} does not match the shader declaration`);\n }\n return {\n ...binding,\n identity,\n scopeIdentity: entry.scopeIdentity || identity,\n group: entry.group,\n binding: entry.binding\n };\n });\n}\n"],"names":["KIND_ORDER","Object","freeze","sampler","KIND_PREFIX","STAGE_VISIBILITY","vertex","pixel","compute","STAGES","LEGACY_SHARED_STAGES","IDENTITY_PATTERN","bindingRegister","binding","range","lowerBound","registerIndex","bindingSpace","registerSpace","bindingIdentity","resourceKind","validateScopeIdentity","identity","scopeIdentity","stages","length","Error","bindingFingerprint","JSON","stringify","generatedSymbol","type","transformId","arrayLayerCount","structureStride","typedView","buffer","texture","declarationFor","program","declarations","find","entry","dxbcOffset","declarationOffset","uniformLayout","declaration","sizeInVec4","data","Number","isInteger","id","accessPattern","hasDynamicOffset","minBindingSize","TEXTURE_DIMENSIONS","texture2d","viewDimension","texturecube","texture3d","texture2darray","UNFILTERED_TEXTURE_OPCODES","Set","isAtomicallyAccessed","instructions","some","instruction","isDeclaration","test","opcodeName","operands","typeName","isOnlyLoaded","used","touches","operand","has","textureLayout","dimension","resourceDimension","returns","returnType","returnTypeNames","sampleType","multisampled","structuredBufferLayout","stride","typedBufferViewLayout","format","access","view","TYPED_VIEW_FORMATS","join","element","viewFormatFor","policy","typedViews","get","renderStagesOnly","stage","typedBufferLayout","undefined","component","every","sint","uint","sampledResourceLayout","uavBufferLayout","storageTexture","STORAGE_TEXTURE_DIMENSIONS","storageTextureLayout","viewFormat","atomicView","signedAtomic","signedAtomicI32Identities","scalar","STORAGE_TEXTURE_FORMAT","namedStorageTextureLayout","register","loaded","storageTextureFormat","samplerLayout","mode","samplerModeName","lowerOne","bindingIndex","unbounded","registerCount","layout","visibility","kind","rangeId","group","normalizeBindingPlan","plan","includes","formatVersion","Array","isArray","bindings","TypeError","resourceTransformPlan","resourceTransforms","normalizeResourceTransformPlan","Boolean","requestedShared","sharedIdentities","size","confirmedShared","identities","Map","map","name","scopeIdentities","slots","add","normalizedEntry","set","slot","exactStageCoverage","transformBindings","transforms","filter","transform","byIdentity","inputs","input","output","mapped","push","layer","layerCount","normalizeLayoutPolicy","value","keys","atomics","key","normalizeTypedBufferViews","views","entries","lowerBindingLayout","bindingPlan","layoutPolicy","planned","explicitTransforms","sorted","from","sort","left","right","lowered","index","symbols","declared","unexpected"],"mappings":"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"}
1
+ {"version":3,"file":"lowerBindingLayout.js","sources":["../../../../../../../src/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js"],"sourcesContent":["import { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\r\nimport { TYPED_VIEW_FORMATS } from \"./wgslTypedViews.js\";\r\nimport { ADDRESS_MODES_SYMBOL } from \"./emulatedAddressing.js\";\r\n\r\nconst KIND_ORDER = Object.freeze({\r\n \"uniform-buffer\": 0,\r\n \"sampled-resource\": 1,\r\n sampler: 2,\r\n \"storage-resource\": 3\r\n});\r\n\r\nconst KIND_PREFIX = Object.freeze({\r\n \"uniform-buffer\": \"cb\",\r\n \"sampled-resource\": \"t\",\r\n sampler: \"s\",\r\n \"storage-resource\": \"u\"\r\n});\r\n\r\nconst STAGE_VISIBILITY = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\r\nconst STAGES = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\r\nconst LEGACY_SHARED_STAGES = Object.freeze([ \"vertex\", \"fragment\" ]);\r\nconst IDENTITY_PATTERN = /^(uniform-buffer|sampled-resource|sampler|storage-resource):\\d+:\\d+$/u;\r\n\r\nfunction bindingRegister(binding)\r\n{\r\n return binding.range?.lowerBound ?? binding.registerIndex;\r\n}\r\n\r\nfunction bindingSpace(binding)\r\n{\r\n return binding.range?.registerSpace ?? 0;\r\n}\r\n\r\nfunction bindingIdentity(binding)\r\n{\r\n return `${binding.resourceKind}:${bindingSpace(binding)}:${bindingRegister(binding)}`;\r\n}\r\n\r\nfunction validateScopeIdentity(identity, scopeIdentity, stages)\r\n{\r\n if (scopeIdentity === identity) return;\r\n if (stages.length !== 1 || scopeIdentity !== `${identity}@${stages[0]}`)\r\n {\r\n throw new Error(`WGSL binding plan contains invalid scope identity ${scopeIdentity || \"<empty>\"}`);\r\n }\r\n}\r\n\r\nfunction bindingFingerprint(binding)\r\n{\r\n return JSON.stringify({\r\n resourceKind: binding.resourceKind,\r\n generatedSymbol: binding.generatedSymbol,\r\n registerSpace: binding.registerSpace,\r\n registerIndex: binding.registerIndex,\r\n type: binding.type,\r\n transformId: binding.transformId ?? null,\r\n arrayLayerCount: binding.arrayLayerCount ?? null,\r\n structureStride: binding.structureStride ?? null,\r\n typedView: binding.typedView ?? null,\r\n buffer: binding.buffer || null,\r\n texture: binding.texture || null,\r\n sampler: binding.sampler || null\r\n });\r\n}\r\n\r\nfunction declarationFor(program, binding)\r\n{\r\n return program.declarations.find((entry) => entry.dxbcOffset === binding.declarationOffset) || null;\r\n}\r\n\r\nfunction uniformLayout(program, binding)\r\n{\r\n // The emulated-addressing modes buffer has no DXBC declaration; its size\r\n // is the program's (withEmulatedAddressing).\r\n const sizeInVec4 = binding.synthetic === \"emulated-addressing\"\r\n ? program.emulatedAddressing?.sizeInVec4\r\n : declarationFor(program, binding)?.data?.sizeInVec4;\r\n if (!Number.isInteger(sizeInVec4) || sizeInVec4 < 1)\r\n {\r\n throw new Error(`WGSL uniform ${binding.id} has no positive vec4 size`);\r\n }\r\n if (binding.accessPattern !== \"immediate_indexed\" && binding.accessPattern !== \"dynamic_indexed\")\r\n {\r\n throw new Error(`WGSL uniform ${binding.id} requires unsupported ${binding.accessPattern || \"unknown\"} indexing`);\r\n }\r\n return {\r\n declaration: `var<uniform>`,\r\n type: `array<vec4<f32>, ${sizeInVec4}>`,\r\n buffer: {\r\n type: \"uniform\",\r\n hasDynamicOffset: false,\r\n minBindingSize: sizeInVec4 * 16\r\n }\r\n };\r\n}\r\n\r\nconst TEXTURE_DIMENSIONS = Object.freeze({\r\n texture2d: { type: \"texture_2d<f32>\", viewDimension: \"2d\" },\r\n texturecube: { type: \"texture_cube<f32>\", viewDimension: \"cube\" },\r\n texture3d: { type: \"texture_3d<f32>\", viewDimension: \"3d\" },\r\n texture2darray: { type: \"texture_2d_array<f32>\", viewDimension: \"2d-array\" }\r\n});\r\n\r\n/** Instructions that read a texture without filtering: a texel load and a size query. */\r\nconst UNFILTERED_TEXTURE_OPCODES = new Set([ \"ld\", \"ld_ms\", \"resinfo\" ]);\r\n\r\n/**\r\n * Whether this program only ever loads the texture at a register, never\r\n * samples it. Such a texture binds as `unfilterable-float`, which is what lets\r\n * a 32-bit float texture bind at all: WebGPU cannot filter one without the\r\n * optional `float32-filterable` feature. The impact effects read\r\n * `ImpactShieldDataMap` (RGBA32F, Tr2DataTextureManager) only with `ld`.\r\n * A register this program never touches stays `float`.\r\n *\r\n * @param {object} program Decoded shader program.\r\n * @param {number} registerIndex The texture register.\r\n * @returns {boolean} True when every use is a load or a size query.\r\n */\r\n/**\r\n * Whether any atomic instruction addresses this UAV register. WGSL applies\r\n * atomic builtins only to `atomic<T>` elements, so a typed buffer an atomic\r\n * touches must be laid out atomic, whatever its view format would otherwise\r\n * choose.\r\n */\r\nfunction isAtomicallyAccessed(program, registerIndex)\r\n{\r\n return program.instructions.some((instruction) =>\r\n !instruction.isDeclaration\r\n && /^(imm_)?atomic_/u.test(instruction.opcodeName)\r\n && instruction.operands?.[0]?.typeName === \"uav\"\r\n && instruction.operands[0].registerIndex === registerIndex);\r\n}\r\n\r\nfunction isOnlyLoaded(program, registerIndex)\r\n{\r\n let used = false;\r\n for (const instruction of program.instructions)\r\n {\r\n const touches = instruction.operands?.some((operand) =>\r\n operand?.typeName === \"resource\" && operand.registerIndex === registerIndex);\r\n if (!touches || instruction.isDeclaration) continue;\r\n if (!UNFILTERED_TEXTURE_OPCODES.has(instruction.opcodeName)) return false;\r\n used = true;\r\n }\r\n return used;\r\n}\r\n\r\nfunction textureLayout(program, binding)\r\n{\r\n const dimension = TEXTURE_DIMENSIONS[binding.resourceDimension];\r\n if (!dimension)\r\n {\r\n throw new Error(`WGSL sampled resource ${binding.id} has unsupported dimension ${binding.resourceDimension}`);\r\n }\r\n const returns = binding.returnType?.returnTypeNames || [];\r\n if (returns.length !== 4 || returns.some((entry) => entry !== \"float\"))\r\n {\r\n throw new Error(`WGSL sampled resource ${binding.id} requires a float4 return type`);\r\n }\r\n return {\r\n declaration: \"var\",\r\n type: dimension.type,\r\n texture: {\r\n sampleType: isOnlyLoaded(program, bindingRegister(binding)) ? \"unfilterable-float\" : \"float\",\r\n viewDimension: dimension.viewDimension,\r\n multisampled: false\r\n }\r\n };\r\n}\r\n\r\nfunction structuredBufferLayout(binding)\r\n{\r\n const stride = binding.structureStride;\r\n if (!Number.isInteger(stride) || stride < 4 || stride % 4 !== 0)\r\n {\r\n throw new Error(`WGSL structured resource ${binding.id} requires a positive DWORD-aligned stride`);\r\n }\r\n if (binding.resourceDimension !== null || binding.returnType !== null)\r\n {\r\n throw new Error(`WGSL structured resource ${binding.id} has unexpected typed-resource metadata`);\r\n }\r\n return {\r\n declaration: \"var<storage, read>\",\r\n type: \"array<u32>\",\r\n structureStride: stride,\r\n buffer: {\r\n type: \"read-only-storage\",\r\n hasDynamicOffset: false,\r\n minBindingSize: stride\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * A typed buffer whose bound view format the policy names\r\n * (`hlsl/core/carbonTypedViews.js`, mapped by `wgslTypedViews.js`): a storage array of that format's element,\r\n * which `ld` expands to D3D's four components. The declaration must agree\r\n * with the format's component class, so a reused parameter name cannot read\r\n * a buffer with the wrong element type.\r\n */\r\nfunction typedBufferViewLayout(binding, format, access)\r\n{\r\n const view = TYPED_VIEW_FORMATS[format];\r\n const returns = binding.returnType?.returnTypeNames || [];\r\n if (!view || returns.length !== 4 || returns.some((entry) => entry !== view.returnType))\r\n {\r\n throw new Error(`WGSL typed buffer ${binding.id} is declared ${returns.join(\",\") || \"untyped\"}, which does not match its bound ${format} view`);\r\n }\r\n if (view.writeOnly)\r\n {\r\n throw new Error(`WGSL typed buffer ${binding.id} names ${format}, which is a storage-texture format only`);\r\n }\r\n return {\r\n declaration: access === \"read_write\" ? \"var<storage, read_write>\" : \"var<storage, read>\",\r\n type: `array<${view.element}>`,\r\n typedView: format,\r\n buffer: {\r\n type: access === \"read_write\" ? \"storage\" : \"read-only-storage\",\r\n hasDynamicOffset: false,\r\n minBindingSize: 4\r\n }\r\n };\r\n}\r\n\r\n/** The policy's view format for an identity, if it applies to this stage. */\r\nfunction viewFormatFor(program, policy, identity)\r\n{\r\n const format = policy.typedViews.get(identity);\r\n if (!format) return null;\r\n return TYPED_VIEW_FORMATS[format].renderStagesOnly && program.stage === \"compute\" ? null : format;\r\n}\r\n\r\n/**\r\n * Typed `Buffer` SRVs. A DXBC `dcl_resource` of dimension `buffer` declares\r\n * the component class `ld` returns but not the bound DXGI view's width or\r\n * conversion: one uniform-uint declaration may be bound as R32_UINT or\r\n * R32G32B32A32_UINT, and one WGSL element type would index one of them wrong.\r\n * The view format therefore comes from the binding policy (Carbon's own\r\n * buffer creation, recorded in the binding plan); without it a render stage\r\n * fails closed. Compute otherwise admits only the bounded profiles'\r\n * separately validated scalar-word view (`array<i32|u32>`, 4-byte minimum).\r\n */\r\nfunction typedBufferLayout(program, binding, policy)\r\n{\r\n if (binding.structureStride !== null && binding.structureStride !== undefined)\r\n {\r\n throw new Error(`WGSL typed buffer resource ${binding.id} has unexpected structured-resource metadata`);\r\n }\r\n const format = viewFormatFor(program, policy, `sampled-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`);\r\n if (format) return typedBufferViewLayout(binding, format, \"read\");\r\n const returns = binding.returnType?.returnTypeNames || [];\r\n if (program.stage === \"compute\")\r\n {\r\n const component = returns.length === 4 && returns.every((entry) => entry === returns[0])\r\n ? { sint: \"i32\", uint: \"u32\" }[returns[0]]\r\n : null;\r\n if (!component)\r\n {\r\n throw new Error(`WGSL compute typed buffer resource ${binding.id} return type is not supported; bounded scalar-word profiles require uniform sint or uint components`);\r\n }\r\n return {\r\n declaration: \"var<storage, read>\",\r\n type: `array<${component}>`,\r\n buffer: {\r\n type: \"read-only-storage\",\r\n hasDynamicOffset: false,\r\n minBindingSize: 4\r\n }\r\n };\r\n }\r\n throw new Error(`WGSL typed buffer resource ${binding.id} is not supported in the ${program.stage} stage without explicit bound-view format metadata`);\r\n}\r\n\r\nfunction sampledResourceLayout(program, binding, policy)\r\n{\r\n if (binding.resourceDimension === \"buffer\") return typedBufferLayout(program, binding, policy);\r\n return binding.structureStride === null || binding.structureStride === undefined\r\n ? textureLayout(program, binding)\r\n : structuredBufferLayout(binding);\r\n}\r\n\r\nfunction uavBufferLayout(program, binding, policy)\r\n{\r\n // Writable storage is admitted for fragment and compute shaders. Vertex\r\n // storage writes remain outside the current portability contract.\r\n if (program.stage !== \"pixel\" && program.stage !== \"compute\")\r\n {\r\n throw new Error(`WGSL storage resource ${binding.id} is not supported in the ${program.stage} stage`);\r\n }\r\n if (binding.structureStride !== null && binding.structureStride !== undefined)\r\n {\r\n const stride = binding.structureStride;\r\n if (program.stage !== \"compute\")\r\n {\r\n throw new Error(`WGSL structured storage resource ${binding.id} is not supported in the ${program.stage} stage`);\r\n }\r\n if (!Number.isInteger(stride) || stride < 4 || stride % 4 !== 0)\r\n {\r\n throw new Error(`WGSL structured storage resource ${binding.id} requires a positive DWORD-aligned stride`);\r\n }\r\n if (binding.resourceDimension !== null || binding.returnType !== null)\r\n {\r\n throw new Error(`WGSL structured storage resource ${binding.id} has unexpected typed-resource metadata`);\r\n }\r\n return {\r\n declaration: \"var<storage, read_write>\",\r\n type: \"array<u32>\",\r\n structureStride: stride,\r\n buffer: {\r\n type: \"storage\",\r\n hasDynamicOffset: false,\r\n minBindingSize: stride\r\n }\r\n };\r\n }\r\n const returns = binding.returnType?.returnTypeNames || [];\r\n const storageTexture = STORAGE_TEXTURE_DIMENSIONS[binding.resourceDimension];\r\n if (storageTexture)\r\n {\r\n return storageTextureLayout(program, binding, storageTexture, returns,\r\n policy.typedViews.get(`storage-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`));\r\n }\r\n // Typed buffer UAVs become `array<atomic<u32>>` (atomic i32 only for an\r\n // effect-proven signed counter): WGSL requires atomic builtins for every\r\n // access to an atomic element, so compute profiles store with atomicStore.\r\n // The engine binds raw 4-byte words; no DXGI view conversion is reproduced.\r\n const identity = `storage-resource:${bindingSpace(binding)}:${bindingRegister(binding)}`;\r\n const viewFormat = viewFormatFor(program, policy, identity);\r\n // An R32_UINT view that an atomic touches is the same 4-byte words laid\r\n // out atomic (the lensflare occluder's pixel stage counts into\r\n // FlareOcclusionBuffer with atomic_iadd); loads and stores then go through\r\n // atomicLoad/atomicStore.\r\n const atomicView = (viewFormat === \"R32_UINT\" || viewFormat === \"R32_SINT\") && isAtomicallyAccessed(program, bindingRegister(binding));\r\n if (viewFormat && binding.resourceDimension === \"buffer\" && !atomicView)\r\n {\r\n return typedBufferViewLayout(binding, viewFormat, \"read_write\");\r\n }\r\n // A buffer Carbon creates R32_SINT (the typed-view table) is the signed\r\n // atomic words, in every stage: the render-stage view is only for loads.\r\n const signedAtomic = policy.signedAtomicI32Identities.has(identity) || policy.typedViews.get(identity) === \"R32_SINT\";\r\n const scalar = signedAtomic ? \"sint\" : \"uint\";\r\n if (binding.resourceDimension !== \"buffer\"\r\n || returns.length !== 4 || returns.some((entry) => entry !== scalar))\r\n {\r\n throw new Error(\r\n `WGSL storage resource ${binding.id} shape is not supported; `\r\n + (signedAtomic\r\n ? \"the exact profile requires a uniform sint typed buffer UAV\"\r\n : \"only typed uint buffer UAVs are supported\")\r\n + ` (dimension ${binding.resourceDimension}, returns ${JSON.stringify(returns)}, view ${viewFormat ?? \"none\"})`\r\n );\r\n }\r\n return {\r\n declaration: \"var<storage, read_write>\",\r\n type: `array<atomic<${signedAtomic ? \"i32\" : \"u32\"}>>`,\r\n buffer: {\r\n type: \"storage\",\r\n hasDynamicOffset: false,\r\n minBindingSize: 4\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Typed texture UAVs as WGSL storage textures, write-only, for compute.\r\n *\r\n * WGSL names a storage texture's format where DXBC names only the component\r\n * type, so a float4 UAV takes `rgba16float`: a WebGPU storage format, and the\r\n * format Carbon's DX12 path chooses when its R11G11B10 target is not\r\n * UAV-compatible (Tr2ReflectionProbe.cpp:235-236). A render target bound here\r\n * must be created in it.\r\n */\r\nconst STORAGE_TEXTURE_DIMENSIONS = Object.freeze({\r\n texture2d: { type: \"texture_storage_2d\", viewDimension: \"2d\" },\r\n texture2darray: { type: \"texture_storage_2d_array\", viewDimension: \"2d-array\" }\r\n});\r\n\r\nconst STORAGE_TEXTURE_FORMAT = \"rgba16float\";\r\n\r\n/**\r\n * A typed UAV texture whose Carbon format the policy names: that exact\r\n * storage format, in the pixel or compute stage, read-write when the program\r\n * loads it (WebGPU allows read-write access on single-channel 32-bit formats).\r\n * The declaration must agree with the format's component class.\r\n */\r\nfunction namedStorageTextureLayout(program, binding, dimension, returns, format)\r\n{\r\n const view = TYPED_VIEW_FORMATS[format];\r\n if (program.stage !== \"compute\" && program.stage !== \"pixel\")\r\n {\r\n throw new Error(`WGSL storage texture ${binding.id} is not supported in the ${program.stage} stage`);\r\n }\r\n if (returns.length !== 4 || returns.some((entry) => entry !== view.returnType))\r\n {\r\n throw new Error(`WGSL storage texture ${binding.id} is declared ${returns.join(\",\") || \"untyped\"}, which does not match its bound ${format} view`);\r\n }\r\n const register = bindingRegister(binding);\r\n const loaded = program.instructions.some((instruction) => !instruction.isDeclaration\r\n && instruction.opcodeName === \"ld_uav_typed\"\r\n && instruction.operands?.some((operand) => operand?.typeName === \"uav\" && operand.registerIndex === register));\r\n if (loaded && view.writeOnly)\r\n {\r\n throw new Error(`WGSL storage texture ${binding.id} is loaded, and its bound ${format} view is write-only in WebGPU`);\r\n }\r\n const access = loaded ? \"read-write\" : \"write-only\";\r\n return {\r\n declaration: \"var\",\r\n type: `${dimension.type}<${view.storageTextureFormat}, ${loaded ? \"read_write\" : \"write\"}>`,\r\n typedView: format,\r\n storageTexture: {\r\n access,\r\n format: view.storageTextureFormat,\r\n viewDimension: dimension.viewDimension\r\n }\r\n };\r\n}\r\n\r\nfunction storageTextureLayout(program, binding, dimension, returns, format)\r\n{\r\n if (format) return namedStorageTextureLayout(program, binding, dimension, returns, format);\r\n if (program.stage !== \"compute\")\r\n {\r\n throw new Error(`WGSL storage texture ${binding.id} is supported only in the compute stage`);\r\n }\r\n if (returns.length !== 4 || returns.some((entry) => entry !== \"float\"))\r\n {\r\n throw new Error(`WGSL storage texture ${binding.id} requires a float4 return type`);\r\n }\r\n return {\r\n declaration: \"var\",\r\n type: `${dimension.type}<${STORAGE_TEXTURE_FORMAT}, write>`,\r\n storageTexture: {\r\n access: \"write-only\",\r\n format: STORAGE_TEXTURE_FORMAT,\r\n viewDimension: dimension.viewDimension\r\n }\r\n };\r\n}\r\n\r\nfunction samplerLayout(program, binding)\r\n{\r\n const declaration = declarationFor(program, binding);\r\n const mode = declaration?.data?.samplerModeName;\r\n if (mode && mode !== \"default\")\r\n {\r\n throw new Error(`WGSL sampler ${binding.id} has unsupported mode ${mode}`);\r\n }\r\n return {\r\n declaration: \"var\",\r\n type: \"sampler\",\r\n sampler: { type: \"filtering\" }\r\n };\r\n}\r\n\r\nfunction lowerOne(program, binding, bindingIndex, policy)\r\n{\r\n const registerIndex = bindingRegister(binding);\r\n const registerSpace = bindingSpace(binding);\r\n if (!Number.isInteger(registerIndex) || registerIndex < 0\r\n || !Number.isInteger(registerSpace) || registerSpace < 0)\r\n {\r\n throw new Error(`WGSL binding ${binding.id} has an unresolved register identity`);\r\n }\r\n if (binding.range?.unbounded || binding.range?.registerCount !== 1)\r\n {\r\n throw new Error(`WGSL binding ${binding.id} requires an unsupported array or unbounded range`);\r\n }\r\n let layout;\r\n if (binding.resourceKind === \"uniform-buffer\") layout = uniformLayout(program, binding);\r\n else if (binding.resourceKind === \"sampled-resource\") layout = sampledResourceLayout(program, binding, policy);\r\n else if (binding.resourceKind === \"sampler\") layout = samplerLayout(program, binding);\r\n else if (binding.resourceKind === \"storage-resource\")\r\n {\r\n layout = uavBufferLayout(program, binding, policy);\r\n }\r\n else throw new Error(`WGSL binding ${binding.id} has unsupported kind ${binding.resourceKind}`);\r\n const identity = `${binding.resourceKind}:${registerSpace}:${registerIndex}`;\r\n const visibility = STAGE_VISIBILITY[program.stage];\r\n if (!visibility) throw new Error(`WGSL binding ${binding.id} has unsupported stage ${program.stage || \"unknown\"}`);\r\n return {\r\n kind: \"wgsl-binding\",\r\n id: binding.id,\r\n identity,\r\n scopeIdentity: `${identity}@${visibility}`,\r\n resourceKind: binding.resourceKind,\r\n generatedSymbol: binding.synthetic === \"emulated-addressing\"\r\n ? ADDRESS_MODES_SYMBOL\r\n : `${KIND_PREFIX[binding.resourceKind]}${registerIndex}${registerSpace ? `_space${registerSpace}` : \"\"}`,\r\n registerSpace,\r\n registerIndex,\r\n rangeId: binding.range?.rangeId ?? null,\r\n group: 0,\r\n binding: bindingIndex,\r\n visibility,\r\n declarationOffset: binding.declarationOffset,\r\n ...(typeof binding.transformId === \"string\"\r\n ? {\r\n transformId: binding.transformId,\r\n arrayLayerCount: binding.arrayLayerCount\r\n }\r\n : {}),\r\n ...layout\r\n };\r\n}\r\n\r\nfunction normalizeBindingPlan(plan, stage)\r\n{\r\n if (plan === null || plan === undefined) return null;\r\n if (plan?.format !== \"CJS_WGSL_BINDING_PLAN\"\r\n || ![ 1, 2, 3 ].includes(plan.formatVersion)\r\n || !Array.isArray(plan.bindings))\r\n {\r\n throw new TypeError(\"WGSL binding plan must be a CJS_WGSL_BINDING_PLAN version 1, 2, or 3 document\");\r\n }\r\n const resourceTransformPlan = plan.resourceTransforms === undefined\r\n ? null\r\n : normalizeResourceTransformPlan({\r\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\r\n formatVersion: 1,\r\n resourceTransforms: plan.resourceTransforms\r\n });\r\n if ((plan.formatVersion === 3) !== Boolean(resourceTransformPlan))\r\n {\r\n throw new Error(\"WGSL binding plan version 3 requires resource transforms, and earlier versions cannot contain them\");\r\n }\r\n const visibility = STAGE_VISIBILITY[stage];\r\n if (!visibility) throw new Error(`WGSL binding plan cannot target unsupported stage ${stage || \"unknown\"}`);\r\n const requestedShared = plan.sharedIdentities === undefined ? [] : plan.sharedIdentities;\r\n if (!Array.isArray(requestedShared)\r\n || requestedShared.some((entry) => typeof entry !== \"string\" || !IDENTITY_PATTERN.test(entry))\r\n || new Set(requestedShared).size !== requestedShared.length)\r\n {\r\n throw new Error(\"WGSL binding plan contains invalid shared identities\");\r\n }\r\n const sharedIdentities = new Set(requestedShared);\r\n const confirmedShared = new Set();\r\n const identities = new Map(STAGES.map((name) => [ name, new Map() ]));\r\n const scopeIdentities = new Set();\r\n const slots = new Map();\r\n for (const entry of plan.bindings)\r\n {\r\n const identity = bindingIdentity(entry);\r\n const stages = plan.formatVersion === 1\r\n ? (sharedIdentities.has(identity) ? LEGACY_SHARED_STAGES : [ visibility ])\r\n : entry.stages;\r\n const scopeIdentity = plan.formatVersion === 1\r\n ? (sharedIdentities.has(identity) ? identity : `${identity}@${visibility}`)\r\n : entry.scopeIdentity;\r\n if (!IDENTITY_PATTERN.test(identity)\r\n || entry.identity !== identity\r\n || !Array.isArray(stages) || !stages.length\r\n || stages.some((name) => !STAGES.includes(name))\r\n || new Set(stages).size !== stages.length\r\n || !Number.isInteger(entry.group) || entry.group < 0\r\n || !Number.isInteger(entry.binding) || entry.binding < 0)\r\n {\r\n throw new Error(`WGSL binding plan contains an invalid entry ${entry.identity || identity}`);\r\n }\r\n validateScopeIdentity(identity, scopeIdentity, stages);\r\n if (stages.length > 1)\r\n {\r\n if (scopeIdentity !== identity || !sharedIdentities.has(identity))\r\n {\r\n throw new Error(`WGSL binding plan shares unconfirmed identity ${identity}`);\r\n }\r\n confirmedShared.add(identity);\r\n }\r\n else if (sharedIdentities.has(identity))\r\n {\r\n throw new Error(`WGSL shared identity ${identity} does not cover multiple stages`);\r\n }\r\n else if (plan.formatVersion >= 2 && scopeIdentity === identity)\r\n {\r\n throw new Error(`WGSL binding plan uses unshared base identity ${identity}`);\r\n }\r\n if (scopeIdentities.has(scopeIdentity))\r\n {\r\n throw new Error(`WGSL binding plan contains duplicate scope identity ${scopeIdentity}`);\r\n }\r\n scopeIdentities.add(scopeIdentity);\r\n const normalizedEntry = plan.formatVersion === 1\r\n ? { ...entry, identity, scopeIdentity }\r\n : entry;\r\n for (const name of stages)\r\n {\r\n if (identities.get(name).has(identity))\r\n {\r\n throw new Error(`WGSL binding plan contains overlapping ${name} identity ${identity}`);\r\n }\r\n identities.get(name).set(identity, normalizedEntry);\r\n }\r\n const slot = `${entry.group}:${entry.binding}`;\r\n if (slots.has(slot)) throw new Error(`WGSL binding plan assigns ${slot} to multiple scope identities`);\r\n slots.set(slot, scopeIdentity);\r\n }\r\n for (const identity of sharedIdentities)\r\n {\r\n if (!confirmedShared.has(identity)) throw new Error(`WGSL binding plan does not contain shared identity ${identity}`);\r\n }\r\n return {\r\n bindings: identities.get(visibility),\r\n exactStageCoverage: plan.formatVersion >= 2,\r\n resourceTransformPlan\r\n };\r\n}\r\n\r\nfunction transformBindings(bindings, plan, stage)\r\n{\r\n if (!plan) return bindings;\r\n const transforms = plan.resourceTransforms.filter((transform) =>\r\n transform.stage === stage);\r\n if (!transforms.length) return bindings;\r\n const byIdentity = new Map(bindings.map((binding) => [ bindingIdentity(binding), binding ]));\r\n const inputs = new Map();\r\n for (const transform of transforms)\r\n {\r\n for (const input of transform.inputs)\r\n {\r\n if (inputs.has(input.identity))\r\n {\r\n throw new Error(`WGSL resource transforms overlap ${input.identity}`);\r\n }\r\n if (!byIdentity.has(input.identity))\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} references missing ${input.identity}`);\r\n }\r\n inputs.set(input.identity, { transform, input });\r\n }\r\n }\r\n const output = [];\r\n for (const binding of bindings)\r\n {\r\n const identity = bindingIdentity(binding);\r\n const mapped = inputs.get(identity);\r\n if (!mapped)\r\n {\r\n output.push(binding);\r\n continue;\r\n }\r\n if (mapped.input.layer !== 0) continue;\r\n const { transform } = mapped;\r\n if (transform.output.identity !== identity\r\n || binding.resourceKind !== \"sampled-resource\"\r\n || binding.resourceDimension !== \"texture2d\"\r\n || binding.structureStride !== null)\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} cannot replace ${identity}`);\r\n }\r\n output.push({\r\n ...binding,\r\n resourceDimension: \"texture2darray\",\r\n transformId: transform.id,\r\n arrayLayerCount: transform.output.layerCount\r\n });\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * The layout policy: `signedAtomicI32Identities` (exact profiles only) and\r\n * `typedViews`, D3D identity to bound view format. Either may be\r\n * absent; nothing else is accepted.\r\n */\r\nfunction normalizeLayoutPolicy(value)\r\n{\r\n if (value === undefined || value === null)\r\n {\r\n return { signedAtomicI32Identities: new Set(), typedViews: new Map() };\r\n }\r\n const keys = value && typeof value === \"object\" && !Array.isArray(value) ? Object.keys(value) : null;\r\n const atomics = value?.signedAtomicI32Identities ?? [];\r\n if (!keys || keys.some((key) => key !== \"signedAtomicI32Identities\" && key !== \"typedViews\")\r\n || !Array.isArray(atomics)\r\n || atomics.some((identity) =>\r\n typeof identity !== \"string\"\r\n || !/^storage-resource:\\d+:\\d+$/u.test(identity))\r\n || new Set(atomics).size !== atomics.length)\r\n {\r\n throw new TypeError(\r\n \"WGSL binding layout profile policy must contain unique signedAtomicI32Identities\"\r\n );\r\n }\r\n return {\r\n signedAtomicI32Identities: new Set(atomics),\r\n typedViews: normalizeTypedBufferViews(value.typedViews)\r\n };\r\n}\r\n\r\nfunction normalizeTypedBufferViews(value)\r\n{\r\n const views = new Map();\r\n if (value === undefined || value === null) return views;\r\n if (typeof value !== \"object\" || Array.isArray(value))\r\n {\r\n throw new TypeError(\"WGSL typedViews must map D3D identities to view formats\");\r\n }\r\n for (const [ identity, format ] of Object.entries(value))\r\n {\r\n if (!/^(sampled-resource|storage-resource):\\d+:\\d+$/u.test(identity) || !TYPED_VIEW_FORMATS[format])\r\n {\r\n throw new TypeError(`WGSL typedViews has an unsupported entry ${identity}: ${format}`);\r\n }\r\n views.set(identity, format);\r\n }\r\n return views;\r\n}\r\n\r\n/**\r\n * Converts D3D register declarations to one deterministic WebGPU bind group.\r\n * Register spaces participate in ordering and identity; SM 5.1 range ids are\r\n * deliberately not treated as globally unique bindings.\r\n *\r\n * @param {object} program Frozen CJS shader IR.\r\n * @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.\r\n * @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.\r\n * @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.\r\n * @returns {object[]} Frozen WebGPU binding records.\r\n */\r\nexport function lowerBindingLayout(\r\n program,\r\n bindingPlan = null,\r\n layoutPolicy = null,\r\n resourceTransformPlan = null\r\n)\r\n{\r\n if (program?.format !== \"CJS_SHADER_IR\" || program.formatVersion !== 1)\r\n {\r\n throw new TypeError(\"WGSL binding lowering expects CJS_SHADER_IR version 1 input\");\r\n }\r\n const policy = normalizeLayoutPolicy(layoutPolicy);\r\n const planned = normalizeBindingPlan(bindingPlan, program.stage);\r\n // A plan carries the view formats it was built with, so emitting from it\r\n // reads each typed buffer the way the plan declared it.\r\n for (const [ identity, entry ] of planned?.bindings || [])\r\n {\r\n if (entry.typedView) policy.typedViews.set(identity, entry.typedView);\r\n }\r\n const explicitTransforms = normalizeResourceTransformPlan(resourceTransformPlan);\r\n if (planned?.resourceTransformPlan && explicitTransforms\r\n && JSON.stringify(planned.resourceTransformPlan) !== JSON.stringify(explicitTransforms))\r\n {\r\n throw new Error(\"WGSL binding plan and explicit resource transform plan disagree\");\r\n }\r\n const transforms = planned?.resourceTransformPlan || explicitTransforms;\r\n const sorted = transformBindings(Array.from(program.bindings).sort((left, right) =>\r\n bindingSpace(left) - bindingSpace(right)\r\n || (KIND_ORDER[left.resourceKind] ?? 99) - (KIND_ORDER[right.resourceKind] ?? 99)\r\n || bindingRegister(left) - bindingRegister(right)\r\n || left.declarationOffset - right.declarationOffset), transforms, STAGE_VISIBILITY[program.stage]);\r\n const identities = new Set();\r\n for (const binding of sorted)\r\n {\r\n const identity = `${binding.resourceKind}:${bindingSpace(binding)}:${bindingRegister(binding)}`;\r\n if (identities.has(identity)) throw new Error(`WGSL binding layout contains duplicate ${identity}`);\r\n identities.add(identity);\r\n }\r\n const lowered = sorted.map((binding, index) =>\r\n lowerOne(program, binding, index, policy));\r\n const symbols = new Map();\r\n for (const binding of lowered)\r\n {\r\n const identity = bindingIdentity(binding);\r\n if (symbols.has(binding.generatedSymbol) && symbols.get(binding.generatedSymbol) !== identity)\r\n {\r\n throw new Error(`WGSL binding layout uses ${binding.generatedSymbol} for multiple identities`);\r\n }\r\n symbols.set(binding.generatedSymbol, identity);\r\n }\r\n if (!planned) return lowered;\r\n if (planned.exactStageCoverage && planned.bindings.size !== lowered.length)\r\n {\r\n const declared = new Set(lowered.map(bindingIdentity));\r\n const unexpected = Array.from(planned.bindings.keys()).find((identity) => !declared.has(identity));\r\n throw new Error(`WGSL binding plan contains unexpected ${lowered[0]?.visibility || STAGE_VISIBILITY[program.stage]} identity ${unexpected || \"unknown\"}`);\r\n }\r\n return lowered.map((binding) =>\r\n {\r\n const identity = bindingIdentity(binding);\r\n const entry = planned.bindings.get(identity);\r\n if (!entry) throw new Error(`WGSL binding plan does not contain ${identity}`);\r\n if (bindingFingerprint(entry) !== bindingFingerprint(binding))\r\n {\r\n throw new Error(`WGSL binding plan layout for ${identity} does not match the shader declaration`);\r\n }\r\n return {\r\n ...binding,\r\n identity,\r\n scopeIdentity: entry.scopeIdentity || identity,\r\n group: entry.group,\r\n binding: entry.binding\r\n };\r\n });\r\n}\r\n"],"names":["KIND_ORDER","Object","freeze","sampler","KIND_PREFIX","STAGE_VISIBILITY","vertex","pixel","compute","STAGES","LEGACY_SHARED_STAGES","IDENTITY_PATTERN","bindingRegister","binding","range","lowerBound","registerIndex","bindingSpace","registerSpace","bindingIdentity","resourceKind","validateScopeIdentity","identity","scopeIdentity","stages","length","Error","bindingFingerprint","JSON","stringify","generatedSymbol","type","transformId","arrayLayerCount","structureStride","typedView","buffer","texture","declarationFor","program","declarations","find","entry","dxbcOffset","declarationOffset","uniformLayout","sizeInVec4","synthetic","emulatedAddressing","data","Number","isInteger","id","accessPattern","declaration","hasDynamicOffset","minBindingSize","TEXTURE_DIMENSIONS","texture2d","viewDimension","texturecube","texture3d","texture2darray","UNFILTERED_TEXTURE_OPCODES","Set","isAtomicallyAccessed","instructions","some","instruction","isDeclaration","test","opcodeName","operands","typeName","isOnlyLoaded","used","touches","operand","has","textureLayout","dimension","resourceDimension","returns","returnType","returnTypeNames","sampleType","multisampled","structuredBufferLayout","stride","typedBufferViewLayout","format","access","view","TYPED_VIEW_FORMATS","join","writeOnly","element","viewFormatFor","policy","typedViews","get","renderStagesOnly","stage","typedBufferLayout","undefined","component","every","sint","uint","sampledResourceLayout","uavBufferLayout","storageTexture","STORAGE_TEXTURE_DIMENSIONS","storageTextureLayout","viewFormat","atomicView","signedAtomic","signedAtomicI32Identities","scalar","STORAGE_TEXTURE_FORMAT","namedStorageTextureLayout","register","loaded","storageTextureFormat","samplerLayout","mode","samplerModeName","lowerOne","bindingIndex","unbounded","registerCount","layout","visibility","kind","ADDRESS_MODES_SYMBOL","rangeId","group","normalizeBindingPlan","plan","includes","formatVersion","Array","isArray","bindings","TypeError","resourceTransformPlan","resourceTransforms","normalizeResourceTransformPlan","Boolean","requestedShared","sharedIdentities","size","confirmedShared","identities","Map","map","name","scopeIdentities","slots","add","normalizedEntry","set","slot","exactStageCoverage","transformBindings","transforms","filter","transform","byIdentity","inputs","input","output","mapped","push","layer","layerCount","normalizeLayoutPolicy","value","keys","atomics","key","normalizeTypedBufferViews","views","entries","lowerBindingLayout","bindingPlan","layoutPolicy","planned","explicitTransforms","sorted","from","sort","left","right","lowered","index","symbols","declared","unexpected"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ModesExpression, ADDRESS_BORDER_2, ADDRESS_BORDER_3, BorderColorLiteral, ShouldEmulate, ADDRESS_COORD_2, ADDRESS_COORD_3 } from './emulatedAddressing.js';
1
+ import { ShouldEmulate, ModesExpression, ADDRESS_BORDER_2, ADDRESS_BORDER_3, BorderColorLiteral, ADDRESS_COORD_2, ADDRESS_COORD_3 } from './emulatedAddressing.js';
2
2
  import { fixedSourceLanes } from '../ir/sourceLanes.js';
3
3
  import { validateIndexableTempRead, validateIndexableTempOperand, validateIndexableTempWrite } from '../ir/indexableTemps.js';
4
4
  import { hoistEscapingValues } from './hoistEscapingValues.js';
@@ -1079,23 +1079,28 @@ function expressionFor(program, instruction, write, inputs, bindings, context =
1079
1079
  // is why this must happen in the emitter: the caller knows the modes
1080
1080
  // and not the mapping, and DXBC carries no sampler state.
1081
1081
  const profile = program.emulatedAddressing ?? null;
1082
- const declared = profile?.samplerModes?.[sampler] ?? null;
1082
+ const declared = profile?.samplerModes?.[sampler.registerIndex] ?? null;
1083
1083
  const axes = [declared?.u, declared?.v, declared?.w];
1084
- const forced = profile?.textures?.find(entry => entry.registerIndex === resource) ?? null;
1085
- const emulated = Boolean(profile) && !transformed && ShouldEmulate(axes, forced);
1084
+ const forced = profile?.textures?.find(entry => entry.registerIndex === resource.registerIndex) ?? null;
1085
+ // Not a cube: its coordinate is a direction, where a [0, 1] border test
1086
+ // is meaningless (decalholev5 samples its interior cube through the
1087
+ // decals' bordered sampler). The WebGL2 emitter refuses it the same way.
1088
+ const emulated = Boolean(profile) && !transformed && viewDimension !== "cube" && ShouldEmulate(axes, forced);
1086
1089
  let modes = null;
1087
1090
  if (emulated) {
1088
- const modesBuffer = bindingForOperand(bindings, "uniform-buffer", profile.bufferRegister ?? 8);
1091
+ const modesBuffer = bindings.find(entry => entry.resourceKind === "uniform-buffer" && entry.registerIndex === (profile.bufferRegister ?? 8)) ?? null;
1089
1092
  if (!modesBuffer) {
1090
1093
  throw new Error(`WGSL fragment instruction ${instruction.index} needs emulated addressing but the ` + `modes buffer at register ${profile.bufferRegister ?? 8} is not bound`);
1091
1094
  }
1092
- modes = ModesExpression(modesBuffer.generatedSymbol, resource, coordComponents);
1095
+
1096
+ // By sampler register, as withEmulatedAddressing lays the buffer out.
1097
+ modes = ModesExpression(modesBuffer.generatedSymbol, sampler.registerIndex, coordComponents);
1093
1098
  coord = `${coordComponents === 2 ? ADDRESS_COORD_2 : ADDRESS_COORD_3}(${coord}, ${modes})`;
1094
1099
  }
1095
1100
  const sampled = op === "sample_b" ? `textureSampleBias(${tex}, ${coord}${arrayArg}, ${source(4, 1)}${offsetArg})` : op === "sample_l" ? `textureSampleLevel(${tex}, ${coord}${arrayArg}, ${source(4, 1)}${offsetArg})` : op === "sample_d" ? `textureSampleGrad(${tex}, ${coord}${arrayArg}, ${source(4, gradientComponents)}, ${source(5, gradientComponents)}${offsetArg})` : `textureSample(${tex}, ${coord}${arrayArg}${offsetArg})`;
1096
1101
  // Applied to the already sampled value so it composes with every sample
1097
1102
  // form above rather than needing a variant of each.
1098
- const bordered = emulated ? `${coordComponents === 2 ? ADDRESS_BORDER_2 : ADDRESS_BORDER_3}(${sampled}, ${coord}, ` + `${modes}, ${BorderColorLiteral(forced?.borderColor)})` : sampled;
1103
+ const bordered = emulated ? `${coordComponents === 2 ? ADDRESS_BORDER_2 : ADDRESS_BORDER_3}(${sampled}, ${coord}, ` + `${modes}, ${BorderColorLiteral(forced?.borderColor ?? declared?.borderColor)})` : sampled;
1099
1104
  const components = rawSelectedComponents(resource, mask, count);
1100
1105
  return count === 4 && components.join("") === "xyzw" ? bordered : `${bordered}.${components.join("")}`;
1101
1106
  }
@@ -1215,6 +1220,10 @@ function lowerStorageTextureStore(program, instruction, inputs, bindings) {
1215
1220
  if (instruction.operands.length !== 3 || instruction.saturate) {
1216
1221
  throw new Error(`WGSL store_uav_typed instruction ${instruction.index} has an unsupported operand shape`);
1217
1222
  }
1223
+ // A UAV Carbon never binds (withoutUnboundUavs): D3D11 drops the write.
1224
+ if (!Number.isInteger(uav.resourceReference?.rangeId) && program.unboundUavRegisters?.includes(uav.registerIndex)) {
1225
+ return [];
1226
+ }
1218
1227
  const binding = bindingForOperand(bindings, "storage-resource", uav);
1219
1228
  const bufferView = binding?.buffer ? TYPED_VIEW_FORMATS[binding.typedView] : null;
1220
1229
  if (bufferView) {