@carbonenginejs/runtime-resource 0.12.2 → 0.14.0
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.
- package/README.md +21 -0
- package/dist/CjsResMan.js +393 -29
- package/dist/CjsResMan.js.map +1 -1
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +165 -118
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +7 -113
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectRecords.js +258 -66
- package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
- package/dist/format/effect/effectBodyInventory.js +146 -0
- package/dist/format/effect/effectBodyInventory.js.map +1 -0
- package/dist/format/effect/effectPermutationGraph.js +13 -13
- package/dist/format/effect/effectPermutationGraph.js.map +1 -1
- package/dist/format/index.js +4 -4
- package/dist/formats/black/CjsBlackFormat.js +19 -1
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +28 -9
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/busNodes.js +252 -0
- package/dist/formats/bnk/core/busNodes.js.map +1 -0
- package/dist/formats/bnk/core/effectNodes.js +147 -0
- package/dist/formats/bnk/core/effectNodes.js.map +1 -0
- package/dist/formats/bnk/core/eventAction.js +135 -24
- package/dist/formats/bnk/core/eventAction.js.map +1 -1
- package/dist/formats/bnk/core/globalSettings.js +215 -0
- package/dist/formats/bnk/core/globalSettings.js.map +1 -0
- package/dist/formats/bnk/core/helpers.js +37 -5
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +43 -19
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/nodeBase.js +28 -7
- package/dist/formats/bnk/core/nodeBase.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +40 -1
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dxbc/CjsDxbcFormat.js +45 -0
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/gltf/CjsGltfFormat.js +1 -39
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +1 -21
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/hlsl/CjsHlslFormat.js +0 -21
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +118 -49
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
- package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
- package/dist/formats/hlsl/core/localLightFamily.js +133 -0
- package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +79 -73
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +8 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +11 -691
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
- package/dist/formats/index.js +4 -2
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/obj/CjsObjFormat.js +1 -22
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +1 -21
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/pickle/CjsPickleFormat.js +214 -0
- package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
- package/dist/formats/pickle/index.js +2 -0
- package/dist/formats/pickle/index.js.map +1 -0
- package/dist/formats/red/core/redGraph.js +11 -8
- package/dist/formats/red/core/redGraph.js.map +1 -1
- package/dist/formats/stl/CjsStlFormat.js +1 -46
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +1 -21
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/webgl/CjsWebglFormat.js +33 -55
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
- package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +216 -108
- package/dist/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/formats/webgl/core/errors.js +1 -1
- package/dist/formats/webgl/core/errors.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +166 -24
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +63 -5
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
- package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
- package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
- package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +12 -8
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +33 -172
- package/dist/formats/webgl/core/helpers.js.map +1 -1
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js +249 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgpu/CjsWebgpuFormat.js +15 -15
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +37 -145
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
- package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +13 -27
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +1 -1
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +4 -4
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js +18 -18
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/formats/webgpu/core/errors.js +1 -1
- package/dist/formats/webgpu/core/errors.js.map +1 -1
- package/dist/formats/webgpu/core/helpers.js +22 -22
- package/dist/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffect.js +11 -15
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffectSelection.js +1 -1
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +23 -23
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +6 -6
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +3 -3
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +4 -6
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +27 -1
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsLoadingObject.js +19 -0
- package/dist/resource/CjsLoadingObject.js.map +1 -0
- package/dist/resource/CjsResource.js +4 -0
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/ResourceHandlerMode.js +14 -0
- package/dist/resource/ResourceHandlerMode.js.map +1 -0
- package/dist/resource/index.js +2 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/shader/Tr2EffectRes.js +118 -213
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- package/dist/resource/shader/Tr2Shader.js +37 -15
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +37 -29
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +39 -34
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +51 -30
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +45 -25
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +51 -17
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +219 -88
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +28 -18
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +96 -39
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
- package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
- package/dist/resource/shader/reflection/shaderStage.js +22 -0
- package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +68 -10
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- package/dist/worker/CjsResManMainThreadLoader.js +9 -7
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
- package/dist/worker/CjsResManWorker.js +5 -4
- package/dist/worker/CjsResManWorker.js.map +1 -1
- package/dist/worker/CjsResManWorkerLoader.js +9 -6
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
- package/docs/README.md +2 -2
- package/docs/architecture.md +12 -3
- package/docs/concepts/resource-lifecycle.md +9 -8
- package/docs/concepts/shader-resource-model.md +14 -17
- package/docs/concepts/writing-an-engine-adapter.md +1 -1
- package/docs/formats/README.md +4 -2
- package/docs/formats/carbon-effect-container.md +127 -26
- package/docs/formats/dxbc/architecture.md +1 -1
- package/docs/formats/dxbc/reference/api.md +28 -0
- package/docs/formats/hlsl/README.md +3 -3
- package/docs/formats/hlsl/architecture.md +8 -9
- package/docs/formats/hlsl/guides/hydrating-json-output.md +3 -5
- package/docs/formats/hlsl/guides/reading-effects.md +5 -1
- package/docs/formats/hlsl/reference/advanced-analysis.md +20 -25
- package/docs/formats/hlsl/reference/api.md +0 -7
- package/docs/formats/hlsl/reference/json-graph.md +1 -4
- package/docs/formats/pickle.md +82 -0
- package/docs/formats/webgl/README.md +71 -13
- package/docs/formats/webgl/architecture.md +16 -17
- package/docs/formats/webgl/carbon-constant-layouts.md +3 -3
- package/docs/formats/webgl/decl-io.md +3 -3
- package/docs/formats/webgl/memory-structured.md +27 -8
- package/docs/formats/webgl/texture-sample.md +1 -1
- package/docs/formats/webgpu/README.md +3 -3
- package/docs/formats/webgpu/architecture.md +5 -6
- package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +10 -11
- package/docs/formats/webgpu/guides/effect-packaging.md +6 -8
- package/docs/formats/webgpu/reference/api.md +11 -12
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +11 -8
- package/docs/formats/wwise.md +63 -2
- package/docs/reference/classes/core.md +10 -0
- package/docs/reference/classes/formats.md +40 -48
- package/docs/reference/classes/resources.md +2 -2
- package/docs/reference/queues.md +88 -4
- package/docs/reference/workers.md +7 -0
- package/package.json +61 -61
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
- package/dist/format/effect/effectReflectionPackage.js +0 -636
- package/dist/format/effect/effectReflectionPackage.js.map +0 -1
- package/dist/formats/hlsl/core/HlslReader.js +0 -16
- package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
- package/dist/formats/hlsl/core/portableReflection.js +0 -848
- package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
- package/dist/formats/hlsl/portable.js +0 -2
- package/dist/formats/hlsl/portable.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
- package/dist/formats/webgl/core/cewg/binary.js +0 -19
- package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
- package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
- package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
- package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
- package/dist/resource/shader/portable.js +0 -33
- package/dist/resource/shader/portable.js.map +0 -1
- package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
- package/docs/formats/webgl/effect-reflection.md +0 -127
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { HlslReader } from '../../HlslReader.js';
|
|
2
1
|
import { asUint8Array } from '@carbonenginejs/runtime-utils/bytes';
|
|
3
2
|
import { HlslEffectStateManager } from '../../HlslEffectStateManager.js';
|
|
4
3
|
import { HlslShader } from '../shader/HlslShader.js';
|
|
4
|
+
import { HlslShaderBytecode } from '../../HlslShaderBytecode.js';
|
|
5
5
|
import { HlslShaderOption } from '../shader/HlslShaderOption.js';
|
|
6
6
|
import { HlslShaderPermutation } from './HlslShaderPermutation.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import { hlslShaderStageName } from '../HlslRenderContextEnum.js';
|
|
8
|
+
import { runtimeDescriptionFromCarbon } from '../../carbonDescriptionToRuntime.js';
|
|
9
|
+
import { CjsCarbonEffectReader } from '../../../../../format/carbonEffect/CjsCarbonEffectReader.js';
|
|
10
|
+
import { CARBON_EFFECT_MIN_DATA_VERSION } from '../../../../../format/carbonEffect/carbonEffectRecords.js';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Carbon/Trinity effect resource reader for compiled shader metadata.
|
|
@@ -19,6 +20,7 @@ class HlslEffectRes {
|
|
|
19
20
|
*/
|
|
20
21
|
constructor() {
|
|
21
22
|
this.m_data = new Uint8Array(0);
|
|
23
|
+
this.m_reader = null;
|
|
22
24
|
this.m_version = 0;
|
|
23
25
|
this.m_stringTable = new Uint8Array(0);
|
|
24
26
|
this.m_stringTableSize = 0;
|
|
@@ -52,70 +54,48 @@ class HlslEffectRes {
|
|
|
52
54
|
// Carbon owns a memcpy of the loaded resource. Keep the JS graph
|
|
53
55
|
// equally isolated from later caller mutation.
|
|
54
56
|
this.m_data = Uint8Array.from(asUint8Array(source));
|
|
55
|
-
|
|
57
|
+
|
|
58
|
+
// One header walk, for every accepted version. This header -
|
|
59
|
+
// version, compiler version and source hash where present, arena,
|
|
60
|
+
// permutation axes, offset table - is the layout
|
|
61
|
+
// `CjsCarbonEffectReader` parses, and two hand-written copies of
|
|
62
|
+
// one layout are two chances to disagree. Reading it there also
|
|
63
|
+
// brings three checks a local walk never had: the offset table
|
|
64
|
+
// must be dense and positionally indexed, and the body region must
|
|
65
|
+
// begin exactly where the header ends. Carbon indexes that table
|
|
66
|
+
// positionally without ever reading the stored index, so a sparse
|
|
67
|
+
// or misordered table does not fail there - it silently returns
|
|
68
|
+
// the wrong shader body, which is the failure class the container
|
|
69
|
+
// port exists to close.
|
|
70
|
+
const reader = new CjsCarbonEffectReader(this.m_data, {
|
|
56
71
|
source: this.sourcePath || "HlslEffectRes"
|
|
57
72
|
});
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// The header slot is four bytes, not a u32:
|
|
64
|
-
// `constexpr uint8_t ShaderCompilerVersion[4]` = {major, minor,
|
|
65
|
-
// patch, tweak} (ShaderCompilerConfig.h.in:5), of which Carbon's
|
|
66
|
-
// rebuild check compares only the first three
|
|
67
|
-
// (ModifiedTime.cpp:77). A shipped v15 header reads `01 02 06 00`
|
|
68
|
-
// — compiler 1.2.6.0, matching the ShaderCompiler project
|
|
69
|
-
// version. As a u32 that is 0x00060201, which means nothing.
|
|
70
|
-
//
|
|
71
|
-
// `m_compilerVersionBytes` is the truthful reading and is what new
|
|
72
|
-
// code should use. `m_compilerVersion` keeps the dword form because
|
|
73
|
-
// it is republished as `source.compilerVersion` in the portable
|
|
74
|
-
// reflection, where it is asserted to be an unsigned integer
|
|
75
|
-
// (portableReflection.js:645) and covered by a package digest —
|
|
76
|
-
// changing its shape changes package bytes, which belongs with the
|
|
77
|
-
// format rewrite rather than here.
|
|
78
|
-
const compilerVersionBytes = stream.readRaw(4);
|
|
79
|
-
this.m_compilerVersionBytes = Array.from(compilerVersionBytes);
|
|
80
|
-
this.m_compilerVersion = new DataView(compilerVersionBytes.buffer, compilerVersionBytes.byteOffset, 4).getUint32(0, true);
|
|
81
|
-
this.m_hash = stream.readRaw(32);
|
|
73
|
+
this.m_reader = reader;
|
|
74
|
+
this.m_version = reader.version;
|
|
75
|
+
if (reader.compilerVersion) {
|
|
76
|
+
this.m_compilerVersionBytes = reader.compilerVersion;
|
|
77
|
+
this.m_compilerVersion = new DataView(Uint8Array.from(reader.compilerVersion).buffer).getUint32(0, true);
|
|
82
78
|
}
|
|
83
|
-
this.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.m_stringTable = this.m_data.subarray(stream.offset, stream.offset + this.m_stringTableSize);
|
|
88
|
-
stream.skip(this.m_stringTableSize);
|
|
89
|
-
stream.setStringTable(this.m_stringTable, this.m_stringTableSize);
|
|
90
|
-
const permutationCount = stream.readUint8();
|
|
91
|
-
for (let index = 0; index < permutationCount; index += 1) {
|
|
79
|
+
this.m_hash = reader.sourceHash ?? new Uint8Array(0);
|
|
80
|
+
this.m_stringTableSize = reader.stringTableSize;
|
|
81
|
+
this.m_stringTable = reader.stringTableBytes;
|
|
82
|
+
for (const axis of reader.permutations) {
|
|
92
83
|
const permutation = new HlslShaderPermutation();
|
|
93
|
-
permutation.name =
|
|
94
|
-
permutation.defaultOption =
|
|
95
|
-
permutation.description =
|
|
96
|
-
permutation.type =
|
|
97
|
-
const
|
|
98
|
-
for (let optionIndex = 0; optionIndex < optionCount; optionIndex += 1) {
|
|
99
|
-
permutation.options.push(stream.readString());
|
|
100
|
-
}
|
|
84
|
+
permutation.name = axis.name.value;
|
|
85
|
+
permutation.defaultOption = axis.defaultOption;
|
|
86
|
+
permutation.description = axis.description.value;
|
|
87
|
+
permutation.type = axis.type;
|
|
88
|
+
for (const option of axis.options) permutation.options.push(option.value);
|
|
101
89
|
this.m_permutations.push(permutation);
|
|
102
90
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
offset: stream.readUint32(),
|
|
112
|
-
size: stream.readUint32()
|
|
113
|
-
};
|
|
114
|
-
record.end = record.offset + record.size;
|
|
115
|
-
if (record.end > this.m_data.length) {
|
|
116
|
-
throw new Error(`Invalid effect body record ${index}`);
|
|
117
|
-
}
|
|
118
|
-
this.m_offsets.push(record);
|
|
91
|
+
this.m_offsetCount = reader.records.length;
|
|
92
|
+
for (const record of reader.records) {
|
|
93
|
+
this.m_offsets.push({
|
|
94
|
+
index: record.index,
|
|
95
|
+
offset: record.offset,
|
|
96
|
+
size: record.size,
|
|
97
|
+
end: record.offset + record.size
|
|
98
|
+
});
|
|
119
99
|
}
|
|
120
100
|
return true;
|
|
121
101
|
} catch (error) {
|
|
@@ -185,20 +165,45 @@ class HlslEffectRes {
|
|
|
185
165
|
return this.m_shaders.get(index);
|
|
186
166
|
}
|
|
187
167
|
const offset = this.m_offsets[index];
|
|
188
|
-
if (!offset) {
|
|
168
|
+
if (!offset || !this.m_reader) {
|
|
189
169
|
return null;
|
|
190
170
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
171
|
+
|
|
172
|
+
// The retained container reader decodes the body's record tree - the
|
|
173
|
+
// single byte-reading implementation - and the corpus-proven adapter
|
|
174
|
+
// maps those records onto the runtime shape. The record tree is a
|
|
175
|
+
// transient internal handoff, never exposed or persisted.
|
|
176
|
+
try {
|
|
177
|
+
const records = this.m_reader.readDescription(index);
|
|
178
|
+
const built = runtimeDescriptionFromCarbon(records, {
|
|
179
|
+
effectName: this.sourcePath,
|
|
180
|
+
version: this.m_version,
|
|
181
|
+
effectStateManager: this.effectStateManager,
|
|
182
|
+
bytecodeFor: (stage, stageType) => new HlslShaderBytecode({
|
|
183
|
+
stageType,
|
|
184
|
+
stageName: hlslShaderStageName(stageType),
|
|
185
|
+
bytes: stage.shaderData.bytes,
|
|
186
|
+
shaderSize: stage.shaderData.size,
|
|
187
|
+
stringTableOffset: stage.shaderData.offset,
|
|
188
|
+
effectName: this.sourcePath
|
|
189
|
+
})
|
|
190
|
+
});
|
|
191
|
+
const shader = new HlslShader();
|
|
192
|
+
const description = shader.GetEffect();
|
|
193
|
+
description.version = this.m_version;
|
|
194
|
+
description.effectName = this.sourcePath;
|
|
195
|
+
description.effectStateManager = built.effectStateManager;
|
|
196
|
+
description.techniques = built.techniques;
|
|
197
|
+
description.annotations = built.annotations;
|
|
198
|
+
shader.ProcessEffect();
|
|
199
|
+
this.m_shaders.set(index, shader);
|
|
200
|
+
return shader;
|
|
201
|
+
} catch {
|
|
202
|
+
// Mirrors the historical reader contract: an undecodable body is
|
|
203
|
+
// reported as absent rather than thrown, and is not cached so a
|
|
204
|
+
// later caller sees the same result.
|
|
197
205
|
return null;
|
|
198
206
|
}
|
|
199
|
-
shader.ProcessEffect();
|
|
200
|
-
this.m_shaders.set(index, shader);
|
|
201
|
-
return shader;
|
|
202
207
|
}
|
|
203
208
|
|
|
204
209
|
/**
|
|
@@ -207,7 +212,7 @@ class HlslEffectRes {
|
|
|
207
212
|
* @returns {boolean} True when this resource has usable effect data.
|
|
208
213
|
*/
|
|
209
214
|
IsGood() {
|
|
210
|
-
return !this.loadError && this.m_data.length > 0 && this.m_version >=
|
|
215
|
+
return !this.loadError && this.m_data.length > 0 && this.m_version >= CARBON_EFFECT_MIN_DATA_VERSION;
|
|
211
216
|
}
|
|
212
217
|
|
|
213
218
|
/**
|
|
@@ -275,6 +280,7 @@ class HlslEffectRes {
|
|
|
275
280
|
*/
|
|
276
281
|
_reset() {
|
|
277
282
|
this.m_data = new Uint8Array(0);
|
|
283
|
+
this.m_reader = null;
|
|
278
284
|
this.m_version = 0;
|
|
279
285
|
this.m_stringTable = new Uint8Array(0);
|
|
280
286
|
this.m_stringTableSize = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HlslEffectRes.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/resources/HlslEffectRes.js"],"sourcesContent":["import { HlslReader } from \"../../HlslReader.js\";\nimport { asUint8Array } from \"@carbonenginejs/runtime-utils/bytes\";\nimport { HlslEffectStateManager } from \"../../HlslEffectStateManager.js\";\nimport { HlslShader } from \"../shader/HlslShader.js\";\nimport { HlslShaderOption } from \"../shader/HlslShaderOption.js\";\nimport { HlslShaderPermutation } from \"./HlslShaderPermutation.js\";\n\nconst MIN_SUPPORTED_EFFECT_VERSION = 8;\nconst MAX_SUPPORTED_EFFECT_VERSION = 15;\n\n/**\n * Carbon/Trinity effect resource reader for compiled shader metadata.\n */\nexport class HlslEffectRes\n{\n static globalEffectOptions = [];\n\n /**\n * Creates an empty effect resource ready to load a compiled `.sm_*` payload.\n */\n constructor()\n {\n this.m_data = new Uint8Array(0);\n this.m_version = 0;\n this.m_stringTable = new Uint8Array(0);\n this.m_stringTableSize = 0;\n this.m_offsets = [];\n this.m_offsetCount = 0;\n this.m_permutations = [];\n this.m_shaders = new Map();\n this.m_compilerVersion = null;\n this.m_compilerVersionBytes = null;\n this.m_hash = new Uint8Array(0);\n this.sourcePath = \"\";\n this.loadError = null;\n this.effectStateManager = new HlslEffectStateManager();\n }\n\n /**\n * Reads the effect header, string table, permutation axes, and body offsets.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} source Compiled effect bytes.\n * @param {object} [options] Load metadata and dependency overrides.\n * @param {string} [options.sourcePath] Source path used in reports.\n * @param {string} [options.source] Alternate source label.\n * @param {HlslEffectStateManager} [options.effectStateManager] Registry to receive decoded state.\n * @returns {boolean} True when the header was decoded successfully.\n */\n DoLoad(source, options = {})\n {\n this._reset();\n this.sourcePath = options.sourcePath || options.source || \"\";\n this.effectStateManager = options.effectStateManager || new HlslEffectStateManager();\n\n try\n {\n // Carbon owns a memcpy of the loaded resource. Keep the JS graph\n // equally isolated from later caller mutation.\n this.m_data = Uint8Array.from(asUint8Array(source));\n const stream = new HlslReader(this.m_data, { source: this.sourcePath || \"HlslEffectRes\" });\n this.m_version = stream.readUint32();\n\n if (this.m_version < MIN_SUPPORTED_EFFECT_VERSION || this.m_version > MAX_SUPPORTED_EFFECT_VERSION)\n {\n throw new Error(`Unsupported HlslEffectRes version ${this.m_version}; expected ${MIN_SUPPORTED_EFFECT_VERSION}..${MAX_SUPPORTED_EFFECT_VERSION}`);\n }\n\n if (this.m_version >= 15)\n {\n // The header slot is four bytes, not a u32:\n // `constexpr uint8_t ShaderCompilerVersion[4]` = {major, minor,\n // patch, tweak} (ShaderCompilerConfig.h.in:5), of which Carbon's\n // rebuild check compares only the first three\n // (ModifiedTime.cpp:77). A shipped v15 header reads `01 02 06 00`\n // — compiler 1.2.6.0, matching the ShaderCompiler project\n // version. As a u32 that is 0x00060201, which means nothing.\n //\n // `m_compilerVersionBytes` is the truthful reading and is what new\n // code should use. `m_compilerVersion` keeps the dword form because\n // it is republished as `source.compilerVersion` in the portable\n // reflection, where it is asserted to be an unsigned integer\n // (portableReflection.js:645) and covered by a package digest —\n // changing its shape changes package bytes, which belongs with the\n // format rewrite rather than here.\n const compilerVersionBytes = stream.readRaw(4);\n this.m_compilerVersionBytes = Array.from(compilerVersionBytes);\n this.m_compilerVersion = new DataView(\n compilerVersionBytes.buffer,\n compilerVersionBytes.byteOffset,\n 4\n ).getUint32(0, true);\n this.m_hash = stream.readRaw(32);\n }\n\n this.m_stringTableSize = stream.readUint32();\n if (this.m_stringTableSize > this.m_data.length || stream.offset + this.m_stringTableSize > this.m_data.length)\n {\n throw new Error(\"Invalid effect string table size\");\n }\n this.m_stringTable = this.m_data.subarray(stream.offset, stream.offset + this.m_stringTableSize);\n stream.skip(this.m_stringTableSize);\n stream.setStringTable(this.m_stringTable, this.m_stringTableSize);\n\n const permutationCount = stream.readUint8();\n for (let index = 0; index < permutationCount; index += 1)\n {\n const permutation = new HlslShaderPermutation();\n permutation.name = stream.readString();\n permutation.defaultOption = stream.readUint8();\n permutation.description = stream.readString();\n permutation.type = this.m_version > 5 ? stream.readUint8() : 0;\n\n const optionCount = stream.readUint8();\n for (let optionIndex = 0; optionIndex < optionCount; optionIndex += 1)\n {\n permutation.options.push(stream.readString());\n }\n this.m_permutations.push(permutation);\n }\n\n const headerSize = stream.readUint32();\n if (headerSize === 0)\n {\n throw new Error(\"Effect contains no compiled shader bodies\");\n }\n\n this.m_offsetCount = headerSize;\n for (let index = 0; index < headerSize; index += 1)\n {\n const record = {\n index: stream.readUint32(),\n offset: stream.readUint32(),\n size: stream.readUint32()\n };\n record.end = record.offset + record.size;\n if (record.end > this.m_data.length)\n {\n throw new Error(`Invalid effect body record ${index}`);\n }\n this.m_offsets.push(record);\n }\n\n return true;\n }\n catch (error)\n {\n this.loadError = error;\n this.m_shaders.clear();\n return false;\n }\n }\n\n /**\n * Mirrors Carbon's prepare hook by clearing cached shader bodies.\n *\n * @returns {boolean} True when preparation completed.\n */\n DoPrepare()\n {\n this.m_shaders.clear();\n return true;\n }\n\n /**\n * Resolves a permutation option set to a decoded `HlslShader`.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} [options] Local option choices.\n * @param {number|null} [count] Number of local option entries to consider.\n * @returns {HlslShader|null} Decoded shader or null when no matching body exists.\n */\n GetShader(options = [], count = null)\n {\n if (!this.IsGood())\n {\n return null;\n }\n\n const normalizedOptions = normalizeShaderOptions(options);\n const optionCount = Number.isInteger(count) ? Math.min(count, normalizedOptions.length) : normalizedOptions.length;\n let multiplier = 1;\n let index = 0;\n\n for (const permutation of this.m_permutations)\n {\n let value = permutation.defaultOption;\n const globalOption = HlslEffectRes.globalEffectOptions.find((entry) => entry.name === permutation.name);\n const localOption = normalizedOptions.slice(0, optionCount).find((entry) => entry.name === permutation.name);\n const selected = globalOption || localOption;\n\n if (selected)\n {\n const selectedIndex = permutation.options.findIndex((option) => option === selected.value);\n if (selectedIndex >= 0)\n {\n value = selectedIndex;\n }\n }\n\n index += value * multiplier;\n multiplier *= permutation.options.length || 1;\n }\n\n return this.GetShaderByIndex(index);\n }\n\n /**\n * Decodes the body at an exact permutation-table index without applying\n * global or local option overrides.\n *\n * @param {number} index Exact zero-based permutation-table index.\n * @returns {HlslShader|null} Decoded shader or null when the index/body is unavailable.\n */\n GetShaderByIndex(index)\n {\n if (!Number.isSafeInteger(index) || index < 0)\n {\n throw new TypeError(\"HlslEffectRes body index must be a non-negative safe integer\");\n }\n if (!this.IsGood())\n {\n return null;\n }\n if (this.m_shaders.has(index))\n {\n return this.m_shaders.get(index);\n }\n\n const offset = this.m_offsets[index];\n if (!offset)\n {\n return null;\n }\n\n const shader = new HlslShader();\n const buffer = this.m_data.subarray(offset.offset, offset.end);\n const ok = shader.GetEffect().Read(\n buffer,\n offset.size,\n this.m_version,\n this.m_stringTable,\n this.m_stringTableSize,\n this.sourcePath,\n { effectStateManager: this.effectStateManager }\n );\n if (!ok)\n {\n return null;\n }\n\n shader.ProcessEffect();\n this.m_shaders.set(index, shader);\n return shader;\n }\n\n /**\n * Reports whether the effect header has been loaded without error.\n *\n * @returns {boolean} True when this resource has usable effect data.\n */\n IsGood()\n {\n return !this.loadError && this.m_data.length > 0 && this.m_version >= MIN_SUPPORTED_EFFECT_VERSION;\n }\n\n /**\n * Reports whether byte memory usage is known for this resource.\n *\n * @returns {boolean} Always true for byte-backed JavaScript resources.\n */\n IsMemoryUsageKnown()\n {\n return true;\n }\n\n /**\n * Returns the byte size of the loaded effect payload.\n *\n * @returns {number} Loaded byte count.\n */\n GetMemoryUsage()\n {\n return this.m_data.length;\n }\n\n /**\n * Clears decoded shader body caches while keeping the loaded header data.\n */\n ReleaseResources()\n {\n this.m_shaders.clear();\n }\n\n /**\n * Returns JSON-safe permutation metadata for tooling and reports.\n *\n * @returns {object[]} Permutation descriptions.\n */\n GetPermutationDescription()\n {\n return this.m_permutations.map((permutation) => permutation.toJSON());\n }\n\n /**\n * Returns a JSON-safe summary of the loaded effect resource.\n *\n * @returns {object} Serializable effect resource summary.\n */\n toJSON()\n {\n return {\n version: this.m_version,\n compilerVersion: this.m_compilerVersion,\n compilerVersionBytes: this.m_compilerVersionBytes,\n sourcePath: this.sourcePath,\n stringTableSize: this.m_stringTableSize,\n offsetCount: this.m_offsetCount,\n permutations: this.m_permutations.map((entry) => entry.toJSON()),\n offsets: this.m_offsets.map((entry) => ({ ...entry })),\n loadError: this.loadError ? {\n name: this.loadError.name,\n message: this.loadError.message\n } : null\n };\n }\n\n /**\n * Resets loaded state before a new `DoLoad` attempt.\n *\n * @private\n */\n _reset()\n {\n this.m_data = new Uint8Array(0);\n this.m_version = 0;\n this.m_stringTable = new Uint8Array(0);\n this.m_stringTableSize = 0;\n this.m_offsets = [];\n this.m_offsetCount = 0;\n this.m_permutations = [];\n this.m_shaders = new Map();\n this.m_compilerVersion = null;\n this.m_compilerVersionBytes = null;\n this.m_hash = new Uint8Array(0);\n this.loadError = null;\n }\n}\n\n/**\n * Applies global shader option overrides used during permutation lookup.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} [changes] Option changes to merge.\n */\nexport function ModifyGlobalEffectOptions(changes = [])\n{\n for (const change of normalizeShaderOptions(changes))\n {\n const index = HlslEffectRes.globalEffectOptions.findIndex((entry) => entry.name === change.name);\n if (!change.value)\n {\n if (index >= 0) HlslEffectRes.globalEffectOptions.splice(index, 1);\n }\n else if (index >= 0)\n {\n HlslEffectRes.globalEffectOptions[index] = change;\n }\n else\n {\n HlslEffectRes.globalEffectOptions.push(change);\n }\n }\n}\n\n/**\n * Returns the current global shader option overrides.\n *\n * @returns {HlslShaderOption[]} Copy of global shader option overrides.\n */\nexport function GetGlobalEffectOptions()\n{\n return HlslEffectRes.globalEffectOptions.slice();\n}\n\n/**\n * Converts supported option input shapes to `HlslShaderOption` instances.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} options Option input.\n * @returns {HlslShaderOption[]} Normalized option list.\n */\nfunction normalizeShaderOptions(options)\n{\n if (options instanceof Map)\n {\n return Array.from(options.entries()).map(([ name, value ]) => new HlslShaderOption(name, value));\n }\n if (!Array.isArray(options))\n {\n return [];\n }\n return options.map((entry) =>\n {\n if (entry instanceof HlslShaderOption)\n {\n return entry;\n }\n return new HlslShaderOption(entry?.name || \"\", entry?.value || \"\");\n });\n}\n"],"names":["MIN_SUPPORTED_EFFECT_VERSION","MAX_SUPPORTED_EFFECT_VERSION","HlslEffectRes","globalEffectOptions","constructor","m_data","Uint8Array","m_version","m_stringTable","m_stringTableSize","m_offsets","m_offsetCount","m_permutations","m_shaders","Map","m_compilerVersion","m_compilerVersionBytes","m_hash","sourcePath","loadError","effectStateManager","HlslEffectStateManager","DoLoad","source","options","_reset","from","asUint8Array","stream","HlslReader","readUint32","Error","compilerVersionBytes","readRaw","Array","DataView","buffer","byteOffset","getUint32","length","offset","subarray","skip","setStringTable","permutationCount","readUint8","index","permutation","HlslShaderPermutation","name","readString","defaultOption","description","type","optionCount","optionIndex","push","headerSize","record","size","end","error","clear","DoPrepare","GetShader","count","IsGood","normalizedOptions","normalizeShaderOptions","Number","isInteger","Math","min","multiplier","value","globalOption","find","entry","localOption","slice","selected","selectedIndex","findIndex","option","GetShaderByIndex","isSafeInteger","TypeError","has","get","shader","HlslShader","ok","GetEffect","Read","ProcessEffect","set","IsMemoryUsageKnown","GetMemoryUsage","ReleaseResources","GetPermutationDescription","map","toJSON","version","compilerVersion","stringTableSize","offsetCount","permutations","offsets","message","entries","HlslShaderOption","isArray"],"mappings":";;;;;;;AAOA,MAAMA,4BAA4B,GAAG,CAAC;AACtC,MAAMC,4BAA4B,GAAG,EAAE;;AAEvC;AACA;AACA;AACO,MAAMC,aAAa,CAC1B;EACI,OAAOC,mBAAmB,GAAG,EAAE;;AAE/B;AACJ;AACA;AACIC,EAAAA,WAAWA,GACX;AACI,IAAA,IAAI,CAACC,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC,CAAC;IAC/B,IAAI,CAACC,SAAS,GAAG,CAAC;AAClB,IAAA,IAAI,CAACC,aAAa,GAAG,IAAIF,UAAU,CAAC,CAAC,CAAC;IACtC,IAAI,CAACG,iBAAiB,GAAG,CAAC;IAC1B,IAAI,CAACC,SAAS,GAAG,EAAE;IACnB,IAAI,CAACC,aAAa,GAAG,CAAC;IACtB,IAAI,CAACC,cAAc,GAAG,EAAE;AACxB,IAAA,IAAI,CAACC,SAAS,GAAG,IAAIC,GAAG,EAAE;IAC1B,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC7B,IAAI,CAACC,sBAAsB,GAAG,IAAI;AAClC,IAAA,IAAI,CAACC,MAAM,GAAG,IAAIX,UAAU,CAAC,CAAC,CAAC;IAC/B,IAAI,CAACY,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,SAAS,GAAG,IAAI;AACrB,IAAA,IAAI,CAACC,kBAAkB,GAAG,IAAIC,sBAAsB,EAAE;AAC1D,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIC,EAAAA,MAAMA,CAACC,MAAM,EAAEC,OAAO,GAAG,EAAE,EAC3B;IACI,IAAI,CAACC,MAAM,EAAE;IACb,IAAI,CAACP,UAAU,GAAGM,OAAO,CAACN,UAAU,IAAIM,OAAO,CAACD,MAAM,IAAI,EAAE;IAC5D,IAAI,CAACH,kBAAkB,GAAGI,OAAO,CAACJ,kBAAkB,IAAI,IAAIC,sBAAsB,EAAE;IAEpF,IACA;AACI;AACA;MACA,IAAI,CAAChB,MAAM,GAAGC,UAAU,CAACoB,IAAI,CAACC,YAAY,CAACJ,MAAM,CAAC,CAAC;MACnD,MAAMK,MAAM,GAAG,IAAIC,UAAU,CAAC,IAAI,CAACxB,MAAM,EAAE;AAAEkB,QAAAA,MAAM,EAAE,IAAI,CAACL,UAAU,IAAI;AAAgB,OAAC,CAAC;AAC1F,MAAA,IAAI,CAACX,SAAS,GAAGqB,MAAM,CAACE,UAAU,EAAE;MAEpC,IAAI,IAAI,CAACvB,SAAS,GAAGP,4BAA4B,IAAI,IAAI,CAACO,SAAS,GAAGN,4BAA4B,EAClG;AACI,QAAA,MAAM,IAAI8B,KAAK,CAAC,CAAA,kCAAA,EAAqC,IAAI,CAACxB,SAAS,CAAA,WAAA,EAAcP,4BAA4B,CAAA,EAAA,EAAKC,4BAA4B,CAAA,CAAE,CAAC;AACrJ,MAAA;AAEA,MAAA,IAAI,IAAI,CAACM,SAAS,IAAI,EAAE,EACxB;AACI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAA,MAAMyB,oBAAoB,GAAGJ,MAAM,CAACK,OAAO,CAAC,CAAC,CAAC;QAC9C,IAAI,CAACjB,sBAAsB,GAAGkB,KAAK,CAACR,IAAI,CAACM,oBAAoB,CAAC;QAC9D,IAAI,CAACjB,iBAAiB,GAAG,IAAIoB,QAAQ,CACjCH,oBAAoB,CAACI,MAAM,EAC3BJ,oBAAoB,CAACK,UAAU,EAC/B,CACJ,CAAC,CAACC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC;QACpB,IAAI,CAACrB,MAAM,GAAGW,MAAM,CAACK,OAAO,CAAC,EAAE,CAAC;AACpC,MAAA;AAEA,MAAA,IAAI,CAACxB,iBAAiB,GAAGmB,MAAM,CAACE,UAAU,EAAE;MAC5C,IAAI,IAAI,CAACrB,iBAAiB,GAAG,IAAI,CAACJ,MAAM,CAACkC,MAAM,IAAIX,MAAM,CAACY,MAAM,GAAG,IAAI,CAAC/B,iBAAiB,GAAG,IAAI,CAACJ,MAAM,CAACkC,MAAM,EAC9G;AACI,QAAA,MAAM,IAAIR,KAAK,CAAC,kCAAkC,CAAC;AACvD,MAAA;MACA,IAAI,CAACvB,aAAa,GAAG,IAAI,CAACH,MAAM,CAACoC,QAAQ,CAACb,MAAM,CAACY,MAAM,EAAEZ,MAAM,CAACY,MAAM,GAAG,IAAI,CAAC/B,iBAAiB,CAAC;AAChGmB,MAAAA,MAAM,CAACc,IAAI,CAAC,IAAI,CAACjC,iBAAiB,CAAC;MACnCmB,MAAM,CAACe,cAAc,CAAC,IAAI,CAACnC,aAAa,EAAE,IAAI,CAACC,iBAAiB,CAAC;AAEjE,MAAA,MAAMmC,gBAAgB,GAAGhB,MAAM,CAACiB,SAAS,EAAE;AAC3C,MAAA,KAAK,IAAIC,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGF,gBAAgB,EAAEE,KAAK,IAAI,CAAC,EACxD;AACI,QAAA,MAAMC,WAAW,GAAG,IAAIC,qBAAqB,EAAE;AAC/CD,QAAAA,WAAW,CAACE,IAAI,GAAGrB,MAAM,CAACsB,UAAU,EAAE;AACtCH,QAAAA,WAAW,CAACI,aAAa,GAAGvB,MAAM,CAACiB,SAAS,EAAE;AAC9CE,QAAAA,WAAW,CAACK,WAAW,GAAGxB,MAAM,CAACsB,UAAU,EAAE;AAC7CH,QAAAA,WAAW,CAACM,IAAI,GAAG,IAAI,CAAC9C,SAAS,GAAG,CAAC,GAAGqB,MAAM,CAACiB,SAAS,EAAE,GAAG,CAAC;AAE9D,QAAA,MAAMS,WAAW,GAAG1B,MAAM,CAACiB,SAAS,EAAE;AACtC,QAAA,KAAK,IAAIU,WAAW,GAAG,CAAC,EAAEA,WAAW,GAAGD,WAAW,EAAEC,WAAW,IAAI,CAAC,EACrE;UACIR,WAAW,CAACvB,OAAO,CAACgC,IAAI,CAAC5B,MAAM,CAACsB,UAAU,EAAE,CAAC;AACjD,QAAA;AACA,QAAA,IAAI,CAACtC,cAAc,CAAC4C,IAAI,CAACT,WAAW,CAAC;AACzC,MAAA;AAEA,MAAA,MAAMU,UAAU,GAAG7B,MAAM,CAACE,UAAU,EAAE;MACtC,IAAI2B,UAAU,KAAK,CAAC,EACpB;AACI,QAAA,MAAM,IAAI1B,KAAK,CAAC,2CAA2C,CAAC;AAChE,MAAA;MAEA,IAAI,CAACpB,aAAa,GAAG8C,UAAU;AAC/B,MAAA,KAAK,IAAIX,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGW,UAAU,EAAEX,KAAK,IAAI,CAAC,EAClD;AACI,QAAA,MAAMY,MAAM,GAAG;AACXZ,UAAAA,KAAK,EAAElB,MAAM,CAACE,UAAU,EAAE;AAC1BU,UAAAA,MAAM,EAAEZ,MAAM,CAACE,UAAU,EAAE;AAC3B6B,UAAAA,IAAI,EAAE/B,MAAM,CAACE,UAAU;SAC1B;QACD4B,MAAM,CAACE,GAAG,GAAGF,MAAM,CAAClB,MAAM,GAAGkB,MAAM,CAACC,IAAI;QACxC,IAAID,MAAM,CAACE,GAAG,GAAG,IAAI,CAACvD,MAAM,CAACkC,MAAM,EACnC;AACI,UAAA,MAAM,IAAIR,KAAK,CAAC,CAAA,2BAAA,EAA8Be,KAAK,EAAE,CAAC;AAC1D,QAAA;AACA,QAAA,IAAI,CAACpC,SAAS,CAAC8C,IAAI,CAACE,MAAM,CAAC;AAC/B,MAAA;AAEA,MAAA,OAAO,IAAI;IACf,CAAC,CACD,OAAOG,KAAK,EACZ;MACI,IAAI,CAAC1C,SAAS,GAAG0C,KAAK;AACtB,MAAA,IAAI,CAAChD,SAAS,CAACiD,KAAK,EAAE;AACtB,MAAA,OAAO,KAAK;AAChB,IAAA;AACJ,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIC,EAAAA,SAASA,GACT;AACI,IAAA,IAAI,CAAClD,SAAS,CAACiD,KAAK,EAAE;AACtB,IAAA,OAAO,IAAI;AACf,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIE,SAASA,CAACxC,OAAO,GAAG,EAAE,EAAEyC,KAAK,GAAG,IAAI,EACpC;AACI,IAAA,IAAI,CAAC,IAAI,CAACC,MAAM,EAAE,EAClB;AACI,MAAA,OAAO,IAAI;AACf,IAAA;AAEA,IAAA,MAAMC,iBAAiB,GAAGC,sBAAsB,CAAC5C,OAAO,CAAC;IACzD,MAAM8B,WAAW,GAAGe,MAAM,CAACC,SAAS,CAACL,KAAK,CAAC,GAAGM,IAAI,CAACC,GAAG,CAACP,KAAK,EAAEE,iBAAiB,CAAC5B,MAAM,CAAC,GAAG4B,iBAAiB,CAAC5B,MAAM;IAClH,IAAIkC,UAAU,GAAG,CAAC;IAClB,IAAI3B,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,MAAMC,WAAW,IAAI,IAAI,CAACnC,cAAc,EAC7C;AACI,MAAA,IAAI8D,KAAK,GAAG3B,WAAW,CAACI,aAAa;AACrC,MAAA,MAAMwB,YAAY,GAAGzE,aAAa,CAACC,mBAAmB,CAACyE,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC5B,IAAI,KAAKF,WAAW,CAACE,IAAI,CAAC;MACvG,MAAM6B,WAAW,GAAGX,iBAAiB,CAACY,KAAK,CAAC,CAAC,EAAEzB,WAAW,CAAC,CAACsB,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC5B,IAAI,KAAKF,WAAW,CAACE,IAAI,CAAC;AAC5G,MAAA,MAAM+B,QAAQ,GAAGL,YAAY,IAAIG,WAAW;AAE5C,MAAA,IAAIE,QAAQ,EACZ;AACI,QAAA,MAAMC,aAAa,GAAGlC,WAAW,CAACvB,OAAO,CAAC0D,SAAS,CAAEC,MAAM,IAAKA,MAAM,KAAKH,QAAQ,CAACN,KAAK,CAAC;QAC1F,IAAIO,aAAa,IAAI,CAAC,EACtB;AACIP,UAAAA,KAAK,GAAGO,aAAa;AACzB,QAAA;AACJ,MAAA;MAEAnC,KAAK,IAAI4B,KAAK,GAAGD,UAAU;AAC3BA,MAAAA,UAAU,IAAI1B,WAAW,CAACvB,OAAO,CAACe,MAAM,IAAI,CAAC;AACjD,IAAA;AAEA,IAAA,OAAO,IAAI,CAAC6C,gBAAgB,CAACtC,KAAK,CAAC;AACvC,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACIsC,gBAAgBA,CAACtC,KAAK,EACtB;IACI,IAAI,CAACuB,MAAM,CAACgB,aAAa,CAACvC,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EAC7C;AACI,MAAA,MAAM,IAAIwC,SAAS,CAAC,8DAA8D,CAAC;AACvF,IAAA;AACA,IAAA,IAAI,CAAC,IAAI,CAACpB,MAAM,EAAE,EAClB;AACI,MAAA,OAAO,IAAI;AACf,IAAA;IACA,IAAI,IAAI,CAACrD,SAAS,CAAC0E,GAAG,CAACzC,KAAK,CAAC,EAC7B;AACI,MAAA,OAAO,IAAI,CAACjC,SAAS,CAAC2E,GAAG,CAAC1C,KAAK,CAAC;AACpC,IAAA;AAEA,IAAA,MAAMN,MAAM,GAAG,IAAI,CAAC9B,SAAS,CAACoC,KAAK,CAAC;IACpC,IAAI,CAACN,MAAM,EACX;AACI,MAAA,OAAO,IAAI;AACf,IAAA;AAEA,IAAA,MAAMiD,MAAM,GAAG,IAAIC,UAAU,EAAE;AAC/B,IAAA,MAAMtD,MAAM,GAAG,IAAI,CAAC/B,MAAM,CAACoC,QAAQ,CAACD,MAAM,CAACA,MAAM,EAAEA,MAAM,CAACoB,GAAG,CAAC;AAC9D,IAAA,MAAM+B,EAAE,GAAGF,MAAM,CAACG,SAAS,EAAE,CAACC,IAAI,CAC9BzD,MAAM,EACNI,MAAM,CAACmB,IAAI,EACX,IAAI,CAACpD,SAAS,EACd,IAAI,CAACC,aAAa,EAClB,IAAI,CAACC,iBAAiB,EACtB,IAAI,CAACS,UAAU,EACf;MAAEE,kBAAkB,EAAE,IAAI,CAACA;AAAmB,KAClD,CAAC;IACD,IAAI,CAACuE,EAAE,EACP;AACI,MAAA,OAAO,IAAI;AACf,IAAA;IAEAF,MAAM,CAACK,aAAa,EAAE;IACtB,IAAI,CAACjF,SAAS,CAACkF,GAAG,CAACjD,KAAK,EAAE2C,MAAM,CAAC;AACjC,IAAA,OAAOA,MAAM;AACjB,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIvB,EAAAA,MAAMA,GACN;AACI,IAAA,OAAO,CAAC,IAAI,CAAC/C,SAAS,IAAI,IAAI,CAACd,MAAM,CAACkC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAChC,SAAS,IAAIP,4BAA4B;AACtG,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIgG,EAAAA,kBAAkBA,GAClB;AACI,IAAA,OAAO,IAAI;AACf,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIC,EAAAA,cAAcA,GACd;AACI,IAAA,OAAO,IAAI,CAAC5F,MAAM,CAACkC,MAAM;AAC7B,EAAA;;AAEA;AACJ;AACA;AACI2D,EAAAA,gBAAgBA,GAChB;AACI,IAAA,IAAI,CAACrF,SAAS,CAACiD,KAAK,EAAE;AAC1B,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIqC,EAAAA,yBAAyBA,GACzB;AACI,IAAA,OAAO,IAAI,CAACvF,cAAc,CAACwF,GAAG,CAAErD,WAAW,IAAKA,WAAW,CAACsD,MAAM,EAAE,CAAC;AACzE,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIA,EAAAA,MAAMA,GACN;IACI,OAAO;MACHC,OAAO,EAAE,IAAI,CAAC/F,SAAS;MACvBgG,eAAe,EAAE,IAAI,CAACxF,iBAAiB;MACvCiB,oBAAoB,EAAE,IAAI,CAAChB,sBAAsB;MACjDE,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BsF,eAAe,EAAE,IAAI,CAAC/F,iBAAiB;MACvCgG,WAAW,EAAE,IAAI,CAAC9F,aAAa;AAC/B+F,MAAAA,YAAY,EAAE,IAAI,CAAC9F,cAAc,CAACwF,GAAG,CAAEvB,KAAK,IAAKA,KAAK,CAACwB,MAAM,EAAE,CAAC;MAChEM,OAAO,EAAE,IAAI,CAACjG,SAAS,CAAC0F,GAAG,CAAEvB,KAAK,KAAM;QAAE,GAAGA;AAAM,OAAC,CAAC,CAAC;AACtD1D,MAAAA,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG;AACxB8B,QAAAA,IAAI,EAAE,IAAI,CAAC9B,SAAS,CAAC8B,IAAI;AACzB2D,QAAAA,OAAO,EAAE,IAAI,CAACzF,SAAS,CAACyF;AAC5B,OAAC,GAAG;KACP;AACL,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACInF,EAAAA,MAAMA,GACN;AACI,IAAA,IAAI,CAACpB,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC,CAAC;IAC/B,IAAI,CAACC,SAAS,GAAG,CAAC;AAClB,IAAA,IAAI,CAACC,aAAa,GAAG,IAAIF,UAAU,CAAC,CAAC,CAAC;IACtC,IAAI,CAACG,iBAAiB,GAAG,CAAC;IAC1B,IAAI,CAACC,SAAS,GAAG,EAAE;IACnB,IAAI,CAACC,aAAa,GAAG,CAAC;IACtB,IAAI,CAACC,cAAc,GAAG,EAAE;AACxB,IAAA,IAAI,CAACC,SAAS,GAAG,IAAIC,GAAG,EAAE;IAC1B,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC7B,IAAI,CAACC,sBAAsB,GAAG,IAAI;AAClC,IAAA,IAAI,CAACC,MAAM,GAAG,IAAIX,UAAU,CAAC,CAAC,CAAC;IAC/B,IAAI,CAACa,SAAS,GAAG,IAAI;AACzB,EAAA;AACJ;;AAqCA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiD,sBAAsBA,CAAC5C,OAAO,EACvC;EACI,IAAIA,OAAO,YAAYV,GAAG,EAC1B;IACI,OAAOoB,KAAK,CAACR,IAAI,CAACF,OAAO,CAACqF,OAAO,EAAE,CAAC,CAACT,GAAG,CAAC,CAAC,CAAEnD,IAAI,EAAEyB,KAAK,CAAE,KAAK,IAAIoC,gBAAgB,CAAC7D,IAAI,EAAEyB,KAAK,CAAC,CAAC;AACpG,EAAA;AACA,EAAA,IAAI,CAACxC,KAAK,CAAC6E,OAAO,CAACvF,OAAO,CAAC,EAC3B;AACI,IAAA,OAAO,EAAE;AACb,EAAA;AACA,EAAA,OAAOA,OAAO,CAAC4E,GAAG,CAAEvB,KAAK,IACzB;IACI,IAAIA,KAAK,YAAYiC,gBAAgB,EACrC;AACI,MAAA,OAAOjC,KAAK;AAChB,IAAA;AACA,IAAA,OAAO,IAAIiC,gBAAgB,CAACjC,KAAK,EAAE5B,IAAI,IAAI,EAAE,EAAE4B,KAAK,EAAEH,KAAK,IAAI,EAAE,CAAC;AACtE,EAAA,CAAC,CAAC;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"HlslEffectRes.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/resources/HlslEffectRes.js"],"sourcesContent":["import { asUint8Array } from \"@carbonenginejs/runtime-utils/bytes\";\nimport { HlslEffectStateManager } from \"../../HlslEffectStateManager.js\";\nimport { HlslShader } from \"../shader/HlslShader.js\";\nimport { HlslShaderBytecode } from \"../../HlslShaderBytecode.js\";\nimport { HlslShaderOption } from \"../shader/HlslShaderOption.js\";\nimport { HlslShaderPermutation } from \"./HlslShaderPermutation.js\";\nimport { hlslShaderStageName } from \"../HlslRenderContextEnum.js\";\nimport { runtimeDescriptionFromCarbon } from \"../../carbonDescriptionToRuntime.js\";\nimport { CjsCarbonEffectReader } from \"../../../../../format/carbonEffect/CjsCarbonEffectReader.js\";\nimport { CARBON_EFFECT_MIN_DATA_VERSION } from \"../../../../../format/carbonEffect/carbonEffectRecords.js\";\n\n/**\n * Carbon/Trinity effect resource reader for compiled shader metadata.\n */\nexport class HlslEffectRes\n{\n static globalEffectOptions = [];\n\n /**\n * Creates an empty effect resource ready to load a compiled `.sm_*` payload.\n */\n constructor()\n {\n this.m_data = new Uint8Array(0);\n this.m_reader = null;\n this.m_version = 0;\n this.m_stringTable = new Uint8Array(0);\n this.m_stringTableSize = 0;\n this.m_offsets = [];\n this.m_offsetCount = 0;\n this.m_permutations = [];\n this.m_shaders = new Map();\n this.m_compilerVersion = null;\n this.m_compilerVersionBytes = null;\n this.m_hash = new Uint8Array(0);\n this.sourcePath = \"\";\n this.loadError = null;\n this.effectStateManager = new HlslEffectStateManager();\n }\n\n /**\n * Reads the effect header, string table, permutation axes, and body offsets.\n *\n * @param {ArrayBuffer|ArrayBufferView|Uint8Array} source Compiled effect bytes.\n * @param {object} [options] Load metadata and dependency overrides.\n * @param {string} [options.sourcePath] Source path used in reports.\n * @param {string} [options.source] Alternate source label.\n * @param {HlslEffectStateManager} [options.effectStateManager] Registry to receive decoded state.\n * @returns {boolean} True when the header was decoded successfully.\n */\n DoLoad(source, options = {})\n {\n this._reset();\n this.sourcePath = options.sourcePath || options.source || \"\";\n this.effectStateManager = options.effectStateManager || new HlslEffectStateManager();\n\n try\n {\n // Carbon owns a memcpy of the loaded resource. Keep the JS graph\n // equally isolated from later caller mutation.\n this.m_data = Uint8Array.from(asUint8Array(source));\n\n // One header walk, for every accepted version. This header -\n // version, compiler version and source hash where present, arena,\n // permutation axes, offset table - is the layout\n // `CjsCarbonEffectReader` parses, and two hand-written copies of\n // one layout are two chances to disagree. Reading it there also\n // brings three checks a local walk never had: the offset table\n // must be dense and positionally indexed, and the body region must\n // begin exactly where the header ends. Carbon indexes that table\n // positionally without ever reading the stored index, so a sparse\n // or misordered table does not fail there - it silently returns\n // the wrong shader body, which is the failure class the container\n // port exists to close.\n const reader = new CjsCarbonEffectReader(this.m_data, {\n source: this.sourcePath || \"HlslEffectRes\"\n });\n this.m_reader = reader;\n this.m_version = reader.version;\n\n if (reader.compilerVersion)\n {\n this.m_compilerVersionBytes = reader.compilerVersion;\n this.m_compilerVersion = new DataView(\n Uint8Array.from(reader.compilerVersion).buffer\n ).getUint32(0, true);\n }\n this.m_hash = reader.sourceHash ?? new Uint8Array(0);\n this.m_stringTableSize = reader.stringTableSize;\n this.m_stringTable = reader.stringTableBytes;\n\n for (const axis of reader.permutations)\n {\n const permutation = new HlslShaderPermutation();\n permutation.name = axis.name.value;\n permutation.defaultOption = axis.defaultOption;\n permutation.description = axis.description.value;\n permutation.type = axis.type;\n for (const option of axis.options) permutation.options.push(option.value);\n this.m_permutations.push(permutation);\n }\n\n this.m_offsetCount = reader.records.length;\n for (const record of reader.records)\n {\n this.m_offsets.push({\n index: record.index,\n offset: record.offset,\n size: record.size,\n end: record.offset + record.size\n });\n }\n\n return true;\n }\n catch (error)\n {\n this.loadError = error;\n this.m_shaders.clear();\n return false;\n }\n }\n\n /**\n * Mirrors Carbon's prepare hook by clearing cached shader bodies.\n *\n * @returns {boolean} True when preparation completed.\n */\n DoPrepare()\n {\n this.m_shaders.clear();\n return true;\n }\n\n /**\n * Resolves a permutation option set to a decoded `HlslShader`.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} [options] Local option choices.\n * @param {number|null} [count] Number of local option entries to consider.\n * @returns {HlslShader|null} Decoded shader or null when no matching body exists.\n */\n GetShader(options = [], count = null)\n {\n if (!this.IsGood())\n {\n return null;\n }\n\n const normalizedOptions = normalizeShaderOptions(options);\n const optionCount = Number.isInteger(count) ? Math.min(count, normalizedOptions.length) : normalizedOptions.length;\n let multiplier = 1;\n let index = 0;\n\n for (const permutation of this.m_permutations)\n {\n let value = permutation.defaultOption;\n const globalOption = HlslEffectRes.globalEffectOptions.find((entry) => entry.name === permutation.name);\n const localOption = normalizedOptions.slice(0, optionCount).find((entry) => entry.name === permutation.name);\n const selected = globalOption || localOption;\n\n if (selected)\n {\n const selectedIndex = permutation.options.findIndex((option) => option === selected.value);\n if (selectedIndex >= 0)\n {\n value = selectedIndex;\n }\n }\n\n index += value * multiplier;\n multiplier *= permutation.options.length || 1;\n }\n\n return this.GetShaderByIndex(index);\n }\n\n /**\n * Decodes the body at an exact permutation-table index without applying\n * global or local option overrides.\n *\n * @param {number} index Exact zero-based permutation-table index.\n * @returns {HlslShader|null} Decoded shader or null when the index/body is unavailable.\n */\n GetShaderByIndex(index)\n {\n if (!Number.isSafeInteger(index) || index < 0)\n {\n throw new TypeError(\"HlslEffectRes body index must be a non-negative safe integer\");\n }\n if (!this.IsGood())\n {\n return null;\n }\n if (this.m_shaders.has(index))\n {\n return this.m_shaders.get(index);\n }\n\n const offset = this.m_offsets[index];\n if (!offset || !this.m_reader)\n {\n return null;\n }\n\n // The retained container reader decodes the body's record tree - the\n // single byte-reading implementation - and the corpus-proven adapter\n // maps those records onto the runtime shape. The record tree is a\n // transient internal handoff, never exposed or persisted.\n try\n {\n const records = this.m_reader.readDescription(index);\n const built = runtimeDescriptionFromCarbon(records, {\n effectName: this.sourcePath,\n version: this.m_version,\n effectStateManager: this.effectStateManager,\n bytecodeFor: (stage, stageType) => new HlslShaderBytecode({\n stageType,\n stageName: hlslShaderStageName(stageType),\n bytes: stage.shaderData.bytes,\n shaderSize: stage.shaderData.size,\n stringTableOffset: stage.shaderData.offset,\n effectName: this.sourcePath\n })\n });\n\n const shader = new HlslShader();\n const description = shader.GetEffect();\n description.version = this.m_version;\n description.effectName = this.sourcePath;\n description.effectStateManager = built.effectStateManager;\n description.techniques = built.techniques;\n description.annotations = built.annotations;\n\n shader.ProcessEffect();\n this.m_shaders.set(index, shader);\n return shader;\n }\n catch\n {\n // Mirrors the historical reader contract: an undecodable body is\n // reported as absent rather than thrown, and is not cached so a\n // later caller sees the same result.\n return null;\n }\n }\n\n /**\n * Reports whether the effect header has been loaded without error.\n *\n * @returns {boolean} True when this resource has usable effect data.\n */\n IsGood()\n {\n return !this.loadError && this.m_data.length > 0 && this.m_version >= CARBON_EFFECT_MIN_DATA_VERSION;\n }\n\n /**\n * Reports whether byte memory usage is known for this resource.\n *\n * @returns {boolean} Always true for byte-backed JavaScript resources.\n */\n IsMemoryUsageKnown()\n {\n return true;\n }\n\n /**\n * Returns the byte size of the loaded effect payload.\n *\n * @returns {number} Loaded byte count.\n */\n GetMemoryUsage()\n {\n return this.m_data.length;\n }\n\n /**\n * Clears decoded shader body caches while keeping the loaded header data.\n */\n ReleaseResources()\n {\n this.m_shaders.clear();\n }\n\n /**\n * Returns JSON-safe permutation metadata for tooling and reports.\n *\n * @returns {object[]} Permutation descriptions.\n */\n GetPermutationDescription()\n {\n return this.m_permutations.map((permutation) => permutation.toJSON());\n }\n\n /**\n * Returns a JSON-safe summary of the loaded effect resource.\n *\n * @returns {object} Serializable effect resource summary.\n */\n toJSON()\n {\n return {\n version: this.m_version,\n compilerVersion: this.m_compilerVersion,\n compilerVersionBytes: this.m_compilerVersionBytes,\n sourcePath: this.sourcePath,\n stringTableSize: this.m_stringTableSize,\n offsetCount: this.m_offsetCount,\n permutations: this.m_permutations.map((entry) => entry.toJSON()),\n offsets: this.m_offsets.map((entry) => ({ ...entry })),\n loadError: this.loadError ? {\n name: this.loadError.name,\n message: this.loadError.message\n } : null\n };\n }\n\n /**\n * Resets loaded state before a new `DoLoad` attempt.\n *\n * @private\n */\n _reset()\n {\n this.m_data = new Uint8Array(0);\n this.m_reader = null;\n this.m_version = 0;\n this.m_stringTable = new Uint8Array(0);\n this.m_stringTableSize = 0;\n this.m_offsets = [];\n this.m_offsetCount = 0;\n this.m_permutations = [];\n this.m_shaders = new Map();\n this.m_compilerVersion = null;\n this.m_compilerVersionBytes = null;\n this.m_hash = new Uint8Array(0);\n this.loadError = null;\n }\n}\n\n/**\n * Applies global shader option overrides used during permutation lookup.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} [changes] Option changes to merge.\n */\nexport function ModifyGlobalEffectOptions(changes = [])\n{\n for (const change of normalizeShaderOptions(changes))\n {\n const index = HlslEffectRes.globalEffectOptions.findIndex((entry) => entry.name === change.name);\n if (!change.value)\n {\n if (index >= 0) HlslEffectRes.globalEffectOptions.splice(index, 1);\n }\n else if (index >= 0)\n {\n HlslEffectRes.globalEffectOptions[index] = change;\n }\n else\n {\n HlslEffectRes.globalEffectOptions.push(change);\n }\n }\n}\n\n/**\n * Returns the current global shader option overrides.\n *\n * @returns {HlslShaderOption[]} Copy of global shader option overrides.\n */\nexport function GetGlobalEffectOptions()\n{\n return HlslEffectRes.globalEffectOptions.slice();\n}\n\n/**\n * Converts supported option input shapes to `HlslShaderOption` instances.\n *\n * @param {Array<HlslShaderOption|object>|Map<string, string>} options Option input.\n * @returns {HlslShaderOption[]} Normalized option list.\n */\nfunction normalizeShaderOptions(options)\n{\n if (options instanceof Map)\n {\n return Array.from(options.entries()).map(([ name, value ]) => new HlslShaderOption(name, value));\n }\n if (!Array.isArray(options))\n {\n return [];\n }\n return options.map((entry) =>\n {\n if (entry instanceof HlslShaderOption)\n {\n return entry;\n }\n return new HlslShaderOption(entry?.name || \"\", entry?.value || \"\");\n });\n}\n"],"names":["HlslEffectRes","globalEffectOptions","constructor","m_data","Uint8Array","m_reader","m_version","m_stringTable","m_stringTableSize","m_offsets","m_offsetCount","m_permutations","m_shaders","Map","m_compilerVersion","m_compilerVersionBytes","m_hash","sourcePath","loadError","effectStateManager","HlslEffectStateManager","DoLoad","source","options","_reset","from","asUint8Array","reader","CjsCarbonEffectReader","version","compilerVersion","DataView","buffer","getUint32","sourceHash","stringTableSize","stringTableBytes","axis","permutations","permutation","HlslShaderPermutation","name","value","defaultOption","description","type","option","push","records","length","record","index","offset","size","end","error","clear","DoPrepare","GetShader","count","IsGood","normalizedOptions","normalizeShaderOptions","optionCount","Number","isInteger","Math","min","multiplier","globalOption","find","entry","localOption","slice","selected","selectedIndex","findIndex","GetShaderByIndex","isSafeInteger","TypeError","has","get","readDescription","built","runtimeDescriptionFromCarbon","effectName","bytecodeFor","stage","stageType","HlslShaderBytecode","stageName","hlslShaderStageName","bytes","shaderData","shaderSize","stringTableOffset","shader","HlslShader","GetEffect","techniques","annotations","ProcessEffect","set","CARBON_EFFECT_MIN_DATA_VERSION","IsMemoryUsageKnown","GetMemoryUsage","ReleaseResources","GetPermutationDescription","map","toJSON","compilerVersionBytes","offsetCount","offsets","message","Array","entries","HlslShaderOption","isArray"],"mappings":"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"}
|
|
@@ -364,7 +364,14 @@ function carbonPayload(kind, metadata, stage, registerIndex) {
|
|
|
364
364
|
return {
|
|
365
365
|
hasLocalConstants,
|
|
366
366
|
constantValueSize: hasLocalConstants ? stage.m_constantValueSize : 0,
|
|
367
|
-
constants: hasLocalConstants ? stage.constants.map(entry => entry?.toJSON?.() ?? entry) : []
|
|
367
|
+
constants: hasLocalConstants ? stage.constants.map(entry => entry?.toJSON?.() ?? entry) : [],
|
|
368
|
+
// The exact authored default bytes for the stage's local constant
|
|
369
|
+
// buffer. A consumer that zero-fills instead of using these
|
|
370
|
+
// changes every authored default the scene does not override -
|
|
371
|
+
// the effect-resource contract calls the bytes mandatory, and a
|
|
372
|
+
// background effect whose Tint and intensity read zero renders
|
|
373
|
+
// pure black while drawing "correctly".
|
|
374
|
+
constantValues: hasLocalConstants && stage.constantValues ? Array.from(stage.constantValues) : []
|
|
368
375
|
};
|
|
369
376
|
}
|
|
370
377
|
return metadata?.toJSON?.() ?? cloneJson(metadata);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HlslEffectBindingManifest.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js"],"sourcesContent":["import { HlslRenderContextEnum, hlslShaderStageName } from \"../HlslRenderContextEnum.js\";\n\n/**\n * Carbon-backed binding manifest for register-named shader outputs.\n *\n * This maps generated fallback symbols such as `cb0`, `t3`, `s0`, and `u1`\n * back to the exact stage metadata read from Trinity effect data.\n */\nexport class HlslEffectBindingManifest\n{\n /**\n * Builds a manifest from a loaded `HlslEffectRes`.\n *\n * @param {object} effectRes Loaded effect resource with `GetShader()`.\n * @param {object} [options] Manifest options.\n * @returns {HlslEffectBindingManifest} Carbon binding manifest.\n */\n static fromTr2EffectRes(effectRes, options = {})\n {\n const shader = effectRes.GetShader();\n return HlslEffectBindingManifest.fromEffectDescription(shader.GetEffectDescription(), options);\n }\n\n /**\n * Builds a manifest from a decoded `HlslEffectDescription`.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} [options] Manifest options.\n * @returns {HlslEffectBindingManifest} Carbon binding manifest.\n */\n static fromEffectDescription(effectDescription, options = {})\n {\n return new HlslEffectBindingManifest(effectDescription, options);\n }\n\n /**\n * Creates a binding manifest.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} [options] Manifest options.\n */\n constructor(effectDescription, options = {})\n {\n this.effectName = effectDescription?.effectName || options.effectName || \"\";\n this.version = effectDescription?.version || 0;\n this.passes = buildPasses(effectDescription);\n this.stages = buildStages(effectDescription);\n }\n\n /**\n * Resolves a generated binding symbol for one stage.\n *\n * @param {object} query Stage and symbol query.\n * @param {string} query.techniqueName Technique name.\n * @param {number} query.passIndex Pass index.\n * @param {number} [query.stageType] Trinity stage enum value.\n * @param {string} [query.stageName] Stage name.\n * @param {string} query.symbol Generated symbol such as `cb0` or `t3`.\n * @param {number} [query.registerSpace] Optional D3D register-space disambiguator.\n * @returns {object|null} Matching binding record, or null.\n */\n resolve(query)\n {\n const stage = this.stages.find((entry) =>\n entry.techniqueName === query.techniqueName &&\n entry.passIndex === query.passIndex &&\n (Number.isInteger(query.stageType) ? entry.stageType === query.stageType : entry.stageName === query.stageName)\n );\n if (!stage) return null;\n return stage.bindings.find((entry) =>\n entry.generatedSymbol === query.symbol &&\n (!Number.isInteger(query.registerSpace) || entry.registerSpace === query.registerSpace)\n ) || null;\n }\n\n /**\n * Returns a JSON-safe manifest snapshot.\n *\n * @returns {object} Serializable binding manifest.\n */\n toJSON()\n {\n return {\n effectName: this.effectName,\n version: this.version,\n passes: this.passes.map((entry) => cloneJson(entry)),\n stages: this.stages.map((entry) => cloneJson(entry))\n };\n }\n}\n\n/**\n * Builds pass render-state records from the decoded effect description.\n *\n * @param {object} effectDescription Decoded effect description.\n * @returns {object[]} Pass render-state manifest records.\n */\nfunction buildPasses(effectDescription)\n{\n const passes = [];\n for (const technique of effectDescription?.techniques || [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex += 1)\n {\n const pass = technique.passes[passIndex];\n passes.push({\n techniqueName: technique.name,\n passIndex,\n renderStates: pass.renderStates,\n states: (pass.cjsRenderStateSetup?.entries || []).map(({ key, value }) => ({\n state: key,\n value\n }))\n });\n }\n }\n return passes;\n}\n\n/**\n * Builds all stage records from the decoded effect description.\n *\n * @param {object} effectDescription Decoded effect description.\n * @returns {object[]} Stage binding manifest records.\n */\nfunction buildStages(effectDescription)\n{\n const stages = [];\n for (const technique of effectDescription?.techniques || [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex += 1)\n {\n const pass = technique.passes[passIndex];\n for (let stageType = 0; stageType < HlslRenderContextEnum.SHADER_TYPE_COUNT; stageType += 1)\n {\n const stage = pass.stageInputs[stageType];\n if (!stage?.m_exists) continue;\n stages.push(buildStage(effectDescription, technique.name, passIndex, pass, stageType, stage));\n }\n }\n }\n return stages;\n}\n\n/**\n * Builds one stage binding manifest record.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {string} techniqueName Technique name.\n * @param {number} passIndex Pass index.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @returns {object} Stage binding record.\n */\nfunction buildStage(effectDescription, techniqueName, passIndex, pass, stageType, stage)\n{\n const bindings = [];\n const seen = new Set();\n\n for (const register of stage.signature?.registers || [])\n {\n const binding = buildRegisterBinding(effectDescription, pass, stageType, stage, register);\n if (!binding) continue;\n const identity = bindingIdentity(binding.kind, binding.registerSpace, binding.registerIndex);\n if (seen.has(identity)) continue;\n seen.add(identity);\n bindings.push(binding);\n }\n\n addSignatureSamplerBindings(effectDescription, pass, stageType, stage, bindings, seen);\n\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"resource\", \"t\", stage.resources);\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"sampler\", \"s\", stage.samplers);\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"uav\", \"u\", stage.uavs);\n\n return {\n techniqueName,\n passIndex,\n stageType,\n stageName: hlslShaderStageName(stageType),\n shaderHandle: stage.m_shader,\n shaderBytecode: stage.cjsShaderBytecode?.toJSON?.() ?? stage.cjsShaderBytecode,\n pipelineInputs: cloneJson(stage.signature?.pipelineInputs || []),\n threadGroupSize: cloneJson(stage.signature?.threadGroupSize || null),\n bindings\n };\n}\n\n/**\n * Adds v13+ static samplers, which Carbon stores separately from the general\n * signature register list. In particular, SM 5.1 effects may declare `s0`\n * only in `signature.samplers`.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object[]} bindings Destination bindings.\n * @param {Set<string>} seen Class/space/register identities already added.\n */\nfunction addSignatureSamplerBindings(effectDescription, pass, stageType, stage, bindings, seen)\n{\n for (const sampler of stage.signature?.samplers || [])\n {\n if (!Number.isInteger(sampler?.registerIndex)) continue;\n const registerSpace = Number.isInteger(sampler.registerSpace) ? sampler.registerSpace : stageType;\n const identity = bindingIdentity(\"sampler\", registerSpace, sampler.registerIndex);\n if (seen.has(identity)) continue;\n const mapMetadata = stage.samplers.get(sampler.registerIndex) || null;\n const name = metadataName(\"sampler\", mapMetadata || sampler, stage, sampler.registerIndex);\n bindings.push({\n kind: \"sampler\",\n generatedSymbol: `s${sampler.registerIndex}`,\n registerIndex: sampler.registerIndex,\n registerType: 1,\n registerSpace,\n registerCount: 1,\n arrayCount: 1,\n dynamic: Boolean(mapMetadata?.sampler?.isDynamic),\n metadataName: name,\n carbon: {\n name: mapMetadata?.name || null,\n sampler: cloneJson(sampler.sampler)\n },\n annotations: annotationsFor(effectDescription, name),\n heapView: isHeapView(pass, \"sampler\", stageType, sampler.registerIndex),\n sourceTruth: \"carbon-signature-sampler\"\n });\n seen.add(identity);\n }\n}\n\n/**\n * Builds one binding from a Carbon register declaration.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object} register Carbon register declaration.\n * @returns {object|null} Binding record.\n */\nfunction buildRegisterBinding(effectDescription, pass, stageType, stage, register)\n{\n const classification = classifyRegister(register.registerType);\n if (!classification) return null;\n const metadata = metadataForBinding(stage, classification.kind, register.registerIndex);\n const generatedSymbol = `${classification.prefix}${register.registerIndex}`;\n return {\n kind: classification.kind,\n generatedSymbol,\n registerIndex: register.registerIndex,\n registerType: register.registerType,\n registerSpace: register.registerSpace,\n registerCount: register.registerCount,\n arrayCount: register.arrayCount,\n dynamic: Boolean(register.dynamic),\n metadataName: metadataName(classification.kind, metadata, stage, register.registerIndex),\n carbon: carbonPayload(classification.kind, metadata, stage, register.registerIndex),\n annotations: annotationsFor(effectDescription, metadataName(classification.kind, metadata, stage, register.registerIndex)),\n heapView: isHeapView(pass, classification.kind, stageType, register.registerIndex),\n sourceTruth: \"carbon-stage-register\"\n };\n}\n\n/**\n * Adds bindings found in Carbon maps but absent from the signature register list.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object[]} bindings Destination bindings.\n * @param {Set<string>} seen Generated symbols already added.\n * @param {string} kind Binding kind.\n * @param {string} prefix Generated symbol prefix.\n * @param {Map<number, object>} map Carbon register map.\n */\nfunction addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, kind, prefix, map)\n{\n for (const [ registerIndex, metadata ] of map.entries())\n {\n // Carbon register maps do not carry a register space. When an exact\n // signature source already names this class/index, it wins regardless\n // of space; treating stageType as an additional exact space would\n // manufacture duplicate SM 5.1 bindings.\n if (bindings.some((entry) => entry.kind === kind && entry.registerIndex === registerIndex)) continue;\n const registerSpace = stageType;\n const identity = bindingIdentity(kind, registerSpace, registerIndex);\n const generatedSymbol = `${prefix}${registerIndex}`;\n if (seen.has(identity)) continue;\n bindings.push({\n kind,\n generatedSymbol,\n registerIndex,\n registerType: null,\n registerSpace,\n registerCount: metadata?.arrayElements || 1,\n arrayCount: metadata?.arrayElements || 1,\n dynamic: true,\n metadataName: metadataName(kind, metadata, stage, registerIndex),\n carbon: carbonPayload(kind, metadata, stage, registerIndex),\n annotations: annotationsFor(effectDescription, metadataName(kind, metadata, stage, registerIndex)),\n heapView: isHeapView(pass, kind, stageType, registerIndex),\n sourceTruth: \"carbon-register-map\"\n });\n seen.add(identity);\n }\n}\n\n/**\n * Builds a class-aware identity for one D3D register binding.\n *\n * @param {string} kind Binding class.\n * @param {number} registerSpace D3D register space.\n * @param {number} registerIndex D3D register index.\n * @returns {string} Stable identity.\n */\nfunction bindingIdentity(kind, registerSpace, registerIndex)\n{\n return `${kind}:${registerSpace}:${registerIndex}`;\n}\n\n/**\n * Classifies a Carbon register type into generated-symbol kind.\n *\n * @param {number} registerType Carbon register type.\n * @returns {{kind:string,prefix:string}|null} Binding classification.\n */\nfunction classifyRegister(registerType)\n{\n if (registerType === 0) return { kind: \"constantBuffer\", prefix: \"cb\" };\n if (registerType === 1) return { kind: \"sampler\", prefix: \"s\" };\n if (registerType >= 32 && registerType <= 63) return { kind: \"resource\", prefix: \"t\" };\n if (registerType >= 64 && registerType <= 95) return { kind: \"uav\", prefix: \"u\" };\n return null;\n}\n\n/**\n * Gets register metadata for a classified binding.\n *\n * @param {object} stage Stage input metadata.\n * @param {string} kind Binding kind.\n * @param {number} registerIndex Register index.\n * @returns {object|null} Carbon metadata object.\n */\nfunction metadataForBinding(stage, kind, registerIndex)\n{\n if (kind === \"resource\") return stage.resources.get(registerIndex) || null;\n if (kind === \"sampler\") return stage.samplers.get(registerIndex) || null;\n if (kind === \"uav\") return stage.uavs.get(registerIndex) || null;\n return null;\n}\n\n/**\n * Gets the best Carbon metadata name for one binding.\n *\n * @param {string} kind Binding kind.\n * @param {object|null} metadata Carbon metadata object.\n * @param {object} stage Stage input metadata.\n * @param {number} registerIndex Register index.\n * @returns {string|null} Metadata name.\n */\nfunction metadataName(kind, metadata, stage, registerIndex)\n{\n if (metadata?.name) return metadata.name;\n if (kind === \"constantBuffer\" && registerIndex === 0 && stage.constants.length) return \"$LocalConstants\";\n return null;\n}\n\n/**\n * Builds the Carbon metadata payload for one binding.\n *\n * @param {string} kind Binding kind.\n * @param {object|null} metadata Carbon metadata object.\n * @param {object} stage Stage input metadata.\n * @param {number} registerIndex Register index.\n * @returns {object|null} JSON-safe Carbon payload.\n */\nfunction carbonPayload(kind, metadata, stage, registerIndex)\n{\n if (kind === \"constantBuffer\")\n {\n const hasLocalConstants = registerIndex === 0 && stage.constants.length > 0;\n return {\n hasLocalConstants,\n constantValueSize: hasLocalConstants ? stage.m_constantValueSize : 0,\n constants: hasLocalConstants ? stage.constants.map((entry) => entry?.toJSON?.() ?? entry) : []\n };\n }\n return metadata?.toJSON?.() ?? cloneJson(metadata);\n}\n\n/**\n * Gets top-level annotations for a named parameter.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {string|null} name Parameter name.\n * @returns {object[]} JSON-safe annotations.\n */\nfunction annotationsFor(effectDescription, name)\n{\n if (!name) return [];\n const annotations = effectDescription.annotations?.get(name) || [];\n return annotations.map((entry) => entry?.toJSON?.() ?? entry);\n}\n\n/**\n * Checks whether a binding is marked as a heap view in the resource-set description.\n *\n * @param {object} pass Pass metadata.\n * @param {string} kind Binding kind.\n * @param {number} stageType Stage enum value.\n * @param {number} registerIndex Register index.\n * @returns {boolean} True when the binding is a heap view.\n */\nfunction isHeapView(pass, kind, stageType, registerIndex)\n{\n const heapKind = kind === \"resource\" ? \"srv\" : kind === \"sampler\" ? \"sampler\" : kind === \"uav\" ? \"uav\" : null;\n if (!heapKind) return false;\n return Boolean(pass.resourceSetDesc?.heapViews?.some((entry) =>\n entry.kind === heapKind &&\n entry.stageType === stageType &&\n entry.registerIndex === registerIndex\n ));\n}\n\n/**\n * Deep-clones JSON-like values.\n *\n * @param {*} value Value to clone.\n * @returns {*} JSON-like clone.\n */\nfunction cloneJson(value)\n{\n if (Array.isArray(value)) return value.map(cloneJson);\n if (value && typeof value === \"object\")\n {\n return Object.fromEntries(Object.entries(value).map(([ key, entry ]) => [ key, cloneJson(entry) ]));\n }\n return value;\n}\n"],"names":["HlslEffectBindingManifest","fromTr2EffectRes","effectRes","options","shader","GetShader","fromEffectDescription","GetEffectDescription","effectDescription","constructor","effectName","version","passes","buildPasses","stages","buildStages","resolve","query","stage","find","entry","techniqueName","passIndex","Number","isInteger","stageType","stageName","bindings","generatedSymbol","symbol","registerSpace","toJSON","map","cloneJson","technique","techniques","length","pass","push","name","renderStates","states","cjsRenderStateSetup","entries","key","value","state","HlslRenderContextEnum","SHADER_TYPE_COUNT","stageInputs","m_exists","buildStage","seen","Set","register","signature","registers","binding","buildRegisterBinding","identity","bindingIdentity","kind","registerIndex","has","add","addSignatureSamplerBindings","addMapBindings","resources","samplers","uavs","hlslShaderStageName","shaderHandle","m_shader","shaderBytecode","cjsShaderBytecode","pipelineInputs","threadGroupSize","sampler","mapMetadata","get","metadataName","registerType","registerCount","arrayCount","dynamic","Boolean","isDynamic","carbon","annotations","annotationsFor","heapView","isHeapView","sourceTruth","classification","classifyRegister","metadata","metadataForBinding","prefix","carbonPayload","some","arrayElements","constants","hasLocalConstants","constantValueSize","m_constantValueSize","heapKind","resourceSetDesc","heapViews","Array","isArray","Object","fromEntries"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,yBAAyB,CACtC;AACI;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAOC,gBAAgBA,CAACC,SAAS,EAAEC,OAAO,GAAG,EAAE,EAC/C;AACI,IAAA,MAAMC,MAAM,GAAGF,SAAS,CAACG,SAAS,EAAE;IACpC,OAAOL,yBAAyB,CAACM,qBAAqB,CAACF,MAAM,CAACG,oBAAoB,EAAE,EAAEJ,OAAO,CAAC;AAClG,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;EACI,OAAOG,qBAAqBA,CAACE,iBAAiB,EAAEL,OAAO,GAAG,EAAE,EAC5D;AACI,IAAA,OAAO,IAAIH,yBAAyB,CAACQ,iBAAiB,EAAEL,OAAO,CAAC;AACpE,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACIM,EAAAA,WAAWA,CAACD,iBAAiB,EAAEL,OAAO,GAAG,EAAE,EAC3C;IACI,IAAI,CAACO,UAAU,GAAGF,iBAAiB,EAAEE,UAAU,IAAIP,OAAO,CAACO,UAAU,IAAI,EAAE;AAC3E,IAAA,IAAI,CAACC,OAAO,GAAGH,iBAAiB,EAAEG,OAAO,IAAI,CAAC;AAC9C,IAAA,IAAI,CAACC,MAAM,GAAGC,WAAW,CAACL,iBAAiB,CAAC;AAC5C,IAAA,IAAI,CAACM,MAAM,GAAGC,WAAW,CAACP,iBAAiB,CAAC;AAChD,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACIQ,OAAOA,CAACC,KAAK,EACb;IACI,MAAMC,KAAK,GAAG,IAAI,CAACJ,MAAM,CAACK,IAAI,CAAEC,KAAK,IACjCA,KAAK,CAACC,aAAa,KAAKJ,KAAK,CAACI,aAAa,IACjDD,KAAK,CAACE,SAAS,KAAKL,KAAK,CAACK,SAAS,KAClCC,MAAM,CAACC,SAAS,CAACP,KAAK,CAACQ,SAAS,CAAC,GAAGL,KAAK,CAACK,SAAS,KAAKR,KAAK,CAACQ,SAAS,GAAGL,KAAK,CAACM,SAAS,KAAKT,KAAK,CAACS,SAAS,CAC5G,CAAC;AACD,IAAA,IAAI,CAACR,KAAK,EAAE,OAAO,IAAI;AACvB,IAAA,OAAOA,KAAK,CAACS,QAAQ,CAACR,IAAI,CAAEC,KAAK,IAC7BA,KAAK,CAACQ,eAAe,KAAKX,KAAK,CAACY,MAAM,KACrC,CAACN,MAAM,CAACC,SAAS,CAACP,KAAK,CAACa,aAAa,CAAC,IAAIV,KAAK,CAACU,aAAa,KAAKb,KAAK,CAACa,aAAa,CAC1F,CAAC,IAAI,IAAI;AACb,EAAA;;AAEA;AACJ;AACA;AACA;AACA;AACIC,EAAAA,MAAMA,GACN;IACI,OAAO;MACHrB,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BC,OAAO,EAAE,IAAI,CAACA,OAAO;AACrBC,MAAAA,MAAM,EAAE,IAAI,CAACA,MAAM,CAACoB,GAAG,CAAEZ,KAAK,IAAKa,SAAS,CAACb,KAAK,CAAC,CAAC;AACpDN,MAAAA,MAAM,EAAE,IAAI,CAACA,MAAM,CAACkB,GAAG,CAAEZ,KAAK,IAAKa,SAAS,CAACb,KAAK,CAAC;KACtD;AACL,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASP,WAAWA,CAACL,iBAAiB,EACtC;EACI,MAAMI,MAAM,GAAG,EAAE;EACjB,KAAK,MAAMsB,SAAS,IAAI1B,iBAAiB,EAAE2B,UAAU,IAAI,EAAE,EAC3D;AACI,IAAA,KAAK,IAAIb,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGY,SAAS,CAACtB,MAAM,CAACwB,MAAM,EAAEd,SAAS,IAAI,CAAC,EAC3E;AACI,MAAA,MAAMe,IAAI,GAAGH,SAAS,CAACtB,MAAM,CAACU,SAAS,CAAC;MACxCV,MAAM,CAAC0B,IAAI,CAAC;QACRjB,aAAa,EAAEa,SAAS,CAACK,IAAI;QAC7BjB,SAAS;QACTkB,YAAY,EAAEH,IAAI,CAACG,YAAY;AAC/BC,QAAAA,MAAM,EAAE,CAACJ,IAAI,CAACK,mBAAmB,EAAEC,OAAO,IAAI,EAAE,EAAEX,GAAG,CAAC,CAAC;UAAEY,GAAG;AAAEC,UAAAA;AAAM,SAAC,MAAM;AACvEC,UAAAA,KAAK,EAAEF,GAAG;AACVC,UAAAA;AACJ,SAAC,CAAC;AACN,OAAC,CAAC;AACN,IAAA;AACJ,EAAA;AACA,EAAA,OAAOjC,MAAM;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,WAAWA,CAACP,iBAAiB,EACtC;EACI,MAAMM,MAAM,GAAG,EAAE;EACjB,KAAK,MAAMoB,SAAS,IAAI1B,iBAAiB,EAAE2B,UAAU,IAAI,EAAE,EAC3D;AACI,IAAA,KAAK,IAAIb,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGY,SAAS,CAACtB,MAAM,CAACwB,MAAM,EAAEd,SAAS,IAAI,CAAC,EAC3E;AACI,MAAA,MAAMe,IAAI,GAAGH,SAAS,CAACtB,MAAM,CAACU,SAAS,CAAC;AACxC,MAAA,KAAK,IAAIG,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGsB,qBAAqB,CAACC,iBAAiB,EAAEvB,SAAS,IAAI,CAAC,EAC3F;AACI,QAAA,MAAMP,KAAK,GAAGmB,IAAI,CAACY,WAAW,CAACxB,SAAS,CAAC;AACzC,QAAA,IAAI,CAACP,KAAK,EAAEgC,QAAQ,EAAE;AACtBpC,QAAAA,MAAM,CAACwB,IAAI,CAACa,UAAU,CAAC3C,iBAAiB,EAAE0B,SAAS,CAACK,IAAI,EAAEjB,SAAS,EAAEe,IAAI,EAAEZ,SAAS,EAAEP,KAAK,CAAC,CAAC;AACjG,MAAA;AACJ,IAAA;AACJ,EAAA;AACA,EAAA,OAAOJ,MAAM;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqC,UAAUA,CAAC3C,iBAAiB,EAAEa,aAAa,EAAEC,SAAS,EAAEe,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EACvF;EACI,MAAMS,QAAQ,GAAG,EAAE;AACnB,EAAA,MAAMyB,IAAI,GAAG,IAAIC,GAAG,EAAE;EAEtB,KAAK,MAAMC,QAAQ,IAAIpC,KAAK,CAACqC,SAAS,EAAEC,SAAS,IAAI,EAAE,EACvD;AACI,IAAA,MAAMC,OAAO,GAAGC,oBAAoB,CAAClD,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAEoC,QAAQ,CAAC;IACzF,IAAI,CAACG,OAAO,EAAE;AACd,IAAA,MAAME,QAAQ,GAAGC,eAAe,CAACH,OAAO,CAACI,IAAI,EAAEJ,OAAO,CAAC3B,aAAa,EAAE2B,OAAO,CAACK,aAAa,CAAC;AAC5F,IAAA,IAAIV,IAAI,CAACW,GAAG,CAACJ,QAAQ,CAAC,EAAE;AACxBP,IAAAA,IAAI,CAACY,GAAG,CAACL,QAAQ,CAAC;AAClBhC,IAAAA,QAAQ,CAACW,IAAI,CAACmB,OAAO,CAAC;AAC1B,EAAA;AAEAQ,EAAAA,2BAA2B,CAACzD,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,CAAC;EAEtFc,cAAc,CAAC1D,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,EAAE,UAAU,EAAE,GAAG,EAAElC,KAAK,CAACiD,SAAS,CAAC;EAC3GD,cAAc,CAAC1D,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,EAAE,SAAS,EAAE,GAAG,EAAElC,KAAK,CAACkD,QAAQ,CAAC;EACzGF,cAAc,CAAC1D,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,EAAE,KAAK,EAAE,GAAG,EAAElC,KAAK,CAACmD,IAAI,CAAC;EAEjG,OAAO;IACHhD,aAAa;IACbC,SAAS;IACTG,SAAS;AACTC,IAAAA,SAAS,EAAE4C,mBAAmB,CAAC7C,SAAS,CAAC;IACzC8C,YAAY,EAAErD,KAAK,CAACsD,QAAQ;IAC5BC,cAAc,EAAEvD,KAAK,CAACwD,iBAAiB,EAAE3C,MAAM,IAAI,IAAIb,KAAK,CAACwD,iBAAiB;IAC9EC,cAAc,EAAE1C,SAAS,CAACf,KAAK,CAACqC,SAAS,EAAEoB,cAAc,IAAI,EAAE,CAAC;IAChEC,eAAe,EAAE3C,SAAS,CAACf,KAAK,CAACqC,SAAS,EAAEqB,eAAe,IAAI,IAAI,CAAC;AACpEjD,IAAAA;GACH;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASsC,2BAA2BA,CAACzD,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,EAC9F;EACI,KAAK,MAAMyB,OAAO,IAAI3D,KAAK,CAACqC,SAAS,EAAEa,QAAQ,IAAI,EAAE,EACrD;IACI,IAAI,CAAC7C,MAAM,CAACC,SAAS,CAACqD,OAAO,EAAEf,aAAa,CAAC,EAAE;AAC/C,IAAA,MAAMhC,aAAa,GAAGP,MAAM,CAACC,SAAS,CAACqD,OAAO,CAAC/C,aAAa,CAAC,GAAG+C,OAAO,CAAC/C,aAAa,GAAGL,SAAS;IACjG,MAAMkC,QAAQ,GAAGC,eAAe,CAAC,SAAS,EAAE9B,aAAa,EAAE+C,OAAO,CAACf,aAAa,CAAC;AACjF,IAAA,IAAIV,IAAI,CAACW,GAAG,CAACJ,QAAQ,CAAC,EAAE;AACxB,IAAA,MAAMmB,WAAW,GAAG5D,KAAK,CAACkD,QAAQ,CAACW,GAAG,CAACF,OAAO,CAACf,aAAa,CAAC,IAAI,IAAI;AACrE,IAAA,MAAMvB,IAAI,GAAGyC,YAAY,CAAC,SAAS,EAAEF,WAAW,IAAID,OAAO,EAAE3D,KAAK,EAAE2D,OAAO,CAACf,aAAa,CAAC;IAC1FnC,QAAQ,CAACW,IAAI,CAAC;AACVuB,MAAAA,IAAI,EAAE,SAAS;AACfjC,MAAAA,eAAe,EAAE,CAAA,CAAA,EAAIiD,OAAO,CAACf,aAAa,CAAA,CAAE;MAC5CA,aAAa,EAAEe,OAAO,CAACf,aAAa;AACpCmB,MAAAA,YAAY,EAAE,CAAC;MACfnD,aAAa;AACboD,MAAAA,aAAa,EAAE,CAAC;AAChBC,MAAAA,UAAU,EAAE,CAAC;MACbC,OAAO,EAAEC,OAAO,CAACP,WAAW,EAAED,OAAO,EAAES,SAAS,CAAC;AACjDN,MAAAA,YAAY,EAAEzC,IAAI;AAClBgD,MAAAA,MAAM,EAAE;AACJhD,QAAAA,IAAI,EAAEuC,WAAW,EAAEvC,IAAI,IAAI,IAAI;AAC/BsC,QAAAA,OAAO,EAAE5C,SAAS,CAAC4C,OAAO,CAACA,OAAO;OACrC;AACDW,MAAAA,WAAW,EAAEC,cAAc,CAACjF,iBAAiB,EAAE+B,IAAI,CAAC;AACpDmD,MAAAA,QAAQ,EAAEC,UAAU,CAACtD,IAAI,EAAE,SAAS,EAAEZ,SAAS,EAAEoD,OAAO,CAACf,aAAa,CAAC;AACvE8B,MAAAA,WAAW,EAAE;AACjB,KAAC,CAAC;AACFxC,IAAAA,IAAI,CAACY,GAAG,CAACL,QAAQ,CAAC;AACtB,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,oBAAoBA,CAAClD,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAEoC,QAAQ,EACjF;AACI,EAAA,MAAMuC,cAAc,GAAGC,gBAAgB,CAACxC,QAAQ,CAAC2B,YAAY,CAAC;AAC9D,EAAA,IAAI,CAACY,cAAc,EAAE,OAAO,IAAI;AAChC,EAAA,MAAME,QAAQ,GAAGC,kBAAkB,CAAC9E,KAAK,EAAE2E,cAAc,CAAChC,IAAI,EAAEP,QAAQ,CAACQ,aAAa,CAAC;EACvF,MAAMlC,eAAe,GAAG,CAAA,EAAGiE,cAAc,CAACI,MAAM,CAAA,EAAG3C,QAAQ,CAACQ,aAAa,CAAA,CAAE;EAC3E,OAAO;IACHD,IAAI,EAAEgC,cAAc,CAAChC,IAAI;IACzBjC,eAAe;IACfkC,aAAa,EAAER,QAAQ,CAACQ,aAAa;IACrCmB,YAAY,EAAE3B,QAAQ,CAAC2B,YAAY;IACnCnD,aAAa,EAAEwB,QAAQ,CAACxB,aAAa;IACrCoD,aAAa,EAAE5B,QAAQ,CAAC4B,aAAa;IACrCC,UAAU,EAAE7B,QAAQ,CAAC6B,UAAU;AAC/BC,IAAAA,OAAO,EAAEC,OAAO,CAAC/B,QAAQ,CAAC8B,OAAO,CAAC;AAClCJ,IAAAA,YAAY,EAAEA,YAAY,CAACa,cAAc,CAAChC,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAEoC,QAAQ,CAACQ,aAAa,CAAC;AACxFyB,IAAAA,MAAM,EAAEW,aAAa,CAACL,cAAc,CAAChC,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAEoC,QAAQ,CAACQ,aAAa,CAAC;AACnF0B,IAAAA,WAAW,EAAEC,cAAc,CAACjF,iBAAiB,EAAEwE,YAAY,CAACa,cAAc,CAAChC,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAEoC,QAAQ,CAACQ,aAAa,CAAC,CAAC;AAC1H4B,IAAAA,QAAQ,EAAEC,UAAU,CAACtD,IAAI,EAAEwD,cAAc,CAAChC,IAAI,EAAEpC,SAAS,EAAE6B,QAAQ,CAACQ,aAAa,CAAC;AAClF8B,IAAAA,WAAW,EAAE;GAChB;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS1B,cAAcA,CAAC1D,iBAAiB,EAAE6B,IAAI,EAAEZ,SAAS,EAAEP,KAAK,EAAES,QAAQ,EAAEyB,IAAI,EAAES,IAAI,EAAEoC,MAAM,EAAEjE,GAAG,EACpG;AACI,EAAA,KAAK,MAAM,CAAE8B,aAAa,EAAEiC,QAAQ,CAAE,IAAI/D,GAAG,CAACW,OAAO,EAAE,EACvD;AACI;AACA;AACA;AACA;AACA,IAAA,IAAIhB,QAAQ,CAACwE,IAAI,CAAE/E,KAAK,IAAKA,KAAK,CAACyC,IAAI,KAAKA,IAAI,IAAIzC,KAAK,CAAC0C,aAAa,KAAKA,aAAa,CAAC,EAAE;IAC5F,MAAMhC,aAAa,GAAGL,SAAS;IAC/B,MAAMkC,QAAQ,GAAGC,eAAe,CAACC,IAAI,EAAE/B,aAAa,EAAEgC,aAAa,CAAC;AACpE,IAAA,MAAMlC,eAAe,GAAG,CAAA,EAAGqE,MAAM,CAAA,EAAGnC,aAAa,CAAA,CAAE;AACnD,IAAA,IAAIV,IAAI,CAACW,GAAG,CAACJ,QAAQ,CAAC,EAAE;IACxBhC,QAAQ,CAACW,IAAI,CAAC;MACVuB,IAAI;MACJjC,eAAe;MACfkC,aAAa;AACbmB,MAAAA,YAAY,EAAE,IAAI;MAClBnD,aAAa;AACboD,MAAAA,aAAa,EAAEa,QAAQ,EAAEK,aAAa,IAAI,CAAC;AAC3CjB,MAAAA,UAAU,EAAEY,QAAQ,EAAEK,aAAa,IAAI,CAAC;AACxChB,MAAAA,OAAO,EAAE,IAAI;MACbJ,YAAY,EAAEA,YAAY,CAACnB,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAE4C,aAAa,CAAC;MAChEyB,MAAM,EAAEW,aAAa,CAACrC,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAE4C,aAAa,CAAC;AAC3D0B,MAAAA,WAAW,EAAEC,cAAc,CAACjF,iBAAiB,EAAEwE,YAAY,CAACnB,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAE4C,aAAa,CAAC,CAAC;MAClG4B,QAAQ,EAAEC,UAAU,CAACtD,IAAI,EAAEwB,IAAI,EAAEpC,SAAS,EAAEqC,aAAa,CAAC;AAC1D8B,MAAAA,WAAW,EAAE;AACjB,KAAC,CAAC;AACFxC,IAAAA,IAAI,CAACY,GAAG,CAACL,QAAQ,CAAC;AACtB,EAAA;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,IAAI,EAAE/B,aAAa,EAAEgC,aAAa,EAC3D;AACI,EAAA,OAAO,GAAGD,IAAI,CAAA,CAAA,EAAI/B,aAAa,CAAA,CAAA,EAAIgC,aAAa,CAAA,CAAE;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASgC,gBAAgBA,CAACb,YAAY,EACtC;AACI,EAAA,IAAIA,YAAY,KAAK,CAAC,EAAE,OAAO;AAAEpB,IAAAA,IAAI,EAAE,gBAAgB;AAAEoC,IAAAA,MAAM,EAAE;GAAM;AACvE,EAAA,IAAIhB,YAAY,KAAK,CAAC,EAAE,OAAO;AAAEpB,IAAAA,IAAI,EAAE,SAAS;AAAEoC,IAAAA,MAAM,EAAE;GAAK;EAC/D,IAAIhB,YAAY,IAAI,EAAE,IAAIA,YAAY,IAAI,EAAE,EAAE,OAAO;AAAEpB,IAAAA,IAAI,EAAE,UAAU;AAAEoC,IAAAA,MAAM,EAAE;GAAK;EACtF,IAAIhB,YAAY,IAAI,EAAE,IAAIA,YAAY,IAAI,EAAE,EAAE,OAAO;AAAEpB,IAAAA,IAAI,EAAE,KAAK;AAAEoC,IAAAA,MAAM,EAAE;GAAK;AACjF,EAAA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASD,kBAAkBA,CAAC9E,KAAK,EAAE2C,IAAI,EAAEC,aAAa,EACtD;AACI,EAAA,IAAID,IAAI,KAAK,UAAU,EAAE,OAAO3C,KAAK,CAACiD,SAAS,CAACY,GAAG,CAACjB,aAAa,CAAC,IAAI,IAAI;AAC1E,EAAA,IAAID,IAAI,KAAK,SAAS,EAAE,OAAO3C,KAAK,CAACkD,QAAQ,CAACW,GAAG,CAACjB,aAAa,CAAC,IAAI,IAAI;AACxE,EAAA,IAAID,IAAI,KAAK,KAAK,EAAE,OAAO3C,KAAK,CAACmD,IAAI,CAACU,GAAG,CAACjB,aAAa,CAAC,IAAI,IAAI;AAChE,EAAA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,YAAYA,CAACnB,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAE4C,aAAa,EAC1D;AACI,EAAA,IAAIiC,QAAQ,EAAExD,IAAI,EAAE,OAAOwD,QAAQ,CAACxD,IAAI;AACxC,EAAA,IAAIsB,IAAI,KAAK,gBAAgB,IAAIC,aAAa,KAAK,CAAC,IAAI5C,KAAK,CAACmF,SAAS,CAACjE,MAAM,EAAE,OAAO,iBAAiB;AACxG,EAAA,OAAO,IAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS8D,aAAaA,CAACrC,IAAI,EAAEkC,QAAQ,EAAE7E,KAAK,EAAE4C,aAAa,EAC3D;EACI,IAAID,IAAI,KAAK,gBAAgB,EAC7B;AACI,IAAA,MAAMyC,iBAAiB,GAAGxC,aAAa,KAAK,CAAC,IAAI5C,KAAK,CAACmF,SAAS,CAACjE,MAAM,GAAG,CAAC;IAC3E,OAAO;MACHkE,iBAAiB;AACjBC,MAAAA,iBAAiB,EAAED,iBAAiB,GAAGpF,KAAK,CAACsF,mBAAmB,GAAG,CAAC;AACpEH,MAAAA,SAAS,EAAEC,iBAAiB,GAAGpF,KAAK,CAACmF,SAAS,CAACrE,GAAG,CAAEZ,KAAK,IAAKA,KAAK,EAAEW,MAAM,IAAI,IAAIX,KAAK,CAAC,GAAG;KAC/F;AACL,EAAA;EACA,OAAO2E,QAAQ,EAAEhE,MAAM,IAAI,IAAIE,SAAS,CAAC8D,QAAQ,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASN,cAAcA,CAACjF,iBAAiB,EAAE+B,IAAI,EAC/C;AACI,EAAA,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,MAAMiD,WAAW,GAAGhF,iBAAiB,CAACgF,WAAW,EAAET,GAAG,CAACxC,IAAI,CAAC,IAAI,EAAE;AAClE,EAAA,OAAOiD,WAAW,CAACxD,GAAG,CAAEZ,KAAK,IAAKA,KAAK,EAAEW,MAAM,IAAI,IAAIX,KAAK,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuE,UAAUA,CAACtD,IAAI,EAAEwB,IAAI,EAAEpC,SAAS,EAAEqC,aAAa,EACxD;EACI,MAAM2C,QAAQ,GAAG5C,IAAI,KAAK,UAAU,GAAG,KAAK,GAAGA,IAAI,KAAK,SAAS,GAAG,SAAS,GAAGA,IAAI,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI;AAC7G,EAAA,IAAI,CAAC4C,QAAQ,EAAE,OAAO,KAAK;AAC3B,EAAA,OAAOpB,OAAO,CAAChD,IAAI,CAACqE,eAAe,EAAEC,SAAS,EAAER,IAAI,CAAE/E,KAAK,IACvDA,KAAK,CAACyC,IAAI,KAAK4C,QAAQ,IAC3BrF,KAAK,CAACK,SAAS,KAAKA,SAAS,IAC7BL,KAAK,CAAC0C,aAAa,KAAKA,aACxB,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS7B,SAASA,CAACY,KAAK,EACxB;AACI,EAAA,IAAI+D,KAAK,CAACC,OAAO,CAAChE,KAAK,CAAC,EAAE,OAAOA,KAAK,CAACb,GAAG,CAACC,SAAS,CAAC;AACrD,EAAA,IAAIY,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EACtC;AACI,IAAA,OAAOiE,MAAM,CAACC,WAAW,CAACD,MAAM,CAACnE,OAAO,CAACE,KAAK,CAAC,CAACb,GAAG,CAAC,CAAC,CAAEY,GAAG,EAAExB,KAAK,CAAE,KAAK,CAAEwB,GAAG,EAAEX,SAAS,CAACb,KAAK,CAAC,CAAE,CAAC,CAAC;AACvG,EAAA;AACA,EAAA,OAAOyB,KAAK;AAChB;;;;"}
|
|
1
|
+
{"version":3,"file":"HlslEffectBindingManifest.js","sources":["../../../../../../../src/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js"],"sourcesContent":["import { HlslRenderContextEnum, hlslShaderStageName } from \"../HlslRenderContextEnum.js\";\n\n/**\n * Carbon-backed binding manifest for register-named shader outputs.\n *\n * This maps generated fallback symbols such as `cb0`, `t3`, `s0`, and `u1`\n * back to the exact stage metadata read from Trinity effect data.\n */\nexport class HlslEffectBindingManifest\n{\n /**\n * Builds a manifest from a loaded `HlslEffectRes`.\n *\n * @param {object} effectRes Loaded effect resource with `GetShader()`.\n * @param {object} [options] Manifest options.\n * @returns {HlslEffectBindingManifest} Carbon binding manifest.\n */\n static fromTr2EffectRes(effectRes, options = {})\n {\n const shader = effectRes.GetShader();\n return HlslEffectBindingManifest.fromEffectDescription(shader.GetEffectDescription(), options);\n }\n\n /**\n * Builds a manifest from a decoded `HlslEffectDescription`.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} [options] Manifest options.\n * @returns {HlslEffectBindingManifest} Carbon binding manifest.\n */\n static fromEffectDescription(effectDescription, options = {})\n {\n return new HlslEffectBindingManifest(effectDescription, options);\n }\n\n /**\n * Creates a binding manifest.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} [options] Manifest options.\n */\n constructor(effectDescription, options = {})\n {\n this.effectName = effectDescription?.effectName || options.effectName || \"\";\n this.version = effectDescription?.version || 0;\n this.passes = buildPasses(effectDescription);\n this.stages = buildStages(effectDescription);\n }\n\n /**\n * Resolves a generated binding symbol for one stage.\n *\n * @param {object} query Stage and symbol query.\n * @param {string} query.techniqueName Technique name.\n * @param {number} query.passIndex Pass index.\n * @param {number} [query.stageType] Trinity stage enum value.\n * @param {string} [query.stageName] Stage name.\n * @param {string} query.symbol Generated symbol such as `cb0` or `t3`.\n * @param {number} [query.registerSpace] Optional D3D register-space disambiguator.\n * @returns {object|null} Matching binding record, or null.\n */\n resolve(query)\n {\n const stage = this.stages.find((entry) =>\n entry.techniqueName === query.techniqueName &&\n entry.passIndex === query.passIndex &&\n (Number.isInteger(query.stageType) ? entry.stageType === query.stageType : entry.stageName === query.stageName)\n );\n if (!stage) return null;\n return stage.bindings.find((entry) =>\n entry.generatedSymbol === query.symbol &&\n (!Number.isInteger(query.registerSpace) || entry.registerSpace === query.registerSpace)\n ) || null;\n }\n\n /**\n * Returns a JSON-safe manifest snapshot.\n *\n * @returns {object} Serializable binding manifest.\n */\n toJSON()\n {\n return {\n effectName: this.effectName,\n version: this.version,\n passes: this.passes.map((entry) => cloneJson(entry)),\n stages: this.stages.map((entry) => cloneJson(entry))\n };\n }\n}\n\n/**\n * Builds pass render-state records from the decoded effect description.\n *\n * @param {object} effectDescription Decoded effect description.\n * @returns {object[]} Pass render-state manifest records.\n */\nfunction buildPasses(effectDescription)\n{\n const passes = [];\n for (const technique of effectDescription?.techniques || [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex += 1)\n {\n const pass = technique.passes[passIndex];\n passes.push({\n techniqueName: technique.name,\n passIndex,\n renderStates: pass.renderStates,\n states: (pass.cjsRenderStateSetup?.entries || []).map(({ key, value }) => ({\n state: key,\n value\n }))\n });\n }\n }\n return passes;\n}\n\n/**\n * Builds all stage records from the decoded effect description.\n *\n * @param {object} effectDescription Decoded effect description.\n * @returns {object[]} Stage binding manifest records.\n */\nfunction buildStages(effectDescription)\n{\n const stages = [];\n for (const technique of effectDescription?.techniques || [])\n {\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex += 1)\n {\n const pass = technique.passes[passIndex];\n for (let stageType = 0; stageType < HlslRenderContextEnum.SHADER_TYPE_COUNT; stageType += 1)\n {\n const stage = pass.stageInputs[stageType];\n if (!stage?.m_exists) continue;\n stages.push(buildStage(effectDescription, technique.name, passIndex, pass, stageType, stage));\n }\n }\n }\n return stages;\n}\n\n/**\n * Builds one stage binding manifest record.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {string} techniqueName Technique name.\n * @param {number} passIndex Pass index.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @returns {object} Stage binding record.\n */\nfunction buildStage(effectDescription, techniqueName, passIndex, pass, stageType, stage)\n{\n const bindings = [];\n const seen = new Set();\n\n for (const register of stage.signature?.registers || [])\n {\n const binding = buildRegisterBinding(effectDescription, pass, stageType, stage, register);\n if (!binding) continue;\n const identity = bindingIdentity(binding.kind, binding.registerSpace, binding.registerIndex);\n if (seen.has(identity)) continue;\n seen.add(identity);\n bindings.push(binding);\n }\n\n addSignatureSamplerBindings(effectDescription, pass, stageType, stage, bindings, seen);\n\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"resource\", \"t\", stage.resources);\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"sampler\", \"s\", stage.samplers);\n addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, \"uav\", \"u\", stage.uavs);\n\n return {\n techniqueName,\n passIndex,\n stageType,\n stageName: hlslShaderStageName(stageType),\n shaderHandle: stage.m_shader,\n shaderBytecode: stage.cjsShaderBytecode?.toJSON?.() ?? stage.cjsShaderBytecode,\n pipelineInputs: cloneJson(stage.signature?.pipelineInputs || []),\n threadGroupSize: cloneJson(stage.signature?.threadGroupSize || null),\n bindings\n };\n}\n\n/**\n * Adds v13+ static samplers, which Carbon stores separately from the general\n * signature register list. In particular, SM 5.1 effects may declare `s0`\n * only in `signature.samplers`.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object[]} bindings Destination bindings.\n * @param {Set<string>} seen Class/space/register identities already added.\n */\nfunction addSignatureSamplerBindings(effectDescription, pass, stageType, stage, bindings, seen)\n{\n for (const sampler of stage.signature?.samplers || [])\n {\n if (!Number.isInteger(sampler?.registerIndex)) continue;\n const registerSpace = Number.isInteger(sampler.registerSpace) ? sampler.registerSpace : stageType;\n const identity = bindingIdentity(\"sampler\", registerSpace, sampler.registerIndex);\n if (seen.has(identity)) continue;\n const mapMetadata = stage.samplers.get(sampler.registerIndex) || null;\n const name = metadataName(\"sampler\", mapMetadata || sampler, stage, sampler.registerIndex);\n bindings.push({\n kind: \"sampler\",\n generatedSymbol: `s${sampler.registerIndex}`,\n registerIndex: sampler.registerIndex,\n registerType: 1,\n registerSpace,\n registerCount: 1,\n arrayCount: 1,\n dynamic: Boolean(mapMetadata?.sampler?.isDynamic),\n metadataName: name,\n carbon: {\n name: mapMetadata?.name || null,\n sampler: cloneJson(sampler.sampler)\n },\n annotations: annotationsFor(effectDescription, name),\n heapView: isHeapView(pass, \"sampler\", stageType, sampler.registerIndex),\n sourceTruth: \"carbon-signature-sampler\"\n });\n seen.add(identity);\n }\n}\n\n/**\n * Builds one binding from a Carbon register declaration.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object} register Carbon register declaration.\n * @returns {object|null} Binding record.\n */\nfunction buildRegisterBinding(effectDescription, pass, stageType, stage, register)\n{\n const classification = classifyRegister(register.registerType);\n if (!classification) return null;\n const metadata = metadataForBinding(stage, classification.kind, register.registerIndex);\n const generatedSymbol = `${classification.prefix}${register.registerIndex}`;\n return {\n kind: classification.kind,\n generatedSymbol,\n registerIndex: register.registerIndex,\n registerType: register.registerType,\n registerSpace: register.registerSpace,\n registerCount: register.registerCount,\n arrayCount: register.arrayCount,\n dynamic: Boolean(register.dynamic),\n metadataName: metadataName(classification.kind, metadata, stage, register.registerIndex),\n carbon: carbonPayload(classification.kind, metadata, stage, register.registerIndex),\n annotations: annotationsFor(effectDescription, metadataName(classification.kind, metadata, stage, register.registerIndex)),\n heapView: isHeapView(pass, classification.kind, stageType, register.registerIndex),\n sourceTruth: \"carbon-stage-register\"\n };\n}\n\n/**\n * Adds bindings found in Carbon maps but absent from the signature register list.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {object} pass Pass metadata.\n * @param {number} stageType Stage enum value.\n * @param {object} stage Stage input metadata.\n * @param {object[]} bindings Destination bindings.\n * @param {Set<string>} seen Generated symbols already added.\n * @param {string} kind Binding kind.\n * @param {string} prefix Generated symbol prefix.\n * @param {Map<number, object>} map Carbon register map.\n */\nfunction addMapBindings(effectDescription, pass, stageType, stage, bindings, seen, kind, prefix, map)\n{\n for (const [ registerIndex, metadata ] of map.entries())\n {\n // Carbon register maps do not carry a register space. When an exact\n // signature source already names this class/index, it wins regardless\n // of space; treating stageType as an additional exact space would\n // manufacture duplicate SM 5.1 bindings.\n if (bindings.some((entry) => entry.kind === kind && entry.registerIndex === registerIndex)) continue;\n const registerSpace = stageType;\n const identity = bindingIdentity(kind, registerSpace, registerIndex);\n const generatedSymbol = `${prefix}${registerIndex}`;\n if (seen.has(identity)) continue;\n bindings.push({\n kind,\n generatedSymbol,\n registerIndex,\n registerType: null,\n registerSpace,\n registerCount: metadata?.arrayElements || 1,\n arrayCount: metadata?.arrayElements || 1,\n dynamic: true,\n metadataName: metadataName(kind, metadata, stage, registerIndex),\n carbon: carbonPayload(kind, metadata, stage, registerIndex),\n annotations: annotationsFor(effectDescription, metadataName(kind, metadata, stage, registerIndex)),\n heapView: isHeapView(pass, kind, stageType, registerIndex),\n sourceTruth: \"carbon-register-map\"\n });\n seen.add(identity);\n }\n}\n\n/**\n * Builds a class-aware identity for one D3D register binding.\n *\n * @param {string} kind Binding class.\n * @param {number} registerSpace D3D register space.\n * @param {number} registerIndex D3D register index.\n * @returns {string} Stable identity.\n */\nfunction bindingIdentity(kind, registerSpace, registerIndex)\n{\n return `${kind}:${registerSpace}:${registerIndex}`;\n}\n\n/**\n * Classifies a Carbon register type into generated-symbol kind.\n *\n * @param {number} registerType Carbon register type.\n * @returns {{kind:string,prefix:string}|null} Binding classification.\n */\nfunction classifyRegister(registerType)\n{\n if (registerType === 0) return { kind: \"constantBuffer\", prefix: \"cb\" };\n if (registerType === 1) return { kind: \"sampler\", prefix: \"s\" };\n if (registerType >= 32 && registerType <= 63) return { kind: \"resource\", prefix: \"t\" };\n if (registerType >= 64 && registerType <= 95) return { kind: \"uav\", prefix: \"u\" };\n return null;\n}\n\n/**\n * Gets register metadata for a classified binding.\n *\n * @param {object} stage Stage input metadata.\n * @param {string} kind Binding kind.\n * @param {number} registerIndex Register index.\n * @returns {object|null} Carbon metadata object.\n */\nfunction metadataForBinding(stage, kind, registerIndex)\n{\n if (kind === \"resource\") return stage.resources.get(registerIndex) || null;\n if (kind === \"sampler\") return stage.samplers.get(registerIndex) || null;\n if (kind === \"uav\") return stage.uavs.get(registerIndex) || null;\n return null;\n}\n\n/**\n * Gets the best Carbon metadata name for one binding.\n *\n * @param {string} kind Binding kind.\n * @param {object|null} metadata Carbon metadata object.\n * @param {object} stage Stage input metadata.\n * @param {number} registerIndex Register index.\n * @returns {string|null} Metadata name.\n */\nfunction metadataName(kind, metadata, stage, registerIndex)\n{\n if (metadata?.name) return metadata.name;\n if (kind === \"constantBuffer\" && registerIndex === 0 && stage.constants.length) return \"$LocalConstants\";\n return null;\n}\n\n/**\n * Builds the Carbon metadata payload for one binding.\n *\n * @param {string} kind Binding kind.\n * @param {object|null} metadata Carbon metadata object.\n * @param {object} stage Stage input metadata.\n * @param {number} registerIndex Register index.\n * @returns {object|null} JSON-safe Carbon payload.\n */\nfunction carbonPayload(kind, metadata, stage, registerIndex)\n{\n if (kind === \"constantBuffer\")\n {\n const hasLocalConstants = registerIndex === 0 && stage.constants.length > 0;\n return {\n hasLocalConstants,\n constantValueSize: hasLocalConstants ? stage.m_constantValueSize : 0,\n constants: hasLocalConstants ? stage.constants.map((entry) => entry?.toJSON?.() ?? entry) : [],\n // The exact authored default bytes for the stage's local constant\n // buffer. A consumer that zero-fills instead of using these\n // changes every authored default the scene does not override -\n // the effect-resource contract calls the bytes mandatory, and a\n // background effect whose Tint and intensity read zero renders\n // pure black while drawing \"correctly\".\n constantValues: hasLocalConstants && stage.constantValues ? Array.from(stage.constantValues) : []\n };\n }\n return metadata?.toJSON?.() ?? cloneJson(metadata);\n}\n\n/**\n * Gets top-level annotations for a named parameter.\n *\n * @param {object} effectDescription Decoded effect description.\n * @param {string|null} name Parameter name.\n * @returns {object[]} JSON-safe annotations.\n */\nfunction annotationsFor(effectDescription, name)\n{\n if (!name) return [];\n const annotations = effectDescription.annotations?.get(name) || [];\n return annotations.map((entry) => entry?.toJSON?.() ?? entry);\n}\n\n/**\n * Checks whether a binding is marked as a heap view in the resource-set description.\n *\n * @param {object} pass Pass metadata.\n * @param {string} kind Binding kind.\n * @param {number} stageType Stage enum value.\n * @param {number} registerIndex Register index.\n * @returns {boolean} True when the binding is a heap view.\n */\nfunction isHeapView(pass, kind, stageType, registerIndex)\n{\n const heapKind = kind === \"resource\" ? \"srv\" : kind === \"sampler\" ? \"sampler\" : kind === \"uav\" ? \"uav\" : null;\n if (!heapKind) return false;\n return Boolean(pass.resourceSetDesc?.heapViews?.some((entry) =>\n entry.kind === heapKind &&\n entry.stageType === stageType &&\n entry.registerIndex === registerIndex\n ));\n}\n\n/**\n * Deep-clones JSON-like values.\n *\n * @param {*} value Value to clone.\n * @returns {*} JSON-like clone.\n */\nfunction cloneJson(value)\n{\n if (Array.isArray(value)) return value.map(cloneJson);\n if (value && typeof value === \"object\")\n {\n return Object.fromEntries(Object.entries(value).map(([ key, entry ]) => [ key, cloneJson(entry) ]));\n }\n return value;\n}\n"],"names":["HlslEffectBindingManifest","fromTr2EffectRes","effectRes","options","shader","GetShader","fromEffectDescription","GetEffectDescription","effectDescription","constructor","effectName","version","passes","buildPasses","stages","buildStages","resolve","query","stage","find","entry","techniqueName","passIndex","Number","isInteger","stageType","stageName","bindings","generatedSymbol","symbol","registerSpace","toJSON","map","cloneJson","technique","techniques","length","pass","push","name","renderStates","states","cjsRenderStateSetup","entries","key","value","state","HlslRenderContextEnum","SHADER_TYPE_COUNT","stageInputs","m_exists","buildStage","seen","Set","register","signature","registers","binding","buildRegisterBinding","identity","bindingIdentity","kind","registerIndex","has","add","addSignatureSamplerBindings","addMapBindings","resources","samplers","uavs","hlslShaderStageName","shaderHandle","m_shader","shaderBytecode","cjsShaderBytecode","pipelineInputs","threadGroupSize","sampler","mapMetadata","get","metadataName","registerType","registerCount","arrayCount","dynamic","Boolean","isDynamic","carbon","annotations","annotationsFor","heapView","isHeapView","sourceTruth","classification","classifyRegister","metadata","metadataForBinding","prefix","carbonPayload","some","arrayElements","constants","hasLocalConstants","constantValueSize","m_constantValueSize","constantValues","Array","from","heapKind","resourceSetDesc","heapViews","isArray","Object","fromEntries"],"mappings":"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"}
|