@carbonenginejs/runtime-resource 0.9.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +3 -2
- package/README.md +47 -6
- package/dist/CjsMotherLode.js +88 -88
- package/dist/CjsMotherLode.js.map +1 -1
- package/dist/CjsResMan.js +717 -228
- package/dist/CjsResMan.js.map +1 -1
- package/dist/CjsResManFetchProvider.js +94 -0
- package/dist/CjsResManFetchProvider.js.map +1 -0
- package/dist/{CjsResManQueue.js → CjsResManWorkQueue.js} +112 -25
- package/dist/CjsResManWorkQueue.js.map +1 -0
- package/dist/format/CjsBlueReader.js +89 -0
- package/dist/format/CjsBlueReader.js.map +1 -1
- package/dist/format/CjsFormat.js +42 -16
- package/dist/format/CjsFormat.js.map +1 -1
- package/dist/format/CjsReader.js +4 -0
- package/dist/format/CjsReader.js.map +1 -1
- package/dist/format/CjsResourceProbe.js +2 -0
- package/dist/format/CjsResourceProbe.js.map +1 -1
- 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/format/payloadContract.js +20 -0
- package/dist/format/payloadContract.js.map +1 -1
- package/dist/formats/black/CjsBlackFormat.js +15 -1
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/formats/black/core/CjsBlackBinaryReader.js +103 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +61 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
- package/dist/formats/black/core/CjsBlackReader.js +125 -0
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +103 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
- package/dist/formats/black/core/helpers.js +17 -0
- package/dist/formats/black/core/helpers.js.map +1 -1
- package/dist/formats/bnk/CjsBnkFormat.js +8 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/helpers.js +20 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +40 -3
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/soundbanksInfo.js +2 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
- package/dist/formats/cmf/core/binary.js +71 -0
- package/dist/formats/cmf/core/binary.js.map +1 -1
- package/dist/formats/cmf/core/buffers.js +4 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -1
- package/dist/formats/cmf/core/helpers.js +31 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -1
- package/dist/formats/cmf/core/schema.js +10 -0
- package/dist/formats/cmf/core/schema.js.map +1 -1
- package/dist/formats/cmf/core/shared.js +9 -0
- package/dist/formats/cmf/core/shared.js.map +1 -1
- package/dist/formats/cmf/core/writer.js +54 -0
- package/dist/formats/cmf/core/writer.js.map +1 -1
- package/dist/formats/dds/core/bc6h.js +10 -0
- package/dist/formats/dds/core/bc6h.js.map +1 -1
- package/dist/formats/dds/core/bc7.js +16 -0
- package/dist/formats/dds/core/bc7.js.map +1 -1
- package/dist/formats/dds/core/helpers.js +47 -0
- package/dist/formats/dds/core/helpers.js.map +1 -1
- 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/fbx/core/helpers.js +21 -0
- package/dist/formats/fbx/core/helpers.js.map +1 -1
- package/dist/formats/flac/CjsFlacFormat.js +49 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/formats/flac/core/helpers.js +20 -0
- package/dist/formats/flac/core/helpers.js.map +1 -1
- package/dist/formats/gif/CjsGifFormat.js +49 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/formats/gif/core/helpers.js +20 -0
- package/dist/formats/gif/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +15 -0
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/parser.js +13 -0
- package/dist/formats/gltf/core/parser.js.map +1 -1
- package/dist/formats/gltf/core/targets.js +10 -0
- package/dist/formats/gltf/core/targets.js.map +1 -1
- package/dist/formats/gr2/core/bitknit2.js +2 -0
- package/dist/formats/gr2/core/bitknit2.js.map +1 -1
- package/dist/formats/gr2/core/helpers.js +20 -0
- package/dist/formats/gr2/core/helpers.js.map +1 -1
- package/dist/formats/gr2/core/targets.js +10 -0
- package/dist/formats/gr2/core/targets.js.map +1 -1
- 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/jpeg/core/helpers.js +52 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/formats/jpeg/core/jpeg.js +93 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/formats/mp3/core/helpers.js +37 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -1
- package/dist/formats/mp4/core/helpers.js +35 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -1
- package/dist/formats/ogg/CjsOggFormat.js +49 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/formats/ogg/core/helpers.js +23 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -1
- package/dist/formats/ogg/core/vorbis.js +13 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -1
- package/dist/formats/png/core/helpers.js +52 -0
- package/dist/formats/png/core/helpers.js.map +1 -1
- package/dist/formats/red/CjsRedFormat.js +2 -0
- package/dist/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/formats/red/core/CjsRedReader.js +52 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -1
- package/dist/formats/red/core/helpers.js +19 -0
- package/dist/formats/red/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/stl.js +8 -0
- package/dist/formats/stl/core/stl.js.map +1 -1
- package/dist/formats/stl/core/targets.js +10 -0
- package/dist/formats/stl/core/targets.js.map +1 -1
- package/dist/formats/tga/core/helpers.js +47 -0
- package/dist/formats/tga/core/helpers.js.map +1 -1
- package/dist/formats/wav/core/helpers.js +37 -0
- package/dist/formats/wav/core/helpers.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/formats/webm/core/helpers.js +35 -0
- package/dist/formats/webm/core/helpers.js.map +1 -1
- package/dist/formats/webp/CjsWebpFormat.js +49 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/formats/webp/core/helpers.js +23 -0
- package/dist/formats/webp/core/helpers.js.map +1 -1
- package/dist/formats/wem/CjsWemFormat.js +8 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/formats/wem/core/bitStream.js +2 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -1
- package/dist/formats/wem/core/helpers.js +20 -0
- package/dist/formats/wem/core/helpers.js.map +1 -1
- package/dist/formats/yaml/CjsYamlFormat.js +45 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +91 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +10 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/index.js +56 -43
- package/dist/index.js.map +1 -1
- package/dist/{CjsResource.js → resource/CjsResource.js} +232 -17
- package/dist/resource/CjsResource.js.map +1 -0
- package/dist/{resources → resource}/Tr2LightProfileRes.js +4 -3
- package/dist/resource/Tr2LightProfileRes.js.map +1 -0
- package/dist/{resources → resource/audio}/AudioGeometryResData.js +1 -1
- package/dist/resource/audio/AudioGeometryResData.js.map +1 -0
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -0
- package/dist/resource/audio/CjsAudioBufferRes.js.map +1 -0
- package/dist/resource/audio/CjsAudioRes.js +213 -0
- package/dist/resource/audio/CjsAudioRes.js.map +1 -0
- package/dist/resource/audio/index.js +4 -0
- package/dist/resource/audio/index.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalData.js +1 -1
- package/dist/resource/geometry/MeshDecalData.js.map +1 -0
- package/dist/{resources → resource/geometry}/MeshDecalLodData.js +1 -1
- package/dist/resource/geometry/MeshDecalLodData.js.map +1 -0
- package/dist/resource/geometry/TriGeometryRes.js +656 -0
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResAreaData.js +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResJointData.js +1 -1
- package/dist/resource/geometry/TriGeometryResJointData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResLodData.js +1 -1
- package/dist/resource/geometry/TriGeometryResLodData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResMeshData.js +1 -1
- package/dist/resource/geometry/TriGeometryResMeshData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriGeometryResSkeletonData.js +1 -1
- package/dist/resource/geometry/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriJointBinding.js +1 -1
- package/dist/resource/geometry/TriJointBinding.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriMorphTargetGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry}/TriRtGeometryConstants.js +1 -1
- package/dist/resource/geometry/TriRtGeometryConstants.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/GStateBindingCallbackData.js +1 -1
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyIntersectionResult.js +1 -1
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/Tr2GrannyStateRes.js +6 -5
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/TriGrannyRes.js +6 -5
- package/dist/resource/geometry/granny/TriGrannyRes.js.map +1 -0
- package/dist/{resources → resource/geometry/granny}/enums.js +1 -9
- package/dist/resource/geometry/granny/enums.js.map +1 -0
- package/dist/resource/geometry/granny/index.js +6 -0
- package/dist/resource/geometry/granny/index.js.map +1 -0
- package/dist/resource/geometry/index.js +17 -0
- package/dist/resource/geometry/index.js.map +1 -0
- package/dist/resource/index.js +52 -0
- package/dist/resource/index.js.map +1 -0
- package/dist/resource/resourceBoundary.js +64 -0
- package/dist/resource/resourceBoundary.js.map +1 -0
- package/dist/resource/shader/Tr2EffectRes.js +429 -0
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialArea.js +34 -0
- package/dist/resource/shader/Tr2MaterialArea.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialMesh.js +30 -0
- package/dist/resource/shader/Tr2MaterialMesh.js.map +1 -0
- package/dist/resource/shader/Tr2MaterialRes.js +35 -0
- package/dist/resource/shader/Tr2MaterialRes.js.map +1 -0
- package/dist/resource/shader/Tr2Shader.js +256 -0
- package/dist/resource/shader/Tr2Shader.js.map +1 -0
- package/dist/resource/shader/Tr2ShaderPermutation.js +47 -0
- package/dist/resource/shader/Tr2ShaderPermutation.js.map +1 -0
- package/dist/resource/shader/index.js +17 -0
- package/dist/resource/shader/index.js.map +1 -0
- package/dist/resource/shader/portable.js +33 -0
- package/dist/resource/shader/portable.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +135 -0
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +28 -0
- package/dist/resource/shader/reflection/Tr2EffectDefine.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +107 -0
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +145 -0
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +103 -0
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js +84 -0
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +239 -0
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +66 -0
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -0
- package/dist/resource/shader/reflection/Tr2Pass.js +109 -0
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +75 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -0
- package/dist/{texture → resource/texture}/CjsTextureArrayRes.js +83 -6
- package/dist/resource/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/{texture/CjsTextureParameterProxy.js → resource/texture/CjsTextureArrayResParameterProxy.js} +56 -10
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2ImageRes.js +6 -4
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodManager.js +3 -1
- package/dist/resource/texture/Tr2TextureLodManager.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TextureLodUpdateRequest.js +1 -1
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePackChannel.js +1 -1
- package/dist/resource/texture/Tr2TexturePackChannel.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipeline.js +6 -4
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineParams.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepCompress.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepGenerateMips.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLimitSize.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepLoad.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/{resources → resource/texture}/Tr2TexturePipelineStepPack.js +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/{resources → resource/texture}/TriTextureRes.js +42 -26
- package/dist/resource/texture/TriTextureRes.js.map +1 -0
- package/dist/resource/texture/index.js +15 -0
- package/dist/resource/texture/index.js.map +1 -0
- package/dist/{resources → resource/texture}/texturePipelineBehavior.js +59 -59
- package/dist/resource/texture/texturePipelineBehavior.js.map +1 -0
- package/dist/worker/CjsResManMainThreadLoader.js +87 -0
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -0
- package/dist/worker/CjsResManWorker.js +217 -0
- package/dist/worker/CjsResManWorker.js.map +1 -0
- package/dist/worker/CjsResManWorkerLoader.js +434 -0
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -0
- package/dist/worker/protocol.js +12 -0
- package/dist/worker/protocol.js.map +1 -0
- package/docs/README.md +16 -3
- package/docs/architecture.md +39 -16
- package/docs/concepts/resource-lifecycle.md +2 -1
- package/docs/formats/README.md +8 -0
- package/docs/formats/provenance.md +11 -3
- package/docs/reference/classes/README.md +6 -4
- package/docs/reference/classes/audio.md +30 -0
- package/docs/reference/classes/core.md +31 -11
- package/docs/reference/classes/formats.md +440 -0
- package/docs/reference/classes/resources.md +151 -41
- package/docs/reference/classes/texture.md +7 -7
- package/docs/reference/motherlode-cache.md +17 -0
- package/docs/reference/queues.md +9 -1
- package/docs/reference/workers.md +135 -0
- package/docs/roadmap.md +27 -1
- 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 +13 -1
- package/dist/CjsResManQueue.js.map +0 -1
- package/dist/CjsResource.js.map +0 -1
- package/dist/CjsResourceSource.js +0 -68
- package/dist/CjsResourceSource.js.map +0 -1
- package/dist/resourcePath.js +0 -18
- package/dist/resourcePath.js.map +0 -1
- package/dist/resourceStates.js +0 -9
- package/dist/resourceStates.js.map +0 -1
- package/dist/resources/AudioGeometryResData.js.map +0 -1
- package/dist/resources/GStateBindingCallbackData.js.map +0 -1
- package/dist/resources/MeshDecalData.js.map +0 -1
- package/dist/resources/MeshDecalLodData.js.map +0 -1
- package/dist/resources/Tr2EffectRes.js +0 -71
- package/dist/resources/Tr2EffectRes.js.map +0 -1
- package/dist/resources/Tr2GrannyIntersectionResult.js.map +0 -1
- package/dist/resources/Tr2GrannyStateRes.js.map +0 -1
- package/dist/resources/Tr2ImageRes.js.map +0 -1
- package/dist/resources/Tr2LightProfileRes.js.map +0 -1
- package/dist/resources/Tr2MaterialArea.js +0 -34
- package/dist/resources/Tr2MaterialArea.js.map +0 -1
- package/dist/resources/Tr2MaterialMesh.js +0 -31
- package/dist/resources/Tr2MaterialMesh.js.map +0 -1
- package/dist/resources/Tr2MaterialRes.js +0 -34
- package/dist/resources/Tr2MaterialRes.js.map +0 -1
- package/dist/resources/Tr2ShaderPermutation.js +0 -43
- package/dist/resources/Tr2ShaderPermutation.js.map +0 -1
- package/dist/resources/Tr2TextureLodManager.js.map +0 -1
- package/dist/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
- package/dist/resources/Tr2TexturePackChannel.js.map +0 -1
- package/dist/resources/Tr2TexturePipeline.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineParams.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
- package/dist/resources/Tr2TexturePipelineStepPack.js.map +0 -1
- package/dist/resources/TriGeometryRes.js +0 -239
- package/dist/resources/TriGeometryRes.js.map +0 -1
- package/dist/resources/TriGeometryResAreaData.js.map +0 -1
- package/dist/resources/TriGeometryResJointData.js.map +0 -1
- package/dist/resources/TriGeometryResLodData.js.map +0 -1
- package/dist/resources/TriGeometryResMeshData.js.map +0 -1
- package/dist/resources/TriGeometryResSkeletonData.js.map +0 -1
- package/dist/resources/TriGrannyRes.js.map +0 -1
- package/dist/resources/TriJointBinding.js.map +0 -1
- package/dist/resources/TriMorphTargetGeometryConstants.js.map +0 -1
- package/dist/resources/TriRtGeometryConstants.js.map +0 -1
- package/dist/resources/TriTextureRes.js.map +0 -1
- package/dist/resources/enums.js.map +0 -1
- package/dist/resources/resourceBoundary.js +0 -47
- package/dist/resources/resourceBoundary.js.map +0 -1
- package/dist/resources/texturePipelineBehavior.js.map +0 -1
- package/dist/texture/CjsTextureArrayRes.js.map +0 -1
- package/dist/texture/CjsTextureParameterProxy.js.map +0 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { normalizeResourceTransformPlan } from './buildResourceTransformPlan.js';
|
|
2
|
+
|
|
3
|
+
const WGSL_SET_VERSION = 3;
|
|
4
|
+
const KEY_PATTERN = /^(.*)\.pass([0-9]+)\.(vertex|pixel|compute)$/;
|
|
5
|
+
const KEY_STAGE = Object.freeze({
|
|
6
|
+
vertex: "vertex",
|
|
7
|
+
pixel: "fragment",
|
|
8
|
+
compute: "compute"
|
|
9
|
+
});
|
|
10
|
+
const STAGE_TYPES = Object.freeze({
|
|
11
|
+
vertex: 0,
|
|
12
|
+
pixel: 1,
|
|
13
|
+
compute: 2
|
|
14
|
+
});
|
|
15
|
+
const STAGE_NAME_ORDER = Object.freeze(["vertex", "pixel", "compute"]);
|
|
16
|
+
const VISIBILITY_ORDER = Object.freeze(["vertex", "fragment", "compute"]);
|
|
17
|
+
function clonePlain(value) {
|
|
18
|
+
if (Array.isArray(value)) return value.map(clonePlain);
|
|
19
|
+
if (value && typeof value === "object") {
|
|
20
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, clonePlain(entry)]));
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function deepFreeze(value) {
|
|
25
|
+
if (!value || typeof value !== "object" || Object.isFrozen(value)) return value;
|
|
26
|
+
for (const entry of Object.values(value)) deepFreeze(entry);
|
|
27
|
+
return Object.freeze(value);
|
|
28
|
+
}
|
|
29
|
+
function normalizeEntry(entry, index) {
|
|
30
|
+
const shader = entry?.shader;
|
|
31
|
+
if (shader?.format !== "CJS_WGSL_SHADER" || shader.formatVersion !== 1 || typeof shader.code !== "string" || !shader.code || typeof shader.entryPoint !== "string" || !shader.entryPoint || !Array.isArray(shader.sourceMap) || shader.program?.format !== "CJS_TYPED_SHADER") {
|
|
32
|
+
throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);
|
|
33
|
+
}
|
|
34
|
+
const key = typeof entry.key === "string" ? entry.key : "";
|
|
35
|
+
const match = KEY_PATTERN.exec(key);
|
|
36
|
+
if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || "<empty>"}`);
|
|
37
|
+
const techniqueName = match[1];
|
|
38
|
+
const passIndex = Number(match[2]);
|
|
39
|
+
const stageName = match[3];
|
|
40
|
+
if (shader.stage !== KEY_STAGE[stageName]) {
|
|
41
|
+
throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);
|
|
42
|
+
}
|
|
43
|
+
let threadGroupSize = null;
|
|
44
|
+
if (stageName === "compute") {
|
|
45
|
+
threadGroupSize = shader.threadGroupSize;
|
|
46
|
+
if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3 || threadGroupSize.some(value => !Number.isSafeInteger(value) || value < 1)) {
|
|
47
|
+
throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);
|
|
48
|
+
}
|
|
49
|
+
} else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null) {
|
|
50
|
+
throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
shader,
|
|
54
|
+
stage: shader.stage,
|
|
55
|
+
techniqueName,
|
|
56
|
+
passIndex,
|
|
57
|
+
stageName,
|
|
58
|
+
stageType: STAGE_TYPES[stageName],
|
|
59
|
+
...(threadGroupSize ? {
|
|
60
|
+
threadGroupSize: clonePlain(threadGroupSize)
|
|
61
|
+
} : {}),
|
|
62
|
+
key
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function portableBinding(binding, visibility) {
|
|
66
|
+
if (!Number.isInteger(binding.group) || binding.group < 0 || !Number.isInteger(binding.binding) || binding.binding < 0 || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0 || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0 || typeof binding.resourceKind !== "string" || !binding.resourceKind || typeof binding.generatedSymbol !== "string" || !binding.generatedSymbol || typeof binding.type !== "string" || !binding.type) {
|
|
67
|
+
throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || "unknown"} has an invalid portable identity`);
|
|
68
|
+
}
|
|
69
|
+
const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;
|
|
70
|
+
if (binding.scopeIdentity !== undefined && (typeof binding.scopeIdentity !== "string" || !binding.scopeIdentity)) {
|
|
71
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || "<empty>"}`);
|
|
72
|
+
}
|
|
73
|
+
const scopeIdentity = binding.scopeIdentity === undefined ? `${identity}@${visibility}` : binding.scopeIdentity;
|
|
74
|
+
if (binding.identity !== undefined && binding.identity !== identity) {
|
|
75
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);
|
|
76
|
+
}
|
|
77
|
+
const hasTransform = binding.transformId !== undefined || binding.arrayLayerCount !== undefined;
|
|
78
|
+
if (hasTransform && (binding.resourceKind !== "sampled-resource" || typeof binding.transformId !== "string" || !binding.transformId || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2 || binding.type !== "texture_2d_array<f32>" || binding.texture?.viewDimension !== "2d-array")) {
|
|
79
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);
|
|
80
|
+
}
|
|
81
|
+
if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`) {
|
|
82
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);
|
|
83
|
+
}
|
|
84
|
+
const descriptorKeys = ["buffer", "texture", "sampler"].filter(key => binding[key]);
|
|
85
|
+
const expectedDescriptors = {
|
|
86
|
+
"uniform-buffer": ["buffer"],
|
|
87
|
+
"sampled-resource": ["buffer", "texture"],
|
|
88
|
+
"storage-resource": ["buffer"],
|
|
89
|
+
sampler: ["sampler"]
|
|
90
|
+
}[binding.resourceKind];
|
|
91
|
+
if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0])) {
|
|
92
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
identity,
|
|
96
|
+
scopeIdentity,
|
|
97
|
+
resourceKind: binding.resourceKind,
|
|
98
|
+
generatedSymbol: binding.generatedSymbol,
|
|
99
|
+
registerSpace: binding.registerSpace,
|
|
100
|
+
registerIndex: binding.registerIndex,
|
|
101
|
+
group: binding.group,
|
|
102
|
+
binding: binding.binding,
|
|
103
|
+
visibility: [visibility],
|
|
104
|
+
type: binding.type,
|
|
105
|
+
...(hasTransform ? {
|
|
106
|
+
transformId: binding.transformId,
|
|
107
|
+
arrayLayerCount: binding.arrayLayerCount
|
|
108
|
+
} : {}),
|
|
109
|
+
...(Number.isInteger(binding.structureStride) ? {
|
|
110
|
+
structureStride: binding.structureStride
|
|
111
|
+
} : {}),
|
|
112
|
+
...(binding.buffer ? {
|
|
113
|
+
buffer: clonePlain(binding.buffer)
|
|
114
|
+
} : {}),
|
|
115
|
+
...(binding.texture ? {
|
|
116
|
+
texture: clonePlain(binding.texture)
|
|
117
|
+
} : {}),
|
|
118
|
+
...(binding.sampler ? {
|
|
119
|
+
sampler: clonePlain(binding.sampler)
|
|
120
|
+
} : {})
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function bindingIdentity(binding) {
|
|
124
|
+
return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;
|
|
125
|
+
}
|
|
126
|
+
function bindingFingerprint(binding) {
|
|
127
|
+
return JSON.stringify({
|
|
128
|
+
resourceKind: binding.resourceKind,
|
|
129
|
+
identity: binding.identity,
|
|
130
|
+
scopeIdentity: binding.scopeIdentity,
|
|
131
|
+
generatedSymbol: binding.generatedSymbol,
|
|
132
|
+
registerSpace: binding.registerSpace,
|
|
133
|
+
registerIndex: binding.registerIndex,
|
|
134
|
+
group: binding.group,
|
|
135
|
+
binding: binding.binding,
|
|
136
|
+
type: binding.type,
|
|
137
|
+
transformId: binding.transformId ?? null,
|
|
138
|
+
arrayLayerCount: binding.arrayLayerCount ?? null,
|
|
139
|
+
structureStride: binding.structureStride ?? null,
|
|
140
|
+
buffer: binding.buffer || null,
|
|
141
|
+
texture: binding.texture || null,
|
|
142
|
+
sampler: binding.sampler || null
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function buildLayouts(entries) {
|
|
146
|
+
const passes = new Map();
|
|
147
|
+
for (const entry of entries) {
|
|
148
|
+
const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;
|
|
149
|
+
if (!passes.has(passKey)) {
|
|
150
|
+
passes.set(passKey, {
|
|
151
|
+
identities: new Map(),
|
|
152
|
+
baseScopes: new Map(),
|
|
153
|
+
slots: new Map()
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const pass = passes.get(passKey);
|
|
157
|
+
const symbols = new Map();
|
|
158
|
+
const d3dIdentities = new Set();
|
|
159
|
+
for (const source of entry.shader.program.bindings || []) {
|
|
160
|
+
const binding = portableBinding(source, entry.stage);
|
|
161
|
+
const identity = bindingIdentity(binding);
|
|
162
|
+
if (d3dIdentities.has(binding.identity)) {
|
|
163
|
+
throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);
|
|
164
|
+
}
|
|
165
|
+
d3dIdentities.add(binding.identity);
|
|
166
|
+
if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());
|
|
167
|
+
const baseScopes = pass.baseScopes.get(binding.identity);
|
|
168
|
+
if (identity === binding.identity && Array.from(baseScopes).some(scope => scope !== binding.identity) || identity !== binding.identity && baseScopes.has(binding.identity)) {
|
|
169
|
+
throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);
|
|
170
|
+
}
|
|
171
|
+
baseScopes.add(identity);
|
|
172
|
+
if (symbols.has(binding.generatedSymbol)) {
|
|
173
|
+
throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);
|
|
174
|
+
}
|
|
175
|
+
symbols.set(binding.generatedSymbol, identity);
|
|
176
|
+
const slot = `${binding.group}:${binding.binding}`;
|
|
177
|
+
const existingSlot = pass.slots.get(slot);
|
|
178
|
+
if (existingSlot && existingSlot !== identity) {
|
|
179
|
+
throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);
|
|
180
|
+
}
|
|
181
|
+
pass.slots.set(slot, identity);
|
|
182
|
+
const existing = pass.identities.get(identity);
|
|
183
|
+
if (!existing) {
|
|
184
|
+
pass.identities.set(identity, binding);
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
if (bindingFingerprint(existing) !== bindingFingerprint(binding)) {
|
|
188
|
+
throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);
|
|
189
|
+
}
|
|
190
|
+
existing.visibility = Array.from(new Set([...existing.visibility, ...binding.visibility])).sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return Array.from(passes, ([key, pass]) => {
|
|
194
|
+
for (const [identity, scopes] of pass.baseScopes) {
|
|
195
|
+
if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2) {
|
|
196
|
+
throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const groups = new Map();
|
|
200
|
+
for (const binding of pass.identities.values()) {
|
|
201
|
+
if (!groups.has(binding.group)) groups.set(binding.group, []);
|
|
202
|
+
groups.get(binding.group).push(binding);
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
key,
|
|
206
|
+
techniqueName: key.slice(0, key.lastIndexOf(".pass")),
|
|
207
|
+
passIndex: Number(/\.pass([0-9]+)$/.exec(key)?.[1]),
|
|
208
|
+
bindGroups: Array.from(groups, ([group, bindings]) => ({
|
|
209
|
+
group,
|
|
210
|
+
bindings: bindings.sort((left, right) => left.binding - right.binding)
|
|
211
|
+
})).sort((left, right) => left.group - right.group)
|
|
212
|
+
};
|
|
213
|
+
}).sort((left, right) => left.techniqueName.localeCompare(right.techniqueName) || left.passIndex - right.passIndex);
|
|
214
|
+
}
|
|
215
|
+
function validatePassTopologies(entries) {
|
|
216
|
+
const stagesByPass = new Map();
|
|
217
|
+
for (const entry of entries) {
|
|
218
|
+
const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;
|
|
219
|
+
if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);
|
|
220
|
+
stagesByPass.get(passKey).push(entry.stageName);
|
|
221
|
+
}
|
|
222
|
+
for (const [passKey, stages] of stagesByPass) {
|
|
223
|
+
if (stages.includes("compute") && (stages.length !== 1 || stages[0] !== "compute")) {
|
|
224
|
+
throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function buildResourceTransforms(entries, layouts) {
|
|
229
|
+
const raw = entries.flatMap(entry => entry.shader.program.resourceTransforms || []);
|
|
230
|
+
const transformedBindings = layouts.flatMap(layout => layout.bindGroups.flatMap(group => group.bindings.filter(binding => binding.transformId).map(binding => ({
|
|
231
|
+
layoutKey: layout.key,
|
|
232
|
+
binding
|
|
233
|
+
}))));
|
|
234
|
+
if (!raw.length) {
|
|
235
|
+
if (transformedBindings.length) {
|
|
236
|
+
throw new Error("WGSL set has transformed bindings without resource recipes");
|
|
237
|
+
}
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
const plan = normalizeResourceTransformPlan({
|
|
241
|
+
format: "CJS_WGSL_RESOURCE_TRANSFORM_PLAN",
|
|
242
|
+
formatVersion: 1,
|
|
243
|
+
resourceTransforms: raw
|
|
244
|
+
});
|
|
245
|
+
const ids = new Set(plan.resourceTransforms.map(transform => transform.id));
|
|
246
|
+
for (const {
|
|
247
|
+
binding
|
|
248
|
+
} of transformedBindings) {
|
|
249
|
+
if (!ids.has(binding.transformId)) {
|
|
250
|
+
throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
for (const transform of plan.resourceTransforms) {
|
|
254
|
+
const stageKey = `${transform.layoutKey}.pixel`;
|
|
255
|
+
if (!entries.some(entry => entry.key === stageKey)) {
|
|
256
|
+
throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);
|
|
257
|
+
}
|
|
258
|
+
const links = transformedBindings.filter(({
|
|
259
|
+
layoutKey,
|
|
260
|
+
binding
|
|
261
|
+
}) => layoutKey === transform.layoutKey && binding.transformId === transform.id);
|
|
262
|
+
if (links.length !== 1) {
|
|
263
|
+
throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);
|
|
264
|
+
}
|
|
265
|
+
const binding = links[0].binding;
|
|
266
|
+
if (binding.identity !== transform.output.identity || binding.scopeIdentity !== transform.output.scopeIdentity || binding.texture?.viewDimension !== transform.output.viewDimension || binding.arrayLayerCount !== transform.output.layerCount) {
|
|
267
|
+
throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);
|
|
268
|
+
}
|
|
269
|
+
const transformLayout = layouts.find(layout => layout.key === transform.layoutKey);
|
|
270
|
+
const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap(group => group.bindings.map(entry => entry.scopeIdentity)));
|
|
271
|
+
for (const input of transform.inputs.slice(1)) {
|
|
272
|
+
if (physicalScopes.has(input.scopeIdentity)) {
|
|
273
|
+
throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return plan.resourceTransforms;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Builds the portable JSON document stored in a CEWGPU `WGSL` chunk.
|
|
282
|
+
* Existing numeric bindings are validated and never reassigned.
|
|
283
|
+
*
|
|
284
|
+
* @param {Array<object>} input Wrapped emitted shader descriptors.
|
|
285
|
+
* @returns {object} Frozen CJS_WGSL_SET document.
|
|
286
|
+
*/
|
|
287
|
+
function buildWgslSet(input) {
|
|
288
|
+
if (!Array.isArray(input) || !input.length) throw new TypeError("BuildWgslSet expects a non-empty shader entry array");
|
|
289
|
+
const entries = input.map(normalizeEntry);
|
|
290
|
+
const keys = new Set();
|
|
291
|
+
const shaders = entries.map(entry => {
|
|
292
|
+
if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);
|
|
293
|
+
keys.add(entry.key);
|
|
294
|
+
return {
|
|
295
|
+
key: entry.key,
|
|
296
|
+
techniqueName: entry.techniqueName,
|
|
297
|
+
passIndex: entry.passIndex,
|
|
298
|
+
stageName: entry.stageName,
|
|
299
|
+
stage: entry.stage,
|
|
300
|
+
stageType: entry.stageType,
|
|
301
|
+
entryPoint: entry.shader.entryPoint,
|
|
302
|
+
code: entry.shader.code,
|
|
303
|
+
sourceMap: clonePlain(entry.shader.sourceMap || []),
|
|
304
|
+
...(entry.threadGroupSize ? {
|
|
305
|
+
threadGroupSize: clonePlain(entry.threadGroupSize)
|
|
306
|
+
} : {})
|
|
307
|
+
};
|
|
308
|
+
}).sort((left, right) => left.techniqueName.localeCompare(right.techniqueName) || left.passIndex - right.passIndex || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));
|
|
309
|
+
validatePassTopologies(entries);
|
|
310
|
+
const layouts = buildLayouts(entries);
|
|
311
|
+
const resourceTransforms = buildResourceTransforms(entries, layouts);
|
|
312
|
+
return deepFreeze({
|
|
313
|
+
format: "CJS_WGSL_SET",
|
|
314
|
+
formatVersion: WGSL_SET_VERSION,
|
|
315
|
+
shaders,
|
|
316
|
+
layouts,
|
|
317
|
+
...(resourceTransforms.length ? {
|
|
318
|
+
resourceTransforms
|
|
319
|
+
} : {})
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
export { WGSL_SET_VERSION, buildWgslSet };
|
|
324
|
+
//# sourceMappingURL=buildWgslSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildWgslSet.js","sources":["../../../../../../src/formats/webgpu/core/wgsl/buildWgslSet.js"],"sourcesContent":["import { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\n\nexport const WGSL_SET_VERSION = 3;\n\nconst KEY_PATTERN = /^(.*)\\.pass([0-9]+)\\.(vertex|pixel|compute)$/;\nconst KEY_STAGE = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\nconst STAGE_TYPES = Object.freeze({ vertex: 0, pixel: 1, compute: 2 });\nconst STAGE_NAME_ORDER = Object.freeze([ \"vertex\", \"pixel\", \"compute\" ]);\n\nconst VISIBILITY_ORDER = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\n\nfunction clonePlain(value)\n{\n if (Array.isArray(value)) return value.map(clonePlain);\n if (value && typeof value === \"object\")\n {\n return Object.fromEntries(Object.entries(value).map(([ key, entry ]) => [ key, clonePlain(entry) ]));\n }\n return value;\n}\n\nfunction deepFreeze(value)\n{\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) return value;\n for (const entry of Object.values(value)) deepFreeze(entry);\n return Object.freeze(value);\n}\n\nfunction normalizeEntry(entry, index)\n{\n const shader = entry?.shader;\n if (shader?.format !== \"CJS_WGSL_SHADER\" || shader.formatVersion !== 1\n || typeof shader.code !== \"string\" || !shader.code\n || typeof shader.entryPoint !== \"string\" || !shader.entryPoint\n || !Array.isArray(shader.sourceMap)\n || shader.program?.format !== \"CJS_TYPED_SHADER\")\n {\n throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);\n }\n const key = typeof entry.key === \"string\" ? entry.key : \"\";\n const match = KEY_PATTERN.exec(key);\n if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || \"<empty>\"}`);\n const techniqueName = match[1];\n const passIndex = Number(match[2]);\n const stageName = match[3];\n if (shader.stage !== KEY_STAGE[stageName])\n {\n throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);\n }\n let threadGroupSize = null;\n if (stageName === \"compute\")\n {\n threadGroupSize = shader.threadGroupSize;\n if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3\n || threadGroupSize.some((value) => !Number.isSafeInteger(value) || value < 1))\n {\n throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);\n }\n }\n else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null)\n {\n throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);\n }\n return {\n shader,\n stage: shader.stage,\n techniqueName,\n passIndex,\n stageName,\n stageType: STAGE_TYPES[stageName],\n ...(threadGroupSize ? { threadGroupSize: clonePlain(threadGroupSize) } : {}),\n key\n };\n}\n\nfunction portableBinding(binding, visibility)\n{\n if (!Number.isInteger(binding.group) || binding.group < 0\n || !Number.isInteger(binding.binding) || binding.binding < 0\n || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0\n || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0\n || typeof binding.resourceKind !== \"string\" || !binding.resourceKind\n || typeof binding.generatedSymbol !== \"string\" || !binding.generatedSymbol\n || typeof binding.type !== \"string\" || !binding.type)\n {\n throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || \"unknown\"} has an invalid portable identity`);\n }\n const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n if (binding.scopeIdentity !== undefined\n && (typeof binding.scopeIdentity !== \"string\" || !binding.scopeIdentity))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || \"<empty>\"}`);\n }\n const scopeIdentity = binding.scopeIdentity === undefined\n ? `${identity}@${visibility}`\n : binding.scopeIdentity;\n if (binding.identity !== undefined && binding.identity !== identity)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);\n }\n const hasTransform = binding.transformId !== undefined\n || binding.arrayLayerCount !== undefined;\n if (hasTransform\n && (binding.resourceKind !== \"sampled-resource\"\n || typeof binding.transformId !== \"string\" || !binding.transformId\n || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2\n || binding.type !== \"texture_2d_array<f32>\"\n || binding.texture?.viewDimension !== \"2d-array\"))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);\n }\n if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);\n }\n const descriptorKeys = [ \"buffer\", \"texture\", \"sampler\" ].filter((key) => binding[key]);\n const expectedDescriptors = {\n \"uniform-buffer\": [ \"buffer\" ],\n \"sampled-resource\": [ \"buffer\", \"texture\" ],\n \"storage-resource\": [ \"buffer\" ],\n sampler: [ \"sampler\" ]\n }[binding.resourceKind];\n if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0]))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);\n }\n return {\n identity,\n scopeIdentity,\n resourceKind: binding.resourceKind,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n visibility: [ visibility ],\n type: binding.type,\n ...(hasTransform\n ? {\n transformId: binding.transformId,\n arrayLayerCount: binding.arrayLayerCount\n }\n : {}),\n ...(Number.isInteger(binding.structureStride) ? { structureStride: binding.structureStride } : {}),\n ...(binding.buffer ? { buffer: clonePlain(binding.buffer) } : {}),\n ...(binding.texture ? { texture: clonePlain(binding.texture) } : {}),\n ...(binding.sampler ? { sampler: clonePlain(binding.sampler) } : {})\n };\n}\n\nfunction bindingIdentity(binding)\n{\n return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n}\n\nfunction bindingFingerprint(binding)\n{\n return JSON.stringify({\n resourceKind: binding.resourceKind,\n identity: binding.identity,\n scopeIdentity: binding.scopeIdentity,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n type: binding.type,\n transformId: binding.transformId ?? null,\n arrayLayerCount: binding.arrayLayerCount ?? null,\n structureStride: binding.structureStride ?? null,\n buffer: binding.buffer || null,\n texture: binding.texture || null,\n sampler: binding.sampler || null\n });\n}\n\nfunction buildLayouts(entries)\n{\n const passes = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!passes.has(passKey))\n {\n passes.set(passKey, { identities: new Map(), baseScopes: new Map(), slots: new Map() });\n }\n const pass = passes.get(passKey);\n const symbols = new Map();\n const d3dIdentities = new Set();\n for (const source of entry.shader.program.bindings || [])\n {\n const binding = portableBinding(source, entry.stage);\n const identity = bindingIdentity(binding);\n if (d3dIdentities.has(binding.identity))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);\n }\n d3dIdentities.add(binding.identity);\n if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());\n const baseScopes = pass.baseScopes.get(binding.identity);\n if ((identity === binding.identity && Array.from(baseScopes).some((scope) => scope !== binding.identity))\n || (identity !== binding.identity && baseScopes.has(binding.identity)))\n {\n throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);\n }\n baseScopes.add(identity);\n if (symbols.has(binding.generatedSymbol))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);\n }\n symbols.set(binding.generatedSymbol, identity);\n const slot = `${binding.group}:${binding.binding}`;\n const existingSlot = pass.slots.get(slot);\n if (existingSlot && existingSlot !== identity)\n {\n throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);\n }\n pass.slots.set(slot, identity);\n const existing = pass.identities.get(identity);\n if (!existing)\n {\n pass.identities.set(identity, binding);\n continue;\n }\n if (bindingFingerprint(existing) !== bindingFingerprint(binding))\n {\n throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);\n }\n existing.visibility = Array.from(new Set([ ...existing.visibility, ...binding.visibility ]))\n .sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));\n }\n }\n return Array.from(passes, ([ key, pass ]) =>\n {\n for (const [ identity, scopes ] of pass.baseScopes)\n {\n if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2)\n {\n throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);\n }\n }\n const groups = new Map();\n for (const binding of pass.identities.values())\n {\n if (!groups.has(binding.group)) groups.set(binding.group, []);\n groups.get(binding.group).push(binding);\n }\n return {\n key,\n techniqueName: key.slice(0, key.lastIndexOf(\".pass\")),\n passIndex: Number(/\\.pass([0-9]+)$/.exec(key)?.[1]),\n bindGroups: Array.from(groups, ([ group, bindings ]) => ({\n group,\n bindings: bindings.sort((left, right) => left.binding - right.binding)\n })).sort((left, right) => left.group - right.group)\n };\n }).sort((left, right) =>\n left.techniqueName.localeCompare(right.techniqueName)\n || left.passIndex - right.passIndex);\n}\n\nfunction validatePassTopologies(entries)\n{\n const stagesByPass = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);\n stagesByPass.get(passKey).push(entry.stageName);\n }\n for (const [ passKey, stages ] of stagesByPass)\n {\n if (stages.includes(\"compute\") && (stages.length !== 1 || stages[0] !== \"compute\"))\n {\n throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);\n }\n }\n}\n\nfunction buildResourceTransforms(entries, layouts)\n{\n const raw = entries.flatMap((entry) => entry.shader.program.resourceTransforms || []);\n const transformedBindings = layouts.flatMap((layout) =>\n layout.bindGroups.flatMap((group) =>\n group.bindings.filter((binding) => binding.transformId)\n .map((binding) => ({ layoutKey: layout.key, binding }))));\n if (!raw.length)\n {\n if (transformedBindings.length)\n {\n throw new Error(\"WGSL set has transformed bindings without resource recipes\");\n }\n return [];\n }\n const plan = normalizeResourceTransformPlan({\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\n formatVersion: 1,\n resourceTransforms: raw\n });\n const ids = new Set(plan.resourceTransforms.map((transform) => transform.id));\n for (const { binding } of transformedBindings)\n {\n if (!ids.has(binding.transformId))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);\n }\n }\n for (const transform of plan.resourceTransforms)\n {\n const stageKey = `${transform.layoutKey}.pixel`;\n if (!entries.some((entry) => entry.key === stageKey))\n {\n throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);\n }\n const links = transformedBindings.filter(({ layoutKey, binding }) =>\n layoutKey === transform.layoutKey\n && binding.transformId === transform.id);\n if (links.length !== 1)\n {\n throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);\n }\n const binding = links[0].binding;\n if (binding.identity !== transform.output.identity\n || binding.scopeIdentity !== transform.output.scopeIdentity\n || binding.texture?.viewDimension !== transform.output.viewDimension\n || binding.arrayLayerCount !== transform.output.layerCount)\n {\n throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);\n }\n const transformLayout = layouts.find((layout) =>\n layout.key === transform.layoutKey);\n const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap((group) =>\n group.bindings.map((entry) => entry.scopeIdentity)));\n for (const input of transform.inputs.slice(1))\n {\n if (physicalScopes.has(input.scopeIdentity))\n {\n throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);\n }\n }\n }\n return plan.resourceTransforms;\n}\n\n/**\n * Builds the portable JSON document stored in a CEWGPU `WGSL` chunk.\n * Existing numeric bindings are validated and never reassigned.\n *\n * @param {Array<object>} input Wrapped emitted shader descriptors.\n * @returns {object} Frozen CJS_WGSL_SET document.\n */\nexport function buildWgslSet(input)\n{\n if (!Array.isArray(input) || !input.length) throw new TypeError(\"BuildWgslSet expects a non-empty shader entry array\");\n const entries = input.map(normalizeEntry);\n const keys = new Set();\n const shaders = entries.map((entry) =>\n {\n if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);\n keys.add(entry.key);\n return {\n key: entry.key,\n techniqueName: entry.techniqueName,\n passIndex: entry.passIndex,\n stageName: entry.stageName,\n stage: entry.stage,\n stageType: entry.stageType,\n entryPoint: entry.shader.entryPoint,\n code: entry.shader.code,\n sourceMap: clonePlain(entry.shader.sourceMap || []),\n ...(entry.threadGroupSize ? { threadGroupSize: clonePlain(entry.threadGroupSize) } : {})\n };\n }).sort((left, right) =>\n left.techniqueName.localeCompare(right.techniqueName)\n || left.passIndex - right.passIndex\n || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));\n validatePassTopologies(entries);\n const layouts = buildLayouts(entries);\n const resourceTransforms = buildResourceTransforms(entries, layouts);\n return deepFreeze({\n format: \"CJS_WGSL_SET\",\n formatVersion: WGSL_SET_VERSION,\n shaders,\n layouts,\n ...(resourceTransforms.length ? { resourceTransforms } : {})\n });\n}\n"],"names":["WGSL_SET_VERSION","KEY_PATTERN","KEY_STAGE","Object","freeze","vertex","pixel","compute","STAGE_TYPES","STAGE_NAME_ORDER","VISIBILITY_ORDER","clonePlain","value","Array","isArray","map","fromEntries","entries","key","entry","deepFreeze","isFrozen","values","normalizeEntry","index","shader","format","formatVersion","code","entryPoint","sourceMap","program","TypeError","match","exec","Error","techniqueName","passIndex","Number","stageName","stage","threadGroupSize","length","some","isSafeInteger","undefined","stageType","portableBinding","binding","visibility","isInteger","group","registerSpace","registerIndex","resourceKind","generatedSymbol","type","id","identity","scopeIdentity","hasTransform","transformId","arrayLayerCount","texture","viewDimension","descriptorKeys","filter","expectedDescriptors","sampler","includes","structureStride","buffer","bindingIdentity","bindingFingerprint","JSON","stringify","buildLayouts","passes","Map","passKey","has","set","identities","baseScopes","slots","pass","get","symbols","d3dIdentities","Set","source","bindings","add","from","scope","slot","existingSlot","existing","sort","left","right","indexOf","scopes","groups","push","slice","lastIndexOf","bindGroups","localeCompare","validatePassTopologies","stagesByPass","stages","buildResourceTransforms","layouts","raw","flatMap","resourceTransforms","transformedBindings","layout","layoutKey","plan","normalizeResourceTransformPlan","ids","transform","stageKey","links","output","layerCount","transformLayout","find","physicalScopes","input","inputs","buildWgslSet","keys","shaders"],"mappings":"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"}
|