@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.
- package/dist/global/consts/effectPaths.js +4 -1
- package/dist/global/consts/effectPaths.js.map +1 -1
- package/dist/global/consts/index.js +1 -1
- package/dist/global/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +19 -2
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/resource/format/index.js +1 -1
- package/dist/resource/formats/hlsl/core/carbonTypedViews.js +121 -65
- package/dist/resource/formats/hlsl/core/carbonTypedViews.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +10 -7
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgpu/core/effectBackendBodySet.js +3 -1
- package/dist/resource/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/resource/formats/webgpu/core/packageEffect.js +5 -0
- package/dist/resource/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js +20 -0
- package/dist/resource/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js +93 -4
- package/dist/resource/formats/webgpu/core/wgsl/emulatedAddressing.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +74 -64
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js +16 -7
- package/dist/resource/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js +69 -27
- package/dist/resource/formats/webgpu/core/wgsl/wgslTypedViews.js.map +1 -1
- package/dist/resource/geometry/registerGeometryResources.js +10 -1
- package/dist/resource/geometry/registerGeometryResources.js.map +1 -1
- package/dist/sof/EveSOFDNA.js +4 -2
- package/dist/sof/EveSOFDNA.js.map +1 -1
- package/dist/sof/EveSOFDataMgr.js +83 -69
- package/dist/sof/EveSOFDataMgr.js.map +1 -1
- package/dist/trinity/core/Tr2Denoiser.js +6 -1
- package/dist/trinity/core/Tr2Denoiser.js.map +1 -1
- package/dist/trinity/core/Tr2ShadowMap.js +7 -2
- package/dist/trinity/core/Tr2ShadowMap.js.map +1 -1
- package/dist/trinity/core/context/Tr2RenderContext.js +43 -0
- package/dist/trinity/core/context/Tr2RenderContext.js.map +1 -1
- package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js +134 -0
- package/dist/trinity/core/device/Tr2GpuStructuredBuffer.js.map +1 -0
- package/dist/trinity/core/index.js +1 -0
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +410 -124
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/eve/effect/lensflare/EveLensflare.js +303 -312
- package/dist/trinity/eve/effect/lensflare/EveLensflare.js.map +1 -1
- package/dist/trinity/eve/effect/lensflare/EveOccluder.js +117 -0
- package/dist/trinity/eve/effect/lensflare/EveOccluder.js.map +1 -0
- package/dist/trinity/eve/index.js +1 -0
- package/dist/trinity/eve/index.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceScene.js +286 -6
- package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +212 -32
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
- package/dist/trinity/generated/eve/effect/index.js +0 -1
- package/dist/trinity/generated/eve/effect/index.js.map +1 -1
- package/dist/trinity/generated/eve/index.js +0 -1
- package/dist/trinity/generated/eve/index.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -2
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +2 -2
- package/dist/trinity/postProcess/Tr2PostProcessRenderer.js +4 -1
- package/dist/trinity/postProcess/Tr2PostProcessRenderer.js.map +1 -1
- package/dist/trinity/postProcess/Tr2SSAO.js +282 -21
- package/dist/trinity/postProcess/Tr2SSAO.js.map +1 -1
- package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js +71 -53
- package/dist/trinity/shader/parameter/Tr2RuntimeTextureParameter.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +81 -18
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js +46 -4
- package/dist/trinityal/webgpu/CjsWebgpuResourceSetAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js +32 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js +27 -0
- package/dist/trinityal/webgpu/CjsWebgpuShaderProgramAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +29 -4
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js +32 -2
- package/dist/trinityal/webgpu/core/CjsWebgpuPsoDescription.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +57 -5
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js +111 -5
- package/dist/trinityal/webgpu/core/CjsWebgpuWorkQueue.js.map +1 -1
- package/docs/trinity/reference/classes/generated.md +20 -20
- package/docs/trinity/reference/classes/post-process.md +1 -1
- package/package.json +1 -1
- package/dist/trinity/generated/eve/effect/EveOccluder.js +0 -38
- package/dist/trinity/generated/eve/effect/EveOccluder.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2GpuStructuredBuffer.js +0 -48
- 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
|
-
|
|
60
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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) {
|