@carbonenginejs/runtime-resource 0.10.0 → 0.11.1
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/dist/format/effect/effectPermutationGraph.js +257 -0
- package/dist/format/effect/effectPermutationGraph.js.map +1 -0
- package/dist/format/effect/effectReflectionPackage.js +636 -0
- package/dist/format/effect/effectReflectionPackage.js.map +1 -0
- package/dist/format/effect/sha256.js +114 -0
- package/dist/format/effect/sha256.js.map +1 -0
- package/dist/formats/dxbc/CjsDxbcFormat.js +142 -0
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -0
- package/dist/formats/dxbc/core/DxbcReader.js +266 -0
- package/dist/formats/dxbc/core/DxbcReader.js.map +1 -0
- package/dist/formats/dxbc/core/container.js +169 -0
- package/dist/formats/dxbc/core/container.js.map +1 -0
- package/dist/formats/dxbc/core/decoder.js +789 -0
- package/dist/formats/dxbc/core/decoder.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -0
- package/dist/formats/dxbc/core/errors.js.map +1 -0
- package/dist/formats/dxbc/core/helpers.js +220 -0
- package/dist/formats/dxbc/core/helpers.js.map +1 -0
- package/dist/formats/dxbc/core/opcodes.js +45 -0
- package/dist/formats/dxbc/core/opcodes.js.map +1 -0
- package/dist/formats/dxbc/core/program.js +91 -0
- package/dist/formats/dxbc/core/program.js.map +1 -0
- package/dist/formats/dxbc/core/signature.js +172 -0
- package/dist/formats/dxbc/core/signature.js.map +1 -0
- package/dist/formats/dxbc/index.js +2 -0
- package/dist/formats/dxbc/index.js.map +1 -0
- package/dist/formats/hlsl/CjsHlslFormat.js +254 -0
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -0
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -0
- package/dist/formats/hlsl/core/HlslBinaryUtils.js.map +1 -0
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -0
- package/dist/formats/hlsl/core/HlslEffectReadError.js.map +1 -0
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -0
- package/dist/formats/hlsl/core/HlslEffectStateManager.js.map +1 -0
- package/dist/formats/hlsl/core/HlslReader.js +266 -0
- package/dist/formats/hlsl/core/HlslReader.js.map +1 -0
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -0
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js.map +1 -0
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -0
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js.map +1 -0
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -0
- package/dist/formats/hlsl/core/HlslShaderBytecode.js.map +1 -0
- package/dist/formats/hlsl/core/analysis.js +51 -0
- package/dist/formats/hlsl/core/analysis.js.map +1 -0
- package/dist/formats/hlsl/core/helpers.js +270 -0
- package/dist/formats/hlsl/core/helpers.js.map +1 -0
- package/dist/formats/hlsl/core/json.js +284 -0
- package/dist/formats/hlsl/core/json.js.map +1 -0
- package/dist/formats/hlsl/core/metadata.js +327 -0
- package/dist/formats/hlsl/core/metadata.js.map +1 -0
- package/dist/formats/hlsl/core/portableReflection.js +848 -0
- package/dist/formats/hlsl/core/portableReflection.js.map +1 -0
- package/dist/formats/hlsl/core/render-states.js +280 -0
- package/dist/formats/hlsl/core/render-states.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -0
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +294 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -0
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +742 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js.map +1 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -0
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js.map +1 -0
- package/dist/formats/hlsl/index.js +2 -0
- package/dist/formats/hlsl/index.js.map +1 -0
- package/dist/formats/hlsl/portable.js +2 -0
- package/dist/formats/hlsl/portable.js.map +1 -0
- package/dist/formats/index.js +4 -0
- package/dist/formats/index.js.map +1 -1
- package/dist/formats/webgl/CjsWebglFormat.js +221 -0
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -0
- package/dist/formats/webgl/core/cewg/CewgPackage.js +339 -0
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +1 -0
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +104 -0
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +1 -0
- package/dist/formats/webgl/core/cewg/binary.js +101 -0
- package/dist/formats/webgl/core/cewg/binary.js.map +1 -0
- package/dist/formats/webgl/core/cewgCompleteness.js +81 -0
- package/dist/formats/webgl/core/cewgCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +789 -0
- package/dist/formats/webgl/core/effectPackage.js.map +1 -0
- package/dist/formats/webgl/core/effectPackageValidation.js +331 -0
- package/dist/formats/webgl/core/effectPackageValidation.js.map +1 -0
- package/dist/formats/webgl/core/errors.js +27 -0
- package/dist/formats/webgl/core/errors.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2678 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +1 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +428 -0
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +306 -0
- package/dist/formats/webgl/core/helpers.js.map +1 -0
- package/dist/formats/webgl/index.js +2 -0
- package/dist/formats/webgl/index.js.map +1 -0
- package/dist/formats/webgpu/CjsWebgpuFormat.js +376 -0
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js +415 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackage.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js +100 -0
- package/dist/formats/webgpu/core/cewgpu/CewgpuPackageBuilder.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/binary.js +93 -0
- package/dist/formats/webgpu/core/cewgpu/binary.js.map +1 -0
- package/dist/formats/webgpu/core/cewgpu/tags.js +17 -0
- package/dist/formats/webgpu/core/cewgpu/tags.js.map +1 -0
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -0
- package/dist/formats/webgpu/core/effectAnalysis.js.map +1 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js +305 -0
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -0
- package/dist/formats/webgpu/core/effectPackageValidation.js +1078 -0
- package/dist/formats/webgpu/core/effectPackageValidation.js.map +1 -0
- package/dist/formats/webgpu/core/errors.js +20 -0
- package/dist/formats/webgpu/core/errors.js.map +1 -0
- package/dist/formats/webgpu/core/helpers.js +448 -0
- package/dist/formats/webgpu/core/helpers.js.map +1 -0
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +223 -0
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js.map +1 -0
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -0
- package/dist/formats/webgpu/core/ir/buildControlFlow.js.map +1 -0
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -0
- package/dist/formats/webgpu/core/ir/indexableTemps.js.map +1 -0
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +454 -0
- package/dist/formats/webgpu/core/ir/inferValueTypes.js.map +1 -0
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -0
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -0
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -0
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js.map +1 -0
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -0
- package/dist/formats/webgpu/core/ir/sourceLanes.js.map +1 -0
- package/dist/formats/webgpu/core/packageEffect.js +300 -0
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -0
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -0
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -0
- package/dist/formats/webgpu/core/packageMetadata.js +8 -0
- package/dist/formats/webgpu/core/packageMetadata.js.map +1 -0
- package/dist/formats/webgpu/core/schema.js +4 -0
- package/dist/formats/webgpu/core/schema.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +275 -0
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +182 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +324 -0
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -0
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -0
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -0
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +754 -0
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -0
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -0
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -0
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -0
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -0
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -0
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -0
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -0
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -0
- package/dist/formats/webgpu/core/wgsl/precisionControls.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +758 -0
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -0
- package/dist/formats/webgpu/core/wgsl/uniformity.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -0
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js.map +1 -0
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -0
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js.map +1 -0
- package/dist/formats/webgpu/index.js +2 -0
- package/dist/formats/webgpu/index.js.map +1 -0
- package/dist/resource/shader/Tr2EffectRes.js +159 -150
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialArea.js +23 -28
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialMesh.js +21 -27
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -1
- package/dist/resource/shader/Tr2MaterialRes.js +24 -29
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -1
- package/dist/resource/shader/Tr2Shader.js +45 -39
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/Tr2ShaderPermutation.js +30 -32
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +113 -78
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +17 -23
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +23 -29
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +44 -40
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +82 -86
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +55 -61
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +49 -45
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +25 -30
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +30 -32
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +21 -26
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- package/docs/formats/README.md +4 -0
- package/docs/formats/provenance.md +11 -3
- package/docs/reference/classes/formats.md +440 -0
- package/format-notices/dxbc/LICENSE +21 -0
- package/format-notices/dxbc/NOTICE +20 -0
- package/format-notices/hlsl/LICENSE +21 -0
- package/format-notices/hlsl/NOTICE +25 -0
- package/format-notices/webgl/LICENSE +21 -0
- package/format-notices/webgl/NOTICE +35 -0
- package/format-notices/webgpu/LICENSE +21 -0
- package/format-notices/webgpu/NOTICE +31 -0
- package/package.json +6 -1
- package/dist/resource/shader/portableValidation.js +0 -461
- package/dist/resource/shader/portableValidation.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectPackage.js","sources":["../../../../../src/formats/webgl/core/effectPackage.js"],"sourcesContent":["import { EFFECT_INFO_VERSION } from \"./effectPackageValidation.js\";\nimport { CjsHlslFormat } from \"../../hlsl/index.js\";\nimport { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\nimport { HlslRenderContextEnum, hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\n\nimport {\n buildEffectPermutationGraph,\n EFFECT_PERMUTATION_GRAPH_CHUNK,\n EFFECT_PERMUTATION_GRAPH_FORMAT,\n EFFECT_PERMUTATION_GRAPH_VERSION\n} from \"../../../format/effect/effectPermutationGraph.js\";\nimport {\n buildCompleteEffectReflection,\n EFFECT_REFLECTION_BLOB_CHUNK,\n EFFECT_REFLECTION_CHUNK\n} from \"../../../format/effect/effectReflectionPackage.js\";\nimport { buildPackage, emitGlslWithOptions, inspectWithValues } from \"./helpers.js\";\nimport { sha256Bytes, sha256Utf8 } from \"../../../format/effect/sha256.js\";\n\nconst PACKAGE_VERSION = \"0.11.1\";\n\n/**\n * Builds a complete CEWG package from compiled Tr2 effect bytes.\n *\n * This browser-safe path owns whole-effect selection, stage translation,\n * package assembly, and structural qualification. Filesystem and native-tool\n * concerns remain in Node callers.\n *\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView} input Compiled effect bytes.\n * @param {object} [options] Selection, provenance, and emitter policy.\n * @returns {object} Package bytes plus inspection and qualification records.\n */\nexport function buildEffectPackage(input, options = {})\n{\n const values = normalizeOptions(input, options);\n const effectRes = CjsHlslFormat.read(values.sourceBytes, {\n emit: CjsHlslFormat.OUTPUT_RAW,\n source: values.source\n });\n\n if (!effectRes.IsGood())\n {\n throw effectRes.loadError || new Error(\"Tr2EffectRes failed to load input\");\n }\n\n const sourceIdentity = normalizeSourceIdentity(values);\n // One INFO version means one contract, and that contract requires complete\n // source reflection, which only version-15 input can supply.\n if (effectRes.m_version !== 15)\n {\n throw new Error(\n \"Effect package requires a version-15 compiled effect, got version \"\n + (effectRes.m_version ?? \"unknown\")\n );\n }\n\n const permutationGraph = buildEffectPermutationGraph(effectRes);\n const reflectionPackage = effectRes.m_version === 15\n ? buildCompleteEffectReflection(\n effectRes,\n permutationGraph,\n {\n sourceIdentity,\n sourcePath: values.source\n }\n )\n : null;\n const variants = buildExportVariants(effectRes, values.allPermutations);\n const bodyMap = new Map();\n const stageMap = new Map();\n const shaderMap = new Map();\n\n for (const variant of variants)\n {\n if (bodyMap.has(variant.bodyKey))\n {\n continue;\n }\n\n const shader = effectRes.GetShader(toShaderOptions(variant.options));\n\n if (!shader)\n {\n bodyMap.set(variant.bodyKey, {\n key: variant.bodyKey,\n bodyOffset: variant.bodyOffset,\n bodySize: variant.bodySize,\n firstVariantKey: variant.key,\n error: \"Tr2EffectRes.GetShader returned null\",\n manifest: null,\n stages: []\n });\n continue;\n }\n\n const effectDescription = shader.GetEffectDescription();\n const manifest = HlslEffectBindingManifest.fromEffectDescription(effectDescription);\n const collection = collectStages(effectDescription, values.selection);\n const body = {\n key: variant.bodyKey,\n bodyOffset: variant.bodyOffset,\n bodySize: variant.bodySize,\n firstVariantKey: variant.key,\n error: collection.errors.length ? collection.errors.join(\"; \") : null,\n manifest: manifest.toJSON(),\n stages: []\n };\n\n for (const stage of collection.stages)\n {\n const stageKey = `${variant.bodyKey}.${stage.key}`;\n const shaderKey = `shader_${stageKey}`;\n const contract = buildStageContract(stage);\n const stageRecord = {\n key: stageKey,\n bodyKey: variant.bodyKey,\n localKey: stage.key,\n techniqueName: stage.techniqueName,\n passIndex: stage.passIndex,\n stageType: stage.stageType,\n stageName: stage.stageName,\n shaderHandle: stage.shaderHandle,\n shaderSize: stage.bytecode.shaderSize,\n stringTableOffset: stage.bytecode.stringTableOffset,\n shaderKey,\n contract\n };\n\n stageMap.set(stageKey, stageRecord);\n body.stages.push(stageKey);\n shaderMap.set(shaderKey, {\n key: shaderKey,\n firstStageKey: stageKey,\n firstBodyKey: variant.bodyKey,\n stageName: stage.stageName,\n shaderSize: stage.bytecode.shaderSize,\n stringTableOffset: stage.bytecode.stringTableOffset,\n bytes: stage.bytecode.bytes,\n contracts: [ {\n stageKey,\n techniqueName: stage.techniqueName,\n passIndex: stage.passIndex,\n stageName: stage.stageName,\n contract\n } ]\n });\n }\n\n bodyMap.set(variant.bodyKey, body);\n }\n\n translateStages(shaderMap, stageMap, values);\n\n const bodies = Array.from(bodyMap.values());\n const stages = Array.from(stageMap.values());\n const translatedShaders = Array.from(shaderMap.values()).map((record) =>\n {\n const { bytes, emit, ...output } = record;\n\n output.primaryContract = mergeShaderContracts(output.contracts);\n return output;\n });\n const failedShaders = translatedShaders.filter((record) =>\n !record.hlsl2webgl?.ok && !record.excluded);\n const excludedShaders = translatedShaders.filter((record) => record.excluded);\n const failedBodies = bodies.filter((body) => body.error);\n const rasterCompleteness = inspectRasterCompleteness(stages, translatedShaders);\n const availableShaderCount = translatedShaders.filter((record) =>\n record.hlsl2webgl?.ok && record.source).length;\n const info = {\n format: \"CEWG\",\n formatVersion: EFFECT_INFO_VERSION,\n packageKind: values.allPermutations\n ? \"tr2-effect-webgl-permutations\"\n : \"tr2-effect-webgl\",\n targetBackend: \"webgl\",\n backendPackage: \"@carbonenginejs/runtime-resource/formats/webgl\",\n backendPackageVersion: PACKAGE_VERSION,\n generatedAt: values.generatedAt,\n sourcePath: values.source,\n outputPath: values.outputPath,\n sourceByteLength: sourceIdentity.byteLength,\n sourceMd5: sourceIdentity.md5,\n sourceSha256: sourceIdentity.sha256,\n sourceIdentity,\n translator: \"dxbc-js-emitter\",\n translatorVersion: PACKAGE_VERSION,\n language: \"es300\",\n flags: null,\n selection: values.selection,\n permutationMode: values.allPermutations ? \"all\" : \"selected\",\n defaultPermutationIndex: defaultPermutationIndex(effectRes.m_permutations),\n sourceEffectVersion: effectRes.m_version,\n ...(reflectionPackage ? {\n sourceBodyCoverage: \"all-unique\",\n backendBodyCoverage: values.allPermutations ? \"all\" : \"selected\",\n backendProgramCoverage: selectionCoversWholeEffect(values.selection)\n ? \"all-stages\"\n : \"filtered\"\n } : {}),\n permutationCount: variants.length,\n uniqueBodyCount: bodies.length,\n sourcePermutationCount: permutationGraph.variants.length,\n sourceUniqueBodyCount: permutationGraph.bodies.length,\n permutationGraph: {\n chunk: EFFECT_PERMUTATION_GRAPH_CHUNK,\n format: EFFECT_PERMUTATION_GRAPH_FORMAT,\n formatVersion: EFFECT_PERMUTATION_GRAPH_VERSION,\n sha256: sha256Utf8(`${JSON.stringify(permutationGraph)}\\n`),\n permutationCount: permutationGraph.variants.length,\n uniqueBodyCount: permutationGraph.bodies.length\n },\n ...(reflectionPackage\n ? { effectReflection: reflectionPackage.pointer }\n : {}),\n bodyStageCount: stages.length,\n uniqueShaderCount: translatedShaders.length,\n translatedShaderCount: translatedShaders.length - failedShaders.length - excludedShaders.length,\n excludedShaderCount: excludedShaders.length,\n failedShaderCount: failedShaders.length,\n failedBodyCount: failedBodies.length,\n expectedRasterPassCount: rasterCompleteness.expectedPassCount,\n completeRasterPassCount: rasterCompleteness.completePassCount,\n incompleteRasterPassCount: rasterCompleteness.incompletePasses.length,\n availableShaderCount,\n allowFailures: values.allowFailures,\n completeness: {\n packageValid: true,\n sourceComplete: reflectionPackage !== null,\n backendComplete: false,\n runtimeComplete: false\n }\n };\n const metadata = {\n generatedAt: values.generatedAt,\n sourcePath: values.source,\n effectResource: effectRes.toJSON(),\n permutations: effectRes.GetPermutationDescription(),\n variants,\n bodies: bodies.map((body) => ({\n key: body.key,\n bodyOffset: body.bodyOffset,\n bodySize: body.bodySize,\n firstVariantKey: body.firstVariantKey,\n error: body.error,\n manifest: body.manifest\n }))\n };\n const glsl = {\n format: \"CEWG_GLSL_SET\",\n formatVersion: 1,\n language: \"es300\",\n permutationMode: info.permutationMode,\n selection: values.selection,\n variants: variants.map((variant) => ({\n key: variant.key,\n permutationIndex: variant.permutationIndex,\n bodyKey: variant.bodyKey\n })),\n bodies: bodies.map((body) => ({\n key: body.key,\n error: body.error,\n stages: body.stages\n })),\n stages,\n shaders: translatedShaders\n };\n const qualification = qualifyEffectPackage({\n info,\n metadata,\n glsl,\n failedShaders,\n excludedShaders,\n failedBodies,\n rasterCompleteness,\n availableShaderCount\n });\n if (!qualification.ok && !values.allowFailures)\n {\n throw new Error(\n `CEWG target is incomplete; output was not built. ${qualification.errors.join(\"; \")}`\n );\n }\n\n const chunks = [\n [ \"INFO\", info ],\n [ \"META\", metadata ],\n [ EFFECT_PERMUTATION_GRAPH_CHUNK, permutationGraph ],\n ...(reflectionPackage\n ? [\n [ EFFECT_REFLECTION_CHUNK, reflectionPackage.reflection ],\n [ EFFECT_REFLECTION_BLOB_CHUNK, reflectionPackage.blobBytes ]\n ]\n : []),\n [ \"GLSL\", glsl ]\n ];\n\n if (values.includeSourceEffect)\n {\n chunks.push([ \"TR2E\", values.sourceBytes ]);\n }\n\n const bytes = buildPackage(chunks);\n const inspection = inspectWithValues(bytes, {\n emit: \"json\",\n source: values.source\n });\n\n return Object.freeze({\n bytes,\n info: Object.freeze(info),\n metadata: Object.freeze(metadata),\n permutationGraph,\n reflection: reflectionPackage?.reflection ?? null,\n reflectionBlobs: reflectionPackage?.blobBytes ?? null,\n glsl: Object.freeze(glsl),\n inspection: Object.freeze(inspection),\n qualification: Object.freeze(qualification)\n });\n}\n\nfunction normalizeOptions(input, options)\n{\n if (!options || typeof options !== \"object\" || Array.isArray(options))\n {\n throw new TypeError(\"CEWG effect options must be an object\");\n }\n\n const sourceBytes = toBytes(input);\n const source = String(options.source ?? \"memory\").trim() || \"memory\";\n const selection = Object.freeze({\n technique: options.technique === undefined || options.technique === null\n ? null\n : String(options.technique),\n pass: options.pass === undefined || options.pass === null ? null : Number(options.pass),\n stage: options.stage === undefined || options.stage === null\n ? null\n : String(options.stage).toLowerCase()\n });\n\n if (selection.pass !== null\n && (!Number.isSafeInteger(selection.pass) || selection.pass < 0))\n {\n throw new TypeError(\"CEWG effect pass must be a non-negative integer or null\");\n }\n\n if (selection.stage !== null\n && ![ \"vertex\", \"pixel\", \"compute\" ].includes(selection.stage))\n {\n throw new TypeError(`Unsupported CEWG effect stage: ${selection.stage}`);\n }\n\n if (options.emitterOptions !== undefined\n && (!options.emitterOptions || typeof options.emitterOptions !== \"object\"\n || Array.isArray(options.emitterOptions)))\n {\n throw new TypeError(\"CEWG emitterOptions must be an object\");\n }\n\n return {\n sourceBytes,\n source,\n outputPath: normalizeOptionalString(options.outputPath, \"CEWG outputPath\"),\n sourceIdentity: options.sourceIdentity ?? null,\n generatedAt: options.generatedAt === undefined || options.generatedAt === null\n ? null\n : new Date(options.generatedAt).toISOString(),\n allPermutations: options.allPermutations !== false,\n allowFailures: options.allowFailures === true,\n includeSourceEffect: options.includeSourceEffect === true,\n selection,\n emitterOptions: { ...(options.emitterOptions ?? {}) }\n };\n}\n\nfunction normalizeOptionalString(value, name)\n{\n if (value === undefined || value === null)\n {\n return null;\n }\n\n const result = String(value).trim();\n\n if (!result)\n {\n throw new TypeError(`${name} must be a non-empty string or null`);\n }\n\n return result;\n}\n\nfunction selectionCoversWholeEffect(selection)\n{\n return selection.technique === null\n && selection.pass === null\n && selection.stage === null;\n}\n\nfunction toBytes(input)\n{\n if (input instanceof Uint8Array)\n {\n return input;\n }\n\n if (input instanceof ArrayBuffer)\n {\n return new Uint8Array(input);\n }\n\n if (ArrayBuffer.isView(input))\n {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n\n throw new TypeError(\"CEWG effect input must be Uint8Array, ArrayBuffer, or ArrayBufferView bytes\");\n}\n\nfunction defaultPermutationIndex(permutations)\n{\n let multiplier = 1;\n let index = 0;\n\n for (const permutation of permutations)\n {\n index += (permutation.defaultOption || 0) * multiplier;\n multiplier *= permutation.options.length || 1;\n }\n\n return index;\n}\n\nfunction bodyKey(record)\n{\n return `body_${record.offset}_${record.size}`;\n}\n\nfunction decodePermutationOptions(permutations, permutationIndex)\n{\n let remaining = permutationIndex;\n\n return permutations.map((permutation) =>\n {\n const optionCount = permutation.options.length || 1;\n const optionIndex = optionCount ? remaining % optionCount : 0;\n\n remaining = Math.floor(remaining / optionCount);\n return {\n name: permutation.name,\n value: permutation.options[optionIndex] || \"\",\n optionIndex,\n defaultOption: permutation.defaultOption\n };\n });\n}\n\nfunction toShaderOptions(options)\n{\n return options.map((option) => ({ name: option.name, value: option.value }));\n}\n\nfunction buildExportVariants(effectRes, allPermutations)\n{\n if (allPermutations)\n {\n return effectRes.m_offsets.map((record, variantIndex) =>\n {\n const permutationIndex = Number.isInteger(record.index)\n ? record.index\n : variantIndex;\n\n return {\n key: `variant_${permutationIndex}`,\n variantIndex,\n permutationIndex,\n tableIndex: variantIndex,\n bodyKey: bodyKey(record),\n bodyOffset: record.offset,\n bodySize: record.size,\n options: decodePermutationOptions(\n effectRes.m_permutations,\n permutationIndex\n ),\n tableIndexMatchesPermutationIndex:\n variantIndex === permutationIndex\n };\n });\n }\n\n const permutationIndex = defaultPermutationIndex(effectRes.m_permutations);\n const record = effectRes.m_offsets[permutationIndex];\n\n if (!record)\n {\n throw new Error(`Default permutation index ${permutationIndex} is not present`);\n }\n\n return [ {\n key: `variant_${permutationIndex}`,\n variantIndex: permutationIndex,\n permutationIndex,\n tableIndex: permutationIndex,\n bodyKey: bodyKey(record),\n bodyOffset: record.offset,\n bodySize: record.size,\n options: decodePermutationOptions(effectRes.m_permutations, permutationIndex),\n tableIndexMatchesPermutationIndex: Number.isInteger(record.index)\n ? record.index === permutationIndex\n : true\n } ];\n}\n\nfunction collectStages(effectDescription, selection)\n{\n const stages = [];\n const errors = [];\n\n for (const technique of effectDescription.techniques ?? [])\n {\n if (selection.technique && technique.name !== selection.technique)\n {\n continue;\n }\n\n if (!selection.stage && !Number.isInteger(selection.pass)\n && technique.passes.length === 0)\n {\n errors.push(`${technique.name} declares no passes`);\n }\n\n for (let passIndex = 0; passIndex < technique.passes.length; passIndex++)\n {\n if (Number.isInteger(selection.pass) && passIndex !== selection.pass)\n {\n continue;\n }\n\n const pass = technique.passes[passIndex];\n let declaredStageCount = 0;\n\n for (let stageType = 0;\n stageType < HlslRenderContextEnum.SHADER_TYPE_COUNT;\n stageType++)\n {\n const stageInput = pass.stageInputs[stageType];\n\n if (!stageInput?.m_exists)\n {\n continue;\n }\n\n declaredStageCount++;\n const stageName = hlslShaderStageName(stageType);\n\n if (selection.stage && stageName !== selection.stage)\n {\n continue;\n }\n\n if (!stageInput.cjsShaderBytecode)\n {\n errors.push(\n `${technique.name}.pass${passIndex}.${stageName} declares shader handle `\n + `${stageInput.m_shader ?? \"unknown\"} but has no shader bytecode`\n );\n continue;\n }\n\n stages.push({\n key: `${technique.name}.pass${passIndex}.${stageName}`,\n techniqueName: technique.name,\n passIndex,\n stageType,\n stageName,\n shaderHandle: stageInput.m_shader,\n bytecode: stageInput.cjsShaderBytecode,\n pipelineInputs: cloneJson(stageInput.signature?.pipelineInputs ?? []),\n registers: cloneJson(stageInput.signature?.registers ?? []),\n resources: mapToJson(stageInput.resources),\n samplers: mapToJson(stageInput.samplers),\n uavs: mapToJson(stageInput.uavs),\n constants: cloneJson(stageInput.constants ?? [])\n });\n }\n\n if (!selection.stage && declaredStageCount === 0)\n {\n errors.push(`${technique.name}.pass${passIndex} declares no shader stages`);\n }\n }\n }\n\n return { stages, errors };\n}\n\nfunction translateStages(shaderMap, stageMap, values)\n{\n const emitInto = (record, pairVaryings) =>\n {\n try\n {\n const result = emitGlslWithOptions(record.bytes, {\n ...values.emitterOptions,\n source: `${values.source}#${record.firstStageKey}`,\n ...(pairVaryings?.length ? { pairVaryings } : {})\n });\n const stageInterface = normalizeBitangentStageInterface(\n result,\n record\n );\n\n record.emit = {\n ...result,\n source: stageInterface.source,\n inputs: stageInterface.inputs\n };\n record.source = stageInterface.source;\n record.bindings = result.bindings;\n record.stageInputs = stageInterface.inputs;\n record.stageOutputs = result.outputs;\n record.emitWarnings = result.warnings;\n record.translator = \"dxbc-js-emitter\";\n record.hlsl2webgl = { ok: true, mode: \"js-emitter\" };\n\n if (result.stageName === \"compute\")\n {\n record.computeFragment = result.computeFragment;\n }\n\n const issue = validateStageSourceShape(record);\n\n if (issue)\n {\n record.hlsl2webgl = { ok: false, validationError: issue };\n record.source = null;\n }\n }\n catch (error)\n {\n const message = error?.message || String(error);\n\n record.hlsl2webgl = {\n ok: false,\n error: message,\n details: error?.details ?? null\n };\n\n if (/not supported|No GLSL lowering|unimplementable/iu.test(message))\n {\n record.excluded = {\n reason: message,\n ...(error?.details?.opcodeName\n ? { opcodeName: error.details.opcodeName }\n : {}),\n ...(error?.details?.dimensionName\n ? { dimensionName: error.details.dimensionName }\n : {})\n };\n }\n }\n };\n\n for (const record of shaderMap.values())\n {\n if (record.stageName !== \"vertex\")\n {\n emitInto(record, null);\n }\n }\n\n const pixelVaryingsByPass = new Map();\n\n for (const stage of stageMap.values())\n {\n if (stage.stageName !== \"pixel\")\n {\n continue;\n }\n\n const record = shaderMap.get(stage.shaderKey);\n\n if (!record?.emit)\n {\n continue;\n }\n\n pixelVaryingsByPass.set(\n `${stage.bodyKey}|${stage.techniqueName}|${stage.passIndex}`,\n record.emit.inputs\n .filter((input) => typeof input.name === \"string\"\n && input.name.startsWith(\"vs_r\"))\n .map((input) => input.register)\n .sort((left, right) => left - right)\n );\n }\n\n for (const stage of stageMap.values())\n {\n if (stage.stageName !== \"vertex\")\n {\n continue;\n }\n\n const record = shaderMap.get(stage.shaderKey);\n const varyings = pixelVaryingsByPass.get(\n `${stage.bodyKey}|${stage.techniqueName}|${stage.passIndex}`\n ) ?? [];\n\n if (record)\n {\n record.pairVaryings = varyings;\n emitInto(record, varyings);\n }\n }\n}\n\nfunction cloneJson(value)\n{\n if (value === undefined || value === null)\n {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction mapToJson(map)\n{\n if (!(map instanceof Map))\n {\n return [];\n }\n\n return Array.from(map.entries()).map(([ registerIndex, value ]) => ({\n registerIndex,\n ...cloneJson(value)\n }));\n}\n\nfunction buildStageContract(stage)\n{\n const pipelineInputs = cloneJson(stage.pipelineInputs ?? []);\n const inputSemantics = pipelineInputs.map((input) => ({\n semantic: `${input.usageName || `USAGE_${input.usage}`}${input.usageIndex || \"\"}`,\n usage: input.usage,\n usageName: input.usageName,\n usageIndex: input.usageIndex,\n registerIndex: input.registerIndex,\n usedMask: input.usedMask,\n type: input.type,\n dimension: input.dimension\n }));\n const inputNames = new Set(inputSemantics.map((input) => input.usageName));\n const hasNormal = inputNames.has(\"NORMAL\");\n const hasTangent = inputNames.has(\"TANGENT\");\n const hasBinormal = inputNames.has(\"BINORMAL\") || inputNames.has(\"BITANGENT\");\n const hasBlendIndices = inputNames.has(\"BLENDINDICES\")\n || inputNames.has(\"BLENDINDICE\");\n let tangentContract = \"none\";\n\n if (hasNormal && hasTangent && hasBinormal)\n {\n tangentContract = \"split_tbn\";\n }\n else if (!hasNormal && hasTangent)\n {\n tangentContract = \"packed_tangent_or_tangent_only\";\n }\n else if (hasNormal || hasTangent || hasBinormal)\n {\n tangentContract = \"partial_tbn\";\n }\n\n const resources = cloneJson(stage.resources ?? []);\n const samplers = cloneJson(stage.samplers ?? []);\n const uavs = cloneJson(stage.uavs ?? []);\n const constants = cloneJson(stage.constants ?? []);\n const resourceNames = resources.map((entry) => entry.name).filter(Boolean);\n\n return {\n stageName: stage.stageName,\n stageType: stage.stageType,\n vertex: stage.stageName === \"vertex\" ? {\n inputs: inputSemantics,\n tangentContract,\n requiresSplitTbn: tangentContract === \"split_tbn\",\n requiresPackedTangent: tangentContract === \"packed_tangent_or_tangent_only\",\n requiresSkinning: hasBlendIndices || resourceNames.includes(\"BoneTransforms\"),\n hasBlendIndices\n } : null,\n texturePacking: classifyTexturePacking(resourceNames),\n constantBuffers: (stage.registers ?? [])\n .filter((entry) => entry.registerType === 0)\n .map((entry) => ({\n registerIndex: entry.registerIndex,\n registerSpace: entry.registerSpace,\n registerCount: entry.registerCount,\n arrayCount: entry.arrayCount,\n dynamic: Boolean(entry.dynamic)\n })),\n resources,\n samplers,\n uavs,\n constants\n };\n}\n\nfunction classifyTexturePacking(names)\n{\n const values = new Set(names);\n\n if ([ \"NoMap\", \"PmdgMap\", \"ArMap\" ].some((name) => values.has(name)))\n {\n return \"packed_textures\";\n }\n\n if ([ \"NormalMap\", \"RoughnessMap\", \"MaterialMap\", \"AlbedoMap\",\n \"AoMap\", \"PaintMaskMap\" ].some((name) => values.has(name)))\n {\n return \"unpacked_textures\";\n }\n\n return \"unknown\";\n}\n\nfunction mergeShaderContracts(contracts)\n{\n const first = contracts?.[0]?.contract ?? null;\n\n if (!first)\n {\n return null;\n }\n\n return {\n stageName: first.stageName,\n stageType: first.stageType,\n vertex: first.vertex ? cloneJson(first.vertex) : null,\n texturePacking: first.texturePacking,\n constantBuffers: cloneJson(first.constantBuffers ?? []),\n resourceNames: (first.resources ?? []).map((entry) => entry.name).filter(Boolean),\n samplerNames: (first.samplers ?? []).map((entry) => entry.name).filter(Boolean),\n sharedByStageCount: contracts.length\n };\n}\n\nfunction normalizeBitangentStageInterface(result, shaderRecord)\n{\n if (shaderRecord?.stageName !== \"vertex\")\n {\n return {\n source: result.source,\n inputs: result.inputs\n };\n }\n\n const bitangentRegisters = new Set((shaderRecord.contracts ?? [])\n .flatMap((entry) => entry.contract?.vertex?.inputs ?? [])\n .filter((input) => input.usageName === \"BITANGENT\")\n .map((input) => input.registerIndex));\n let source = result.source;\n const inputs = result.inputs.map((input) =>\n {\n if (!bitangentRegisters.has(input.register)\n || input.semanticName !== \"BINORMAL\")\n {\n return input;\n }\n const name = `in_BITANGENT${input.semanticIndex}`;\n source = source.replaceAll(input.name, name);\n return {\n ...input,\n name,\n semanticName: \"BITANGENT\"\n };\n });\n return { source, inputs };\n}\n\nfunction validateStageSourceShape(record)\n{\n const source = record?.source ?? \"\";\n\n if (!source)\n {\n return null;\n }\n\n const hasVertexOutput = /\\bgl_Position\\b/u.test(source);\n const hasVertexInterface = /\\bin\\s+(?:lowp|mediump|highp)?\\s*\\w+\\s+attr\\d+\\b/u.test(source)\n || /\\bout\\s+(?:lowp|mediump|highp)?\\s*\\w+\\s+vs_TEXCOORD\\d+\\b/u.test(source)\n || /\\bin_[A-Z]+[0-9]+\\b/u.test(source);\n const hasFragmentOutput = /\\bout\\s+(?:lowp|mediump|highp)?\\s*vec4\\s+SV_Target\\d+\\b/u.test(source)\n || /\\bgl_FragColor\\b/u.test(source);\n\n if (record.stageName === \"vertex\" && !hasVertexOutput)\n {\n return \"vertex stage source does not write gl_Position\";\n }\n\n if (record.stageName === \"pixel\"\n && (hasVertexOutput || hasVertexInterface) && !hasFragmentOutput)\n {\n return \"pixel stage source looks like vertex GLSL\";\n }\n\n if (record.stageName === \"compute\" && !/\\bcewgUav\\d+(_s\\d+)?\\b/u.test(source))\n {\n return \"compute stage source does not write any cewgUav output\";\n }\n\n return null;\n}\n\nfunction inspectRasterCompleteness(stages, shaders)\n{\n const shaderMap = new Map(shaders.map((shader) => [ shader.key, shader ]));\n const groups = new Map();\n\n for (const stage of stages)\n {\n if (![ \"vertex\", \"pixel\" ].includes(stage.stageName))\n {\n continue;\n }\n\n const key = `${stage.bodyKey}:${stage.techniqueName}:${stage.passIndex}`;\n const group = groups.get(key) ?? {\n key,\n bodyKey: stage.bodyKey,\n techniqueName: stage.techniqueName,\n passIndex: stage.passIndex,\n vertex: null,\n pixel: null,\n duplicateStages: []\n };\n\n if (group[stage.stageName])\n {\n group.duplicateStages.push(stage.stageName);\n }\n\n group[stage.stageName] = stage;\n groups.set(key, group);\n }\n\n const incompletePasses = [];\n let completePassCount = 0;\n\n for (const group of groups.values())\n {\n const missingStages = [];\n const unavailableStages = [];\n\n for (const stageName of [ \"vertex\", \"pixel\" ])\n {\n const stage = group[stageName];\n\n if (!stage)\n {\n missingStages.push(stageName);\n continue;\n }\n\n const shader = shaderMap.get(stage.shaderKey);\n\n if (!shader?.hlsl2webgl?.ok || !shader.source)\n {\n unavailableStages.push({\n stageName,\n stageKey: stage.key,\n shaderKey: stage.shaderKey,\n reason: shader?.hlsl2webgl?.validationError\n || shader?.hlsl2webgl?.error\n || shader?.excluded?.reason\n || \"translated source is unavailable\"\n });\n }\n }\n\n if (!missingStages.length && !unavailableStages.length\n && !group.duplicateStages.length)\n {\n completePassCount++;\n }\n else\n {\n incompletePasses.push({\n ...group,\n missingStages,\n unavailableStages,\n duplicateStages: [ ...new Set(group.duplicateStages) ].sort()\n });\n }\n }\n\n return {\n expectedPassCount: groups.size,\n completePassCount,\n incompletePasses\n };\n}\n\nfunction normalizeSourceIdentity(values)\n{\n const identity = values.sourceIdentity;\n\n if (identity !== null\n && (!identity || typeof identity !== \"object\" || Array.isArray(identity)))\n {\n throw new TypeError(\"CEWG sourceIdentity must be an object\");\n }\n\n const sha256 = sha256Bytes(values.sourceBytes);\n if (identity?.sha256 !== undefined && identity?.sha256 !== null\n && identity.sha256 !== sha256)\n {\n throw new Error(\n \"CEWG sourceIdentity.sha256 does not match the exact effect input bytes\"\n );\n }\n\n return Object.freeze({\n filePath: identity?.filePath ?? values.source,\n logicalPath: identity?.logicalPath ?? values.source,\n game: identity?.game ?? null,\n client: identity?.client ?? null,\n build: identity?.build === undefined || identity?.build === null\n ? null\n : String(identity.build),\n byteLength: values.sourceBytes.byteLength,\n md5: identity?.md5 ?? null,\n sha256\n });\n}\n\nfunction qualifyEffectPackage({\n info,\n metadata,\n glsl,\n failedShaders,\n excludedShaders,\n failedBodies,\n rasterCompleteness,\n availableShaderCount\n})\n{\n const errors = [];\n\n if (info.format !== \"CEWG\" || glsl.format !== \"CEWG_GLSL_SET\")\n {\n errors.push(\"invalid CEWG package envelope\");\n }\n\n if (!Array.isArray(metadata.variants) || !Array.isArray(glsl.shaders))\n {\n errors.push(\"missing CEWG graph arrays\");\n }\n\n if (failedShaders.length)\n {\n errors.push(`${failedShaders.length} shader translation(s) failed`);\n }\n\n if (excludedShaders.length)\n {\n errors.push(`${excludedShaders.length} shader translation(s) are unsupported`);\n }\n\n if (failedBodies.length)\n {\n errors.push(`${failedBodies.length} effect body/bodies failed`);\n }\n\n if (rasterCompleteness.incompletePasses.length)\n {\n errors.push(`${rasterCompleteness.incompletePasses.length} raster pass(es) are incomplete`);\n }\n\n if (!availableShaderCount)\n {\n errors.push(\"no translated shaders are available\");\n }\n\n return {\n ok: errors.length === 0,\n level: errors.length ? \"diagnostic\" : \"structural\",\n errors: Object.freeze(errors),\n incompletePasses: Object.freeze(rasterCompleteness.incompletePasses)\n };\n}\n"],"names":["PACKAGE_VERSION","buildEffectPackage","input","options","values","normalizeOptions","effectRes","CjsHlslFormat","read","sourceBytes","emit","OUTPUT_RAW","source","IsGood","loadError","Error","sourceIdentity","normalizeSourceIdentity","m_version","permutationGraph","buildEffectPermutationGraph","reflectionPackage","buildCompleteEffectReflection","sourcePath","variants","buildExportVariants","allPermutations","bodyMap","Map","stageMap","shaderMap","variant","has","bodyKey","shader","GetShader","toShaderOptions","set","key","bodyOffset","bodySize","firstVariantKey","error","manifest","stages","effectDescription","GetEffectDescription","HlslEffectBindingManifest","fromEffectDescription","collection","collectStages","selection","body","errors","length","join","toJSON","stage","stageKey","shaderKey","contract","buildStageContract","stageRecord","localKey","techniqueName","passIndex","stageType","stageName","shaderHandle","shaderSize","bytecode","stringTableOffset","push","firstStageKey","firstBodyKey","bytes","contracts","translateStages","bodies","Array","from","translatedShaders","map","record","output","primaryContract","mergeShaderContracts","failedShaders","filter","hlsl2webgl","ok","excluded","excludedShaders","failedBodies","rasterCompleteness","inspectRasterCompleteness","availableShaderCount","info","format","formatVersion","EFFECT_INFO_VERSION","packageKind","targetBackend","backendPackage","backendPackageVersion","generatedAt","outputPath","sourceByteLength","byteLength","sourceMd5","md5","sourceSha256","sha256","translator","translatorVersion","language","flags","permutationMode","defaultPermutationIndex","m_permutations","sourceEffectVersion","sourceBodyCoverage","backendBodyCoverage","backendProgramCoverage","selectionCoversWholeEffect","permutationCount","uniqueBodyCount","sourcePermutationCount","sourceUniqueBodyCount","chunk","EFFECT_PERMUTATION_GRAPH_CHUNK","EFFECT_PERMUTATION_GRAPH_FORMAT","EFFECT_PERMUTATION_GRAPH_VERSION","sha256Utf8","JSON","stringify","effectReflection","pointer","bodyStageCount","uniqueShaderCount","translatedShaderCount","excludedShaderCount","failedShaderCount","failedBodyCount","expectedRasterPassCount","expectedPassCount","completeRasterPassCount","completePassCount","incompleteRasterPassCount","incompletePasses","allowFailures","completeness","packageValid","sourceComplete","backendComplete","runtimeComplete","metadata","effectResource","permutations","GetPermutationDescription","glsl","permutationIndex","shaders","qualification","qualifyEffectPackage","chunks","EFFECT_REFLECTION_CHUNK","reflection","EFFECT_REFLECTION_BLOB_CHUNK","blobBytes","includeSourceEffect","buildPackage","inspection","inspectWithValues","Object","freeze","reflectionBlobs","isArray","TypeError","toBytes","String","trim","technique","undefined","pass","Number","toLowerCase","isSafeInteger","includes","emitterOptions","normalizeOptionalString","Date","toISOString","value","name","result","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","multiplier","index","permutation","defaultOption","offset","size","decodePermutationOptions","remaining","optionCount","optionIndex","Math","floor","option","m_offsets","variantIndex","isInteger","tableIndex","tableIndexMatchesPermutationIndex","techniques","passes","declaredStageCount","HlslRenderContextEnum","SHADER_TYPE_COUNT","stageInput","stageInputs","m_exists","hlslShaderStageName","cjsShaderBytecode","m_shader","pipelineInputs","cloneJson","signature","registers","resources","mapToJson","samplers","uavs","constants","emitInto","pairVaryings","emitGlslWithOptions","stageInterface","normalizeBitangentStageInterface","inputs","bindings","stageOutputs","outputs","emitWarnings","warnings","mode","computeFragment","issue","validateStageSourceShape","validationError","message","details","test","reason","opcodeName","dimensionName","pixelVaryingsByPass","get","startsWith","register","sort","left","right","varyings","parse","entries","registerIndex","inputSemantics","semantic","usageName","usage","usageIndex","usedMask","type","dimension","inputNames","Set","hasNormal","hasTangent","hasBinormal","hasBlendIndices","tangentContract","resourceNames","entry","Boolean","vertex","requiresSplitTbn","requiresPackedTangent","requiresSkinning","texturePacking","classifyTexturePacking","constantBuffers","registerType","registerSpace","registerCount","arrayCount","dynamic","names","some","first","samplerNames","sharedByStageCount","shaderRecord","bitangentRegisters","flatMap","semanticName","semanticIndex","replaceAll","hasVertexOutput","hasVertexInterface","hasFragmentOutput","groups","group","pixel","duplicateStages","missingStages","unavailableStages","identity","sha256Bytes","filePath","logicalPath","game","client","build","level"],"mappings":"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"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { EFFECT_PERMUTATION_GRAPH_CHUNK, EFFECT_PERMUTATION_GRAPH_FORMAT, EFFECT_PERMUTATION_GRAPH_VERSION, validateEffectPermutationGraph } from '../../../format/effect/effectPermutationGraph.js';
|
|
2
|
+
import { EFFECT_REFLECTION_CHUNK, EFFECT_REFLECTION_BLOB_CHUNK, validateEffectReflectionPointer, effectReflectionForPermutation } from '../../../format/effect/effectReflectionPackage.js';
|
|
3
|
+
import { inspectCewgRasterCompleteness } from './cewgCompleteness.js';
|
|
4
|
+
import { markEffectReflectionValidated } from './cewg/CewgPackage.js';
|
|
5
|
+
import { sha256Bytes } from '../../../format/effect/sha256.js';
|
|
6
|
+
|
|
7
|
+
const EFFECT_INFO_VERSION = 3;
|
|
8
|
+
const EFFECT_PACKAGE_KINDS = new Set(["tr2-effect-webgl", "tr2-effect-webgl-permutations"]);
|
|
9
|
+
const REQUIRED_EFFECT_CHUNKS = Object.freeze(["INFO", "META", "GLSL"]);
|
|
10
|
+
const SEMANTIC_VERSION = /^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u;
|
|
11
|
+
const SHA256 = /^[0-9a-f]{64}$/u;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Validates the canonical CEWG effect envelope after the binary container has
|
|
15
|
+
* been decoded. Generic CEWG containers without a recognized package kind
|
|
16
|
+
* remain readable.
|
|
17
|
+
*
|
|
18
|
+
* @param {object} pkg Loaded CEWG package.
|
|
19
|
+
* @returns {boolean} True when the package is generic, legacy, or valid.
|
|
20
|
+
*/
|
|
21
|
+
function validateEffectPackageEnvelope(pkg) {
|
|
22
|
+
if (!pkg.GetChunk("INFO")) return true;
|
|
23
|
+
const info = requireRecord(pkg.GetJson("INFO"), "CEWG INFO");
|
|
24
|
+
if (!EFFECT_PACKAGE_KINDS.has(info.packageKind)) return true;
|
|
25
|
+
for (const tag of REQUIRED_EFFECT_CHUNKS) {
|
|
26
|
+
if (!pkg.GetChunk(tag)) {
|
|
27
|
+
throw new Error(`CEWG effect package requires ${tag}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (info.format !== "CEWG") {
|
|
31
|
+
throw new Error("CEWG INFO format is malformed");
|
|
32
|
+
}
|
|
33
|
+
if (info.formatVersion === 1) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if (info.formatVersion !== EFFECT_INFO_VERSION) {
|
|
37
|
+
throw new Error(`CEWG INFO schema must be version ${EFFECT_INFO_VERSION}`);
|
|
38
|
+
}
|
|
39
|
+
if (info.targetBackend !== "webgl" || info.backendPackage !== "@carbonenginejs/runtime-resource/formats/webgl" || !SEMANTIC_VERSION.test(info.backendPackageVersion) || info.translator !== "dxbc-js-emitter" || !SEMANTIC_VERSION.test(info.translatorVersion)) {
|
|
40
|
+
throw new Error("CEWG INFO producer provenance is malformed");
|
|
41
|
+
}
|
|
42
|
+
const sourceIdentity = validateSourceIdentity(info.sourceIdentity);
|
|
43
|
+
if (info.sourceByteLength !== sourceIdentity.byteLength || info.sourceSha256 !== sourceIdentity.sha256) {
|
|
44
|
+
throw new Error("CEWG INFO source identity fields disagree");
|
|
45
|
+
}
|
|
46
|
+
requireString(info.sourcePath, "CEWG INFO.sourcePath");
|
|
47
|
+
requireUint(info.defaultPermutationIndex, "CEWG INFO.defaultPermutationIndex");
|
|
48
|
+
requireUint(info.sourceEffectVersion, "CEWG INFO.sourceEffectVersion");
|
|
49
|
+
const expectedMode = info.packageKind === "tr2-effect-webgl-permutations" ? "all" : "selected";
|
|
50
|
+
if (info.permutationMode !== expectedMode) {
|
|
51
|
+
throw new Error("CEWG INFO package kind and permutation mode disagree");
|
|
52
|
+
}
|
|
53
|
+
const graphPointer = requireRecord(info.permutationGraph, "CEWG INFO.permutationGraph");
|
|
54
|
+
if (graphPointer.chunk !== EFFECT_PERMUTATION_GRAPH_CHUNK || graphPointer.format !== EFFECT_PERMUTATION_GRAPH_FORMAT || graphPointer.formatVersion !== EFFECT_PERMUTATION_GRAPH_VERSION || !SHA256.test(graphPointer.sha256)) {
|
|
55
|
+
throw new Error("CEWG INFO.permutationGraph is malformed");
|
|
56
|
+
}
|
|
57
|
+
const graphChunk = pkg.GetChunk(EFFECT_PERMUTATION_GRAPH_CHUNK);
|
|
58
|
+
if (!graphChunk) {
|
|
59
|
+
throw new Error(`CEWG INFO.permutationGraph requires ${EFFECT_PERMUTATION_GRAPH_CHUNK}`);
|
|
60
|
+
}
|
|
61
|
+
if (sha256Bytes(graphChunk.bytes) !== graphPointer.sha256) {
|
|
62
|
+
throw new Error("CEWG INFO permutation-graph digest disagrees with PGRF");
|
|
63
|
+
}
|
|
64
|
+
const graph = requireRecord(pkg.GetJson(EFFECT_PERMUTATION_GRAPH_CHUNK), "CEWG PGRF");
|
|
65
|
+
const graphCounts = validateEffectPermutationGraph(graph, {
|
|
66
|
+
sourceByteLength: sourceIdentity.byteLength
|
|
67
|
+
});
|
|
68
|
+
if (requireUint(graphPointer.permutationCount, "CEWG INFO.permutationGraph.permutationCount") !== graphCounts.permutationCount || requireUint(graphPointer.uniqueBodyCount, "CEWG INFO.permutationGraph.uniqueBodyCount") !== graphCounts.uniqueBodyCount || info.sourcePermutationCount !== graphCounts.permutationCount || info.sourceUniqueBodyCount !== graphCounts.uniqueBodyCount) {
|
|
69
|
+
throw new Error("CEWG INFO permutation-graph counts disagree with PGRF");
|
|
70
|
+
}
|
|
71
|
+
if (info.defaultPermutationIndex >= graphCounts.permutationCount) {
|
|
72
|
+
throw new Error("CEWG default permutation index is absent from PGRF");
|
|
73
|
+
}
|
|
74
|
+
const metadata = requireRecord(pkg.GetJson("META"), "CEWG META");
|
|
75
|
+
const glsl = requireRecord(pkg.GetJson("GLSL"), "CEWG GLSL");
|
|
76
|
+
validateBackendGraph(info, metadata, glsl, graph);
|
|
77
|
+
if (metadata.sourcePath !== info.sourcePath) {
|
|
78
|
+
throw new Error("CEWG META source path disagrees with INFO");
|
|
79
|
+
}
|
|
80
|
+
validateCompleteness(info);
|
|
81
|
+
if (info.formatVersion === 2) {
|
|
82
|
+
if (info.sourceEffectVersion < 8 || info.sourceEffectVersion > 14) {
|
|
83
|
+
throw new Error("CEWG INFO v2 source effect version must be 8-14");
|
|
84
|
+
}
|
|
85
|
+
if (Object.prototype.hasOwnProperty.call(info, "effectReflection") || pkg.GetChunk(EFFECT_REFLECTION_CHUNK) || pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK)) {
|
|
86
|
+
throw new Error("CEWG INFO v2 cannot contain complete effect reflection");
|
|
87
|
+
}
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
const reflectionChunk = pkg.GetChunk(EFFECT_REFLECTION_CHUNK);
|
|
91
|
+
const blobChunk = pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK);
|
|
92
|
+
if (!reflectionChunk || !blobChunk) {
|
|
93
|
+
throw new Error("CEWG INFO v3 requires RFLX and RBLB");
|
|
94
|
+
}
|
|
95
|
+
const reflection = requireRecord(pkg.GetJson(EFFECT_REFLECTION_CHUNK), "CEWG RFLX");
|
|
96
|
+
if (info.sourceEffectVersion !== 15 || reflection.source?.effectVersion !== info.sourceEffectVersion) {
|
|
97
|
+
throw new Error("CEWG INFO v3 source effect version disagrees with RFLX");
|
|
98
|
+
}
|
|
99
|
+
validateEffectReflectionPointer(requireRecord(info.effectReflection, "CEWG INFO.effectReflection"), reflection, blobChunk.bytes, {
|
|
100
|
+
permutationGraph: graph,
|
|
101
|
+
sourceIdentity,
|
|
102
|
+
sourcePath: info.sourcePath,
|
|
103
|
+
reflectionBytes: reflectionChunk.bytes
|
|
104
|
+
});
|
|
105
|
+
validateReflectionBackendGraph(reflection, graph, metadata, glsl);
|
|
106
|
+
markEffectReflectionValidated(pkg);
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
function validateReflectionBackendGraph(reflection, graph, metadata, glsl) {
|
|
110
|
+
const metadataBodies = new Map(metadata.bodies.map(body => [body.key, body]));
|
|
111
|
+
const checkedBodies = new Set();
|
|
112
|
+
for (const variant of metadata.variants) {
|
|
113
|
+
if (checkedBodies.has(variant.bodyKey)) continue;
|
|
114
|
+
checkedBodies.add(variant.bodyKey);
|
|
115
|
+
const metadataBody = metadataBodies.get(variant.bodyKey);
|
|
116
|
+
const reflected = effectReflectionForPermutation(reflection, graph, variant.permutationIndex);
|
|
117
|
+
const manifest = requireRecord(metadataBody?.manifest, `CEWG META body ${variant.bodyKey} manifest`);
|
|
118
|
+
const reflectedPasses = [];
|
|
119
|
+
const reflectedStages = [];
|
|
120
|
+
for (const technique of requireArray(reflected.techniques, `CEWG RFLX body ${variant.bodyKey} techniques`)) {
|
|
121
|
+
for (const [passIndex, pass] of requireArray(technique.passes, `CEWG RFLX technique ${technique.name} passes`).entries()) {
|
|
122
|
+
reflectedPasses.push({
|
|
123
|
+
techniqueName: technique.name,
|
|
124
|
+
passIndex,
|
|
125
|
+
states: pass.renderStates
|
|
126
|
+
});
|
|
127
|
+
for (const stage of requireArray(pass.stages, `CEWG RFLX ${technique.name}.pass${passIndex} stages`)) {
|
|
128
|
+
reflectedStages.push({
|
|
129
|
+
techniqueName: technique.name,
|
|
130
|
+
passIndex,
|
|
131
|
+
stage
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const manifestPasses = requireArray(manifest.passes, `CEWG META body ${variant.bodyKey} passes`);
|
|
137
|
+
const manifestStages = requireArray(manifest.stages, `CEWG META body ${variant.bodyKey} stages`);
|
|
138
|
+
if (manifestPasses.length !== reflectedPasses.length || manifestStages.length !== reflectedStages.length) {
|
|
139
|
+
throw new Error(`CEWG META body ${variant.bodyKey} disagrees with RFLX pass/stage counts`);
|
|
140
|
+
}
|
|
141
|
+
for (const reflectedPass of reflectedPasses) {
|
|
142
|
+
const manifestPass = manifestPasses.find(entry => entry.techniqueName === reflectedPass.techniqueName && entry.passIndex === reflectedPass.passIndex);
|
|
143
|
+
if (!manifestPass || !jsonEqual(manifestPass.states, reflectedPass.states)) {
|
|
144
|
+
throw new Error(`CEWG META pass ${reflectedPass.techniqueName}.pass${reflectedPass.passIndex} disagrees with RFLX`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
for (const reflectedStage of reflectedStages) {
|
|
148
|
+
const stage = reflectedStage.stage;
|
|
149
|
+
const sourceProgram = stage.sourceProgram;
|
|
150
|
+
const signature = stage.input?.signature;
|
|
151
|
+
const manifestStage = manifestStages.find(entry => entry.techniqueName === reflectedStage.techniqueName && entry.passIndex === reflectedStage.passIndex && entry.stageType === stage.stageType && entry.stageName === stage.stageName);
|
|
152
|
+
if (!manifestStage || sourceProgram?.kind !== "stage" || sourceProgram.stageType !== manifestStage.stageType || sourceProgram.stageName !== manifestStage.stageName || sourceProgram.shaderSize !== manifestStage.shaderBytecode?.shaderSize || sourceProgram.stringTableOffset !== manifestStage.shaderBytecode?.stringTableOffset || !samePipelineInputs(signature?.pipelineInputs, manifestStage.pipelineInputs) || !jsonEqual(signature?.threadGroupSize, manifestStage.threadGroupSize)) {
|
|
153
|
+
throw new Error(`CEWG META stage ${reflectedStage.techniqueName}.pass${reflectedStage.passIndex}.${stage.stageName} disagrees with RFLX`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (checkedBodies.size !== metadataBodies.size || requireArray(glsl.bodies, "CEWG GLSL.bodies").some(body => !checkedBodies.has(body.key))) {
|
|
158
|
+
throw new Error("CEWG backend body inventory disagrees with RFLX");
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function validateSourceIdentity(value) {
|
|
162
|
+
const identity = requireRecord(value, "CEWG INFO.sourceIdentity");
|
|
163
|
+
requireString(identity.logicalPath, "CEWG INFO.sourceIdentity.logicalPath");
|
|
164
|
+
requireUint(identity.byteLength, "CEWG INFO.sourceIdentity.byteLength");
|
|
165
|
+
if (!SHA256.test(identity.sha256)) {
|
|
166
|
+
throw new Error("CEWG INFO.sourceIdentity.sha256 is malformed");
|
|
167
|
+
}
|
|
168
|
+
return identity;
|
|
169
|
+
}
|
|
170
|
+
function validateCompleteness(info) {
|
|
171
|
+
const completeness = requireRecord(info.completeness, "CEWG INFO.completeness");
|
|
172
|
+
for (const key of ["packageValid", "sourceComplete", "backendComplete", "runtimeComplete"]) {
|
|
173
|
+
if (typeof completeness[key] !== "boolean") {
|
|
174
|
+
throw new Error(`CEWG INFO.completeness.${key} must be boolean`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!completeness.packageValid || completeness.runtimeComplete) {
|
|
178
|
+
throw new Error("CEWG INFO completeness overstates runtime coverage");
|
|
179
|
+
}
|
|
180
|
+
if (info.formatVersion === 3) {
|
|
181
|
+
if (info.sourceBodyCoverage !== "all-unique" || !completeness.sourceComplete || info.backendProgramCoverage !== (selectionCoversWholeEffect(info.selection) ? "all-stages" : "filtered")) {
|
|
182
|
+
throw new Error("CEWG INFO v3 source coverage is inconsistent");
|
|
183
|
+
}
|
|
184
|
+
} else if (Object.prototype.hasOwnProperty.call(info, "sourceBodyCoverage") || Object.prototype.hasOwnProperty.call(info, "backendBodyCoverage") || Object.prototype.hasOwnProperty.call(info, "backendProgramCoverage") || completeness.sourceComplete) {
|
|
185
|
+
throw new Error("CEWG INFO v2 source coverage is inconsistent");
|
|
186
|
+
}
|
|
187
|
+
const expectedBackendCoverage = info.permutationMode === "all" ? "all" : "selected";
|
|
188
|
+
if (info.formatVersion === 3 && info.backendBodyCoverage !== expectedBackendCoverage || completeness.backendComplete) {
|
|
189
|
+
throw new Error("CEWG INFO backend coverage is inconsistent");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
function selectionCoversWholeEffect(value) {
|
|
193
|
+
const selection = requireRecord(value, "CEWG INFO.selection");
|
|
194
|
+
return selection.technique === null && selection.pass === null && selection.stage === null;
|
|
195
|
+
}
|
|
196
|
+
function validateBackendGraph(info, metadata, glsl, graph) {
|
|
197
|
+
if (glsl.format !== "CEWG_GLSL_SET" || glsl.formatVersion !== 1 || glsl.permutationMode !== info.permutationMode || !jsonEqual(glsl.selection, info.selection)) {
|
|
198
|
+
throw new Error("CEWG GLSL envelope disagrees with INFO");
|
|
199
|
+
}
|
|
200
|
+
const metadataVariants = requireArray(metadata.variants, "CEWG META.variants");
|
|
201
|
+
const glslVariants = requireArray(glsl.variants, "CEWG GLSL.variants");
|
|
202
|
+
const metadataBodies = requireArray(metadata.bodies, "CEWG META.bodies");
|
|
203
|
+
const glslBodies = requireArray(glsl.bodies, "CEWG GLSL.bodies");
|
|
204
|
+
const stages = requireArray(glsl.stages, "CEWG GLSL.stages");
|
|
205
|
+
const shaders = requireArray(glsl.shaders, "CEWG GLSL.shaders");
|
|
206
|
+
if (metadataVariants.length !== info.permutationCount || glslVariants.length !== info.permutationCount) {
|
|
207
|
+
throw new Error("CEWG backend variant counts disagree with INFO");
|
|
208
|
+
}
|
|
209
|
+
const expectedIndices = info.permutationMode === "all" ? graph.variants.map(variant => variant.permutationIndex) : [info.defaultPermutationIndex];
|
|
210
|
+
if (expectedIndices.length !== metadataVariants.length) {
|
|
211
|
+
throw new Error("CEWG backend permutation coverage disagrees with INFO");
|
|
212
|
+
}
|
|
213
|
+
for (let index = 0; index < expectedIndices.length; index++) {
|
|
214
|
+
const expected = expectedIndices[index];
|
|
215
|
+
const metadataVariant = requireRecord(metadataVariants[index], `CEWG META variant ${index}`);
|
|
216
|
+
const glslVariant = requireRecord(glslVariants[index], `CEWG GLSL variant ${index}`);
|
|
217
|
+
if (metadataVariant.permutationIndex !== expected || glslVariant.permutationIndex !== expected || metadataVariant.key !== glslVariant.key || metadataVariant.bodyKey !== glslVariant.bodyKey) {
|
|
218
|
+
throw new Error(`CEWG backend variant ${index} is inconsistent`);
|
|
219
|
+
}
|
|
220
|
+
const sourceVariant = graph.variants[expected];
|
|
221
|
+
if (metadataVariant.bodyOffset !== sourceVariant.sourceRecord.offset || metadataVariant.bodySize !== sourceVariant.sourceRecord.byteLength) {
|
|
222
|
+
throw new Error(`CEWG backend variant ${index} disagrees with PGRF`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (metadataBodies.length !== info.uniqueBodyCount || glslBodies.length !== info.uniqueBodyCount || stages.length !== info.bodyStageCount || shaders.length !== info.uniqueShaderCount) {
|
|
226
|
+
throw new Error("CEWG backend graph counts disagree with INFO");
|
|
227
|
+
}
|
|
228
|
+
const metadataBodyMap = keyedRecordMap(metadataBodies, "CEWG META body");
|
|
229
|
+
const glslBodyMap = keyedRecordMap(glslBodies, "CEWG GLSL body");
|
|
230
|
+
const stageMap = keyedRecordMap(stages, "CEWG GLSL stage");
|
|
231
|
+
const shaderMap = keyedRecordMap(shaders, "CEWG GLSL shader");
|
|
232
|
+
const variantKeys = new Set();
|
|
233
|
+
const referencedBodies = new Set();
|
|
234
|
+
for (const [index, variant] of glslVariants.entries()) {
|
|
235
|
+
if (typeof variant.key !== "string" || !variant.key || variantKeys.has(variant.key) || !glslBodyMap.has(variant.bodyKey) || !metadataBodyMap.has(metadataVariants[index].bodyKey)) {
|
|
236
|
+
throw new Error(`CEWG backend variant ${index} references an invalid body`);
|
|
237
|
+
}
|
|
238
|
+
variantKeys.add(variant.key);
|
|
239
|
+
referencedBodies.add(variant.bodyKey);
|
|
240
|
+
}
|
|
241
|
+
const referencedStages = new Set();
|
|
242
|
+
for (const body of glslBodies) {
|
|
243
|
+
const metadataBody = metadataBodyMap.get(body.key);
|
|
244
|
+
const bodyStages = requireArray(body.stages, `CEWG GLSL body ${body.key}.stages`);
|
|
245
|
+
if (!metadataBody || referencedBodies.has(body.key) === false || bodyStages.length !== new Set(bodyStages).size) {
|
|
246
|
+
throw new Error(`CEWG backend body ${body.key} is inconsistent`);
|
|
247
|
+
}
|
|
248
|
+
for (const stageKey of bodyStages) {
|
|
249
|
+
const stage = stageMap.get(stageKey);
|
|
250
|
+
if (!stage || stage.bodyKey !== body.key) {
|
|
251
|
+
throw new Error(`CEWG backend body ${body.key} references an invalid stage`);
|
|
252
|
+
}
|
|
253
|
+
referencedStages.add(stageKey);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
const referencedShaders = new Set();
|
|
257
|
+
for (const stage of stages) {
|
|
258
|
+
if (!referencedStages.has(stage.key) || !glslBodyMap.has(stage.bodyKey) || !shaderMap.has(stage.shaderKey)) {
|
|
259
|
+
throw new Error(`CEWG backend stage ${stage.key} is inconsistent`);
|
|
260
|
+
}
|
|
261
|
+
referencedShaders.add(stage.shaderKey);
|
|
262
|
+
}
|
|
263
|
+
if (referencedStages.size !== stageMap.size || referencedShaders.size !== shaderMap.size) {
|
|
264
|
+
throw new Error("CEWG backend graph contains orphan stages or shaders");
|
|
265
|
+
}
|
|
266
|
+
const excludedShaderCount = shaders.filter(shader => shader.excluded).length;
|
|
267
|
+
const failedShaderCount = shaders.filter(shader => !shader.hlsl2webgl?.ok && !shader.excluded).length;
|
|
268
|
+
const failedBodyCount = glslBodies.filter(body => body.error).length;
|
|
269
|
+
const availableShaderCount = shaders.filter(shader => shader.hlsl2webgl?.ok && shader.source).length;
|
|
270
|
+
const raster = inspectCewgRasterCompleteness(stages, shaders);
|
|
271
|
+
const counts = {
|
|
272
|
+
translatedShaderCount: shaders.length - failedShaderCount - excludedShaderCount,
|
|
273
|
+
excludedShaderCount,
|
|
274
|
+
failedShaderCount,
|
|
275
|
+
failedBodyCount,
|
|
276
|
+
availableShaderCount,
|
|
277
|
+
expectedRasterPassCount: raster.expectedPassCount,
|
|
278
|
+
completeRasterPassCount: raster.completePassCount,
|
|
279
|
+
incompleteRasterPassCount: raster.incompletePasses.length
|
|
280
|
+
};
|
|
281
|
+
for (const [field, actual] of Object.entries(counts)) {
|
|
282
|
+
if (info[field] !== actual) {
|
|
283
|
+
throw new Error(`CEWG INFO.${field} disagrees with the backend graph`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function keyedRecordMap(records, context) {
|
|
288
|
+
const map = new Map();
|
|
289
|
+
for (const [index, value] of records.entries()) {
|
|
290
|
+
const record = requireRecord(value, `${context} ${index}`);
|
|
291
|
+
if (typeof record.key !== "string" || !record.key || map.has(record.key)) {
|
|
292
|
+
throw new Error(`${context} ${index} has a missing or duplicate key`);
|
|
293
|
+
}
|
|
294
|
+
map.set(record.key, record);
|
|
295
|
+
}
|
|
296
|
+
return map;
|
|
297
|
+
}
|
|
298
|
+
function samePipelineInputs(reflected, manifest) {
|
|
299
|
+
const fields = ["usage", "registerIndex", "usageIndex", "usedMask", "type", "dimension"];
|
|
300
|
+
return Array.isArray(reflected) && Array.isArray(manifest) && reflected.length === manifest.length && reflected.every((entry, index) => fields.every(field => entry[field] === manifest[index]?.[field]));
|
|
301
|
+
}
|
|
302
|
+
function requireRecord(value, context) {
|
|
303
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
304
|
+
throw new Error(`${context} must be an object`);
|
|
305
|
+
}
|
|
306
|
+
return value;
|
|
307
|
+
}
|
|
308
|
+
function requireArray(value, context) {
|
|
309
|
+
if (!Array.isArray(value)) {
|
|
310
|
+
throw new Error(`${context} must be an array`);
|
|
311
|
+
}
|
|
312
|
+
return value;
|
|
313
|
+
}
|
|
314
|
+
function requireString(value, context) {
|
|
315
|
+
if (typeof value !== "string" || !value) {
|
|
316
|
+
throw new Error(`${context} must be a non-empty string`);
|
|
317
|
+
}
|
|
318
|
+
return value;
|
|
319
|
+
}
|
|
320
|
+
function requireUint(value, context) {
|
|
321
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
322
|
+
throw new Error(`${context} must be a non-negative safe integer`);
|
|
323
|
+
}
|
|
324
|
+
return value;
|
|
325
|
+
}
|
|
326
|
+
function jsonEqual(left, right) {
|
|
327
|
+
return JSON.stringify(left) === JSON.stringify(right);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
export { EFFECT_INFO_VERSION, validateEffectPackageEnvelope };
|
|
331
|
+
//# sourceMappingURL=effectPackageValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectPackageValidation.js","sources":["../../../../../src/formats/webgl/core/effectPackageValidation.js"],"sourcesContent":["import {\n EFFECT_PERMUTATION_GRAPH_CHUNK,\n EFFECT_PERMUTATION_GRAPH_FORMAT,\n EFFECT_PERMUTATION_GRAPH_VERSION,\n validateEffectPermutationGraph\n} from \"../../../format/effect/effectPermutationGraph.js\";\nimport {\n EFFECT_REFLECTION_BLOB_CHUNK,\n EFFECT_REFLECTION_CHUNK,\n effectReflectionForPermutation,\n validateEffectReflectionPointer\n} from \"../../../format/effect/effectReflectionPackage.js\";\nimport { inspectCewgRasterCompleteness } from \"./cewgCompleteness.js\";\nimport { markEffectReflectionValidated } from \"./cewg/CewgPackage.js\";\nimport { sha256Bytes } from \"../../../format/effect/sha256.js\";\n\nexport const EFFECT_INFO_VERSION = 3;\n\nconst EFFECT_PACKAGE_KINDS = new Set([\n \"tr2-effect-webgl\",\n \"tr2-effect-webgl-permutations\"\n]);\nconst REQUIRED_EFFECT_CHUNKS = Object.freeze([ \"INFO\", \"META\", \"GLSL\" ]);\nconst SEMANTIC_VERSION = /^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/u;\nconst SHA256 = /^[0-9a-f]{64}$/u;\n\n/**\n * Validates the canonical CEWG effect envelope after the binary container has\n * been decoded. Generic CEWG containers without a recognized package kind\n * remain readable.\n *\n * @param {object} pkg Loaded CEWG package.\n * @returns {boolean} True when the package is generic, legacy, or valid.\n */\nexport function validateEffectPackageEnvelope(pkg)\n{\n if (!pkg.GetChunk(\"INFO\")) return true;\n\n const info = requireRecord(pkg.GetJson(\"INFO\"), \"CEWG INFO\");\n if (!EFFECT_PACKAGE_KINDS.has(info.packageKind)) return true;\n\n for (const tag of REQUIRED_EFFECT_CHUNKS)\n {\n if (!pkg.GetChunk(tag))\n {\n throw new Error(`CEWG effect package requires ${tag}`);\n }\n }\n if (info.format !== \"CEWG\")\n {\n throw new Error(\"CEWG INFO format is malformed\");\n }\n if (info.formatVersion === 1)\n {\n return true;\n }\n if (info.formatVersion !== EFFECT_INFO_VERSION)\n {\n throw new Error(`CEWG INFO schema must be version ${EFFECT_INFO_VERSION}`);\n }\n if (info.targetBackend !== \"webgl\"\n || info.backendPackage !== \"@carbonenginejs/runtime-resource/formats/webgl\"\n || !SEMANTIC_VERSION.test(info.backendPackageVersion)\n || info.translator !== \"dxbc-js-emitter\"\n || !SEMANTIC_VERSION.test(info.translatorVersion))\n {\n throw new Error(\"CEWG INFO producer provenance is malformed\");\n }\n\n const sourceIdentity = validateSourceIdentity(info.sourceIdentity);\n if (info.sourceByteLength !== sourceIdentity.byteLength\n || info.sourceSha256 !== sourceIdentity.sha256)\n {\n throw new Error(\"CEWG INFO source identity fields disagree\");\n }\n requireString(info.sourcePath, \"CEWG INFO.sourcePath\");\n requireUint(info.defaultPermutationIndex, \"CEWG INFO.defaultPermutationIndex\");\n requireUint(info.sourceEffectVersion, \"CEWG INFO.sourceEffectVersion\");\n const expectedMode = info.packageKind === \"tr2-effect-webgl-permutations\"\n ? \"all\"\n : \"selected\";\n if (info.permutationMode !== expectedMode)\n {\n throw new Error(\"CEWG INFO package kind and permutation mode disagree\");\n }\n\n const graphPointer = requireRecord(\n info.permutationGraph,\n \"CEWG INFO.permutationGraph\"\n );\n if (graphPointer.chunk !== EFFECT_PERMUTATION_GRAPH_CHUNK\n || graphPointer.format !== EFFECT_PERMUTATION_GRAPH_FORMAT\n || graphPointer.formatVersion !== EFFECT_PERMUTATION_GRAPH_VERSION\n || !SHA256.test(graphPointer.sha256))\n {\n throw new Error(\"CEWG INFO.permutationGraph is malformed\");\n }\n const graphChunk = pkg.GetChunk(EFFECT_PERMUTATION_GRAPH_CHUNK);\n if (!graphChunk)\n {\n throw new Error(`CEWG INFO.permutationGraph requires ${EFFECT_PERMUTATION_GRAPH_CHUNK}`);\n }\n if (sha256Bytes(graphChunk.bytes) !== graphPointer.sha256)\n {\n throw new Error(\"CEWG INFO permutation-graph digest disagrees with PGRF\");\n }\n const graph = requireRecord(pkg.GetJson(EFFECT_PERMUTATION_GRAPH_CHUNK), \"CEWG PGRF\");\n const graphCounts = validateEffectPermutationGraph(graph, {\n sourceByteLength: sourceIdentity.byteLength\n });\n if (requireUint(\n graphPointer.permutationCount,\n \"CEWG INFO.permutationGraph.permutationCount\"\n ) !== graphCounts.permutationCount\n || requireUint(\n graphPointer.uniqueBodyCount,\n \"CEWG INFO.permutationGraph.uniqueBodyCount\"\n ) !== graphCounts.uniqueBodyCount\n || info.sourcePermutationCount !== graphCounts.permutationCount\n || info.sourceUniqueBodyCount !== graphCounts.uniqueBodyCount)\n {\n throw new Error(\"CEWG INFO permutation-graph counts disagree with PGRF\");\n }\n if (info.defaultPermutationIndex >= graphCounts.permutationCount)\n {\n throw new Error(\"CEWG default permutation index is absent from PGRF\");\n }\n\n const metadata = requireRecord(pkg.GetJson(\"META\"), \"CEWG META\");\n const glsl = requireRecord(pkg.GetJson(\"GLSL\"), \"CEWG GLSL\");\n validateBackendGraph(\n info,\n metadata,\n glsl,\n graph\n );\n if (metadata.sourcePath !== info.sourcePath)\n {\n throw new Error(\"CEWG META source path disagrees with INFO\");\n }\n validateCompleteness(info);\n\n if (info.formatVersion === 2)\n {\n if (info.sourceEffectVersion < 8 || info.sourceEffectVersion > 14)\n {\n throw new Error(\"CEWG INFO v2 source effect version must be 8-14\");\n }\n if (Object.prototype.hasOwnProperty.call(info, \"effectReflection\")\n || pkg.GetChunk(EFFECT_REFLECTION_CHUNK)\n || pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK))\n {\n throw new Error(\"CEWG INFO v2 cannot contain complete effect reflection\");\n }\n return true;\n }\n\n const reflectionChunk = pkg.GetChunk(EFFECT_REFLECTION_CHUNK);\n const blobChunk = pkg.GetChunk(EFFECT_REFLECTION_BLOB_CHUNK);\n if (!reflectionChunk || !blobChunk)\n {\n throw new Error(\"CEWG INFO v3 requires RFLX and RBLB\");\n }\n const reflection = requireRecord(\n pkg.GetJson(EFFECT_REFLECTION_CHUNK),\n \"CEWG RFLX\"\n );\n if (info.sourceEffectVersion !== 15\n || reflection.source?.effectVersion !== info.sourceEffectVersion)\n {\n throw new Error(\"CEWG INFO v3 source effect version disagrees with RFLX\");\n }\n validateEffectReflectionPointer(\n requireRecord(info.effectReflection, \"CEWG INFO.effectReflection\"),\n reflection,\n blobChunk.bytes,\n {\n permutationGraph: graph,\n sourceIdentity,\n sourcePath: info.sourcePath,\n reflectionBytes: reflectionChunk.bytes\n }\n );\n validateReflectionBackendGraph(\n reflection,\n graph,\n metadata,\n glsl\n );\n markEffectReflectionValidated(pkg);\n return true;\n}\n\nfunction validateReflectionBackendGraph(reflection, graph, metadata, glsl)\n{\n const metadataBodies = new Map(metadata.bodies.map((body) => [\n body.key,\n body\n ]));\n const checkedBodies = new Set();\n for (const variant of metadata.variants)\n {\n if (checkedBodies.has(variant.bodyKey)) continue;\n checkedBodies.add(variant.bodyKey);\n const metadataBody = metadataBodies.get(variant.bodyKey);\n const reflected = effectReflectionForPermutation(\n reflection,\n graph,\n variant.permutationIndex\n );\n const manifest = requireRecord(\n metadataBody?.manifest,\n `CEWG META body ${variant.bodyKey} manifest`\n );\n const reflectedPasses = [];\n const reflectedStages = [];\n for (const technique of requireArray(\n reflected.techniques,\n `CEWG RFLX body ${variant.bodyKey} techniques`\n ))\n {\n for (const [ passIndex, pass ] of requireArray(\n technique.passes,\n `CEWG RFLX technique ${technique.name} passes`\n ).entries())\n {\n reflectedPasses.push({\n techniqueName: technique.name,\n passIndex,\n states: pass.renderStates\n });\n for (const stage of requireArray(\n pass.stages,\n `CEWG RFLX ${technique.name}.pass${passIndex} stages`\n ))\n {\n reflectedStages.push({\n techniqueName: technique.name,\n passIndex,\n stage\n });\n }\n }\n }\n const manifestPasses = requireArray(\n manifest.passes,\n `CEWG META body ${variant.bodyKey} passes`\n );\n const manifestStages = requireArray(\n manifest.stages,\n `CEWG META body ${variant.bodyKey} stages`\n );\n if (manifestPasses.length !== reflectedPasses.length\n || manifestStages.length !== reflectedStages.length)\n {\n throw new Error(\n `CEWG META body ${variant.bodyKey} disagrees with RFLX pass/stage counts`\n );\n }\n for (const reflectedPass of reflectedPasses)\n {\n const manifestPass = manifestPasses.find((entry) =>\n entry.techniqueName === reflectedPass.techniqueName\n && entry.passIndex === reflectedPass.passIndex);\n if (!manifestPass\n || !jsonEqual(manifestPass.states, reflectedPass.states))\n {\n throw new Error(\n `CEWG META pass ${reflectedPass.techniqueName}.pass${reflectedPass.passIndex} disagrees with RFLX`\n );\n }\n }\n for (const reflectedStage of reflectedStages)\n {\n const stage = reflectedStage.stage;\n const sourceProgram = stage.sourceProgram;\n const signature = stage.input?.signature;\n const manifestStage = manifestStages.find((entry) =>\n entry.techniqueName === reflectedStage.techniqueName\n && entry.passIndex === reflectedStage.passIndex\n && entry.stageType === stage.stageType\n && entry.stageName === stage.stageName);\n if (!manifestStage\n || sourceProgram?.kind !== \"stage\"\n || sourceProgram.stageType !== manifestStage.stageType\n || sourceProgram.stageName !== manifestStage.stageName\n || sourceProgram.shaderSize\n !== manifestStage.shaderBytecode?.shaderSize\n || sourceProgram.stringTableOffset\n !== manifestStage.shaderBytecode?.stringTableOffset\n || !samePipelineInputs(\n signature?.pipelineInputs,\n manifestStage.pipelineInputs\n )\n || !jsonEqual(\n signature?.threadGroupSize,\n manifestStage.threadGroupSize\n ))\n {\n throw new Error(\n `CEWG META stage ${reflectedStage.techniqueName}.pass${reflectedStage.passIndex}.${stage.stageName} disagrees with RFLX`\n );\n }\n }\n }\n if (checkedBodies.size !== metadataBodies.size\n || requireArray(glsl.bodies, \"CEWG GLSL.bodies\").some((body) =>\n !checkedBodies.has(body.key)))\n {\n throw new Error(\"CEWG backend body inventory disagrees with RFLX\");\n }\n}\n\nfunction validateSourceIdentity(value)\n{\n const identity = requireRecord(value, \"CEWG INFO.sourceIdentity\");\n requireString(identity.logicalPath, \"CEWG INFO.sourceIdentity.logicalPath\");\n requireUint(identity.byteLength, \"CEWG INFO.sourceIdentity.byteLength\");\n if (!SHA256.test(identity.sha256))\n {\n throw new Error(\"CEWG INFO.sourceIdentity.sha256 is malformed\");\n }\n return identity;\n}\n\nfunction validateCompleteness(info)\n{\n const completeness = requireRecord(\n info.completeness,\n \"CEWG INFO.completeness\"\n );\n for (const key of [\n \"packageValid\",\n \"sourceComplete\",\n \"backendComplete\",\n \"runtimeComplete\"\n ])\n {\n if (typeof completeness[key] !== \"boolean\")\n {\n throw new Error(`CEWG INFO.completeness.${key} must be boolean`);\n }\n }\n if (!completeness.packageValid || completeness.runtimeComplete)\n {\n throw new Error(\"CEWG INFO completeness overstates runtime coverage\");\n }\n if (info.formatVersion === 3)\n {\n if (info.sourceBodyCoverage !== \"all-unique\"\n || !completeness.sourceComplete\n || info.backendProgramCoverage !== (\n selectionCoversWholeEffect(info.selection)\n ? \"all-stages\"\n : \"filtered\"\n ))\n {\n throw new Error(\"CEWG INFO v3 source coverage is inconsistent\");\n }\n }\n else if (Object.prototype.hasOwnProperty.call(info, \"sourceBodyCoverage\")\n || Object.prototype.hasOwnProperty.call(info, \"backendBodyCoverage\")\n || Object.prototype.hasOwnProperty.call(info, \"backendProgramCoverage\")\n || completeness.sourceComplete)\n {\n throw new Error(\"CEWG INFO v2 source coverage is inconsistent\");\n }\n const expectedBackendCoverage = info.permutationMode === \"all\"\n ? \"all\"\n : \"selected\";\n if ((info.formatVersion === 3\n && info.backendBodyCoverage !== expectedBackendCoverage)\n || completeness.backendComplete)\n {\n throw new Error(\"CEWG INFO backend coverage is inconsistent\");\n }\n}\n\nfunction selectionCoversWholeEffect(value)\n{\n const selection = requireRecord(value, \"CEWG INFO.selection\");\n return selection.technique === null\n && selection.pass === null\n && selection.stage === null;\n}\n\nfunction validateBackendGraph(info, metadata, glsl, graph)\n{\n if (glsl.format !== \"CEWG_GLSL_SET\" || glsl.formatVersion !== 1\n || glsl.permutationMode !== info.permutationMode\n || !jsonEqual(glsl.selection, info.selection))\n {\n throw new Error(\"CEWG GLSL envelope disagrees with INFO\");\n }\n const metadataVariants = requireArray(metadata.variants, \"CEWG META.variants\");\n const glslVariants = requireArray(glsl.variants, \"CEWG GLSL.variants\");\n const metadataBodies = requireArray(metadata.bodies, \"CEWG META.bodies\");\n const glslBodies = requireArray(glsl.bodies, \"CEWG GLSL.bodies\");\n const stages = requireArray(glsl.stages, \"CEWG GLSL.stages\");\n const shaders = requireArray(glsl.shaders, \"CEWG GLSL.shaders\");\n if (metadataVariants.length !== info.permutationCount\n || glslVariants.length !== info.permutationCount)\n {\n throw new Error(\"CEWG backend variant counts disagree with INFO\");\n }\n const expectedIndices = info.permutationMode === \"all\"\n ? graph.variants.map((variant) => variant.permutationIndex)\n : [ info.defaultPermutationIndex ];\n if (expectedIndices.length !== metadataVariants.length)\n {\n throw new Error(\"CEWG backend permutation coverage disagrees with INFO\");\n }\n for (let index = 0; index < expectedIndices.length; index++)\n {\n const expected = expectedIndices[index];\n const metadataVariant = requireRecord(\n metadataVariants[index],\n `CEWG META variant ${index}`\n );\n const glslVariant = requireRecord(\n glslVariants[index],\n `CEWG GLSL variant ${index}`\n );\n if (metadataVariant.permutationIndex !== expected\n || glslVariant.permutationIndex !== expected\n || metadataVariant.key !== glslVariant.key\n || metadataVariant.bodyKey !== glslVariant.bodyKey)\n {\n throw new Error(`CEWG backend variant ${index} is inconsistent`);\n }\n const sourceVariant = graph.variants[expected];\n if (metadataVariant.bodyOffset !== sourceVariant.sourceRecord.offset\n || metadataVariant.bodySize !== sourceVariant.sourceRecord.byteLength)\n {\n throw new Error(`CEWG backend variant ${index} disagrees with PGRF`);\n }\n }\n if (metadataBodies.length !== info.uniqueBodyCount\n || glslBodies.length !== info.uniqueBodyCount\n || stages.length !== info.bodyStageCount\n || shaders.length !== info.uniqueShaderCount)\n {\n throw new Error(\"CEWG backend graph counts disagree with INFO\");\n }\n\n const metadataBodyMap = keyedRecordMap(metadataBodies, \"CEWG META body\");\n const glslBodyMap = keyedRecordMap(glslBodies, \"CEWG GLSL body\");\n const stageMap = keyedRecordMap(stages, \"CEWG GLSL stage\");\n const shaderMap = keyedRecordMap(shaders, \"CEWG GLSL shader\");\n const variantKeys = new Set();\n const referencedBodies = new Set();\n for (const [ index, variant ] of glslVariants.entries())\n {\n if (typeof variant.key !== \"string\" || !variant.key\n || variantKeys.has(variant.key)\n || !glslBodyMap.has(variant.bodyKey)\n || !metadataBodyMap.has(metadataVariants[index].bodyKey))\n {\n throw new Error(`CEWG backend variant ${index} references an invalid body`);\n }\n variantKeys.add(variant.key);\n referencedBodies.add(variant.bodyKey);\n }\n\n const referencedStages = new Set();\n for (const body of glslBodies)\n {\n const metadataBody = metadataBodyMap.get(body.key);\n const bodyStages = requireArray(\n body.stages,\n `CEWG GLSL body ${body.key}.stages`\n );\n if (!metadataBody\n || referencedBodies.has(body.key) === false\n || bodyStages.length !== new Set(bodyStages).size)\n {\n throw new Error(`CEWG backend body ${body.key} is inconsistent`);\n }\n for (const stageKey of bodyStages)\n {\n const stage = stageMap.get(stageKey);\n if (!stage || stage.bodyKey !== body.key)\n {\n throw new Error(\n `CEWG backend body ${body.key} references an invalid stage`\n );\n }\n referencedStages.add(stageKey);\n }\n }\n\n const referencedShaders = new Set();\n for (const stage of stages)\n {\n if (!referencedStages.has(stage.key)\n || !glslBodyMap.has(stage.bodyKey)\n || !shaderMap.has(stage.shaderKey))\n {\n throw new Error(`CEWG backend stage ${stage.key} is inconsistent`);\n }\n referencedShaders.add(stage.shaderKey);\n }\n if (referencedStages.size !== stageMap.size\n || referencedShaders.size !== shaderMap.size)\n {\n throw new Error(\"CEWG backend graph contains orphan stages or shaders\");\n }\n\n const excludedShaderCount = shaders.filter((shader) =>\n shader.excluded).length;\n const failedShaderCount = shaders.filter((shader) =>\n !shader.hlsl2webgl?.ok && !shader.excluded).length;\n const failedBodyCount = glslBodies.filter((body) => body.error).length;\n const availableShaderCount = shaders.filter((shader) =>\n shader.hlsl2webgl?.ok && shader.source).length;\n const raster = inspectCewgRasterCompleteness(stages, shaders);\n const counts = {\n translatedShaderCount:\n shaders.length - failedShaderCount - excludedShaderCount,\n excludedShaderCount,\n failedShaderCount,\n failedBodyCount,\n availableShaderCount,\n expectedRasterPassCount: raster.expectedPassCount,\n completeRasterPassCount: raster.completePassCount,\n incompleteRasterPassCount: raster.incompletePasses.length\n };\n for (const [ field, actual ] of Object.entries(counts))\n {\n if (info[field] !== actual)\n {\n throw new Error(`CEWG INFO.${field} disagrees with the backend graph`);\n }\n }\n}\n\nfunction keyedRecordMap(records, context)\n{\n const map = new Map();\n for (const [ index, value ] of records.entries())\n {\n const record = requireRecord(value, `${context} ${index}`);\n if (typeof record.key !== \"string\" || !record.key\n || map.has(record.key))\n {\n throw new Error(`${context} ${index} has a missing or duplicate key`);\n }\n map.set(record.key, record);\n }\n return map;\n}\n\nfunction samePipelineInputs(reflected, manifest)\n{\n const fields = [\n \"usage\",\n \"registerIndex\",\n \"usageIndex\",\n \"usedMask\",\n \"type\",\n \"dimension\"\n ];\n return Array.isArray(reflected)\n && Array.isArray(manifest)\n && reflected.length === manifest.length\n && reflected.every((entry, index) =>\n fields.every((field) => entry[field] === manifest[index]?.[field]));\n}\n\nfunction requireRecord(value, context)\n{\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n {\n throw new Error(`${context} must be an object`);\n }\n return value;\n}\n\nfunction requireArray(value, context)\n{\n if (!Array.isArray(value))\n {\n throw new Error(`${context} must be an array`);\n }\n return value;\n}\n\nfunction requireString(value, context)\n{\n if (typeof value !== \"string\" || !value)\n {\n throw new Error(`${context} must be a non-empty string`);\n }\n return value;\n}\n\nfunction requireUint(value, context)\n{\n if (!Number.isSafeInteger(value) || value < 0)\n {\n throw new Error(`${context} must be a non-negative safe integer`);\n }\n return value;\n}\n\nfunction jsonEqual(left, right)\n{\n return JSON.stringify(left) === JSON.stringify(right);\n}\n"],"names":["EFFECT_INFO_VERSION","EFFECT_PACKAGE_KINDS","Set","REQUIRED_EFFECT_CHUNKS","Object","freeze","SEMANTIC_VERSION","SHA256","validateEffectPackageEnvelope","pkg","GetChunk","info","requireRecord","GetJson","has","packageKind","tag","Error","format","formatVersion","targetBackend","backendPackage","test","backendPackageVersion","translator","translatorVersion","sourceIdentity","validateSourceIdentity","sourceByteLength","byteLength","sourceSha256","sha256","requireString","sourcePath","requireUint","defaultPermutationIndex","sourceEffectVersion","expectedMode","permutationMode","graphPointer","permutationGraph","chunk","EFFECT_PERMUTATION_GRAPH_CHUNK","EFFECT_PERMUTATION_GRAPH_FORMAT","EFFECT_PERMUTATION_GRAPH_VERSION","graphChunk","sha256Bytes","bytes","graph","graphCounts","validateEffectPermutationGraph","permutationCount","uniqueBodyCount","sourcePermutationCount","sourceUniqueBodyCount","metadata","glsl","validateBackendGraph","validateCompleteness","prototype","hasOwnProperty","call","EFFECT_REFLECTION_CHUNK","EFFECT_REFLECTION_BLOB_CHUNK","reflectionChunk","blobChunk","reflection","source","effectVersion","validateEffectReflectionPointer","effectReflection","reflectionBytes","validateReflectionBackendGraph","markEffectReflectionValidated","metadataBodies","Map","bodies","map","body","key","checkedBodies","variant","variants","bodyKey","add","metadataBody","get","reflected","effectReflectionForPermutation","permutationIndex","manifest","reflectedPasses","reflectedStages","technique","requireArray","techniques","passIndex","pass","passes","name","entries","push","techniqueName","states","renderStates","stage","stages","manifestPasses","manifestStages","length","reflectedPass","manifestPass","find","entry","jsonEqual","reflectedStage","sourceProgram","signature","input","manifestStage","stageType","stageName","kind","shaderSize","shaderBytecode","stringTableOffset","samePipelineInputs","pipelineInputs","threadGroupSize","size","some","value","identity","logicalPath","completeness","packageValid","runtimeComplete","sourceBodyCoverage","sourceComplete","backendProgramCoverage","selectionCoversWholeEffect","selection","expectedBackendCoverage","backendBodyCoverage","backendComplete","metadataVariants","glslVariants","glslBodies","shaders","expectedIndices","index","expected","metadataVariant","glslVariant","sourceVariant","bodyOffset","sourceRecord","offset","bodySize","bodyStageCount","uniqueShaderCount","metadataBodyMap","keyedRecordMap","glslBodyMap","stageMap","shaderMap","variantKeys","referencedBodies","referencedStages","bodyStages","stageKey","referencedShaders","shaderKey","excludedShaderCount","filter","shader","excluded","failedShaderCount","hlsl2webgl","ok","failedBodyCount","error","availableShaderCount","raster","inspectCewgRasterCompleteness","counts","translatedShaderCount","expectedRasterPassCount","expectedPassCount","completeRasterPassCount","completePassCount","incompleteRasterPassCount","incompletePasses","field","actual","records","context","record","set","fields","Array","isArray","every","Number","isSafeInteger","left","right","JSON","stringify"],"mappings":"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"}
|