@carbonenginejs/runtime-resource 0.13.0 → 0.15.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/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -310
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -133
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -33
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -890
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -194
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -142
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
|
|
2
|
-
import { readGlslBackendBlock } from './glslBackendBlock.js';
|
|
3
|
-
import { hlslShaderStageName
|
|
4
|
-
|
|
1
|
+
import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
|
|
2
|
+
import { readGlslBackendBlock } from './glslBackendBlock.js';
|
|
3
|
+
import { hlslShaderStageName } from '../../hlsl/core/tr2/HlslRenderContextEnum.js';
|
|
4
|
+
import { runtimeDescriptionFromCarbon } from '../../hlsl/core/carbonDescriptionToRuntime.js';
|
|
5
|
+
import { HlslEffectBindingManifest } from '../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js';
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* Decodes a WebGL effect container into the stage/shader records the
|
|
7
9
|
* completeness rules consume.
|
|
@@ -26,102 +28,45 @@ import { hlslShaderStageName, HlslUsageCodeNames } from '../../hlsl/core/tr2/Hls
|
|
|
26
28
|
* a file on disk does not know why a translation failed months ago. Callers that
|
|
27
29
|
* do know — `buildEffectPackage`, at build time — keep their specific
|
|
28
30
|
* diagnostics by feeding the rules their own records instead.
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
/** The verdict a stage carrying no stored program gets. */
|
|
32
|
-
const NO_PROGRAM_REASON = "no program was stored";
|
|
33
|
-
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/** The verdict a stage carrying no stored program gets. */
|
|
34
|
+
const NO_PROGRAM_REASON = "no program was stored";
|
|
35
|
+
|
|
34
36
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
+
* Derives the per-stage binding manifests for one body through the one
|
|
38
|
+
* manifest builder the source path uses.
|
|
37
39
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* bug
|
|
40
|
+
* This replaces a hand-built reshape of the wire records into the manifest
|
|
41
|
+
* vocabulary. That copy had already diverged from the real manifest once —
|
|
42
|
+
* `isAutoregister` was silently dropped, making every resource look
|
|
43
|
+
* user-settable — which is the whole argument against a second producer: two
|
|
44
|
+
* hand-maintained spellings of one reflection drift, and the drift is exactly
|
|
45
|
+
* the kind of bug that draws, links and renders black without an error. The
|
|
46
|
+
* record tree now flows through `runtimeDescriptionFromCarbon` — the
|
|
47
|
+
* corpus-proven adapter the runtime read path uses — and
|
|
48
|
+
* `HlslEffectBindingManifest`, so the container read and the build-time
|
|
49
|
+
* package derive their manifests from the same code.
|
|
44
50
|
*
|
|
45
|
-
* `
|
|
46
|
-
* `
|
|
51
|
+
* No `bytecodeFor` is supplied: program text lives in the shader records this
|
|
52
|
+
* reader emits, so the manifest's `shaderBytecode` stays null rather than
|
|
53
|
+
* duplicating every program into the reflection.
|
|
47
54
|
*
|
|
48
|
-
* @param {object}
|
|
49
|
-
* @
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// the slot its backend uses (vertex b0, pixel b7 by the GL
|
|
64
|
-
// convention).
|
|
65
|
-
//
|
|
66
|
-
// This is not optional detail. Without it an engine has no names to
|
|
67
|
-
// bind parameters to, uploads nothing, and every material value the
|
|
68
|
-
// shader reads is zero — which draws, links and binds correctly and
|
|
69
|
-
// renders pure black. It was missing because the completeness rules
|
|
70
|
-
// this reader was written for only needed inputs, resources and
|
|
71
|
-
// samplers, so nothing noticed the constants were dropped.
|
|
72
|
-
{
|
|
73
|
-
kind: "constantBuffer",
|
|
74
|
-
registerIndex: 0,
|
|
75
|
-
carbon: {
|
|
76
|
-
// Authored defaults live in the stage's blob; its declared
|
|
77
|
-
// size is what a consumer allocates against.
|
|
78
|
-
constantValueSize: stage.defaultValues?.size ?? 0,
|
|
79
|
-
constants: (stage.constants ?? []).map(constant => ({
|
|
80
|
-
// String refs decode as `{offset, value}` records.
|
|
81
|
-
name: constant.name?.value ?? constant.name,
|
|
82
|
-
offset: constant.offset,
|
|
83
|
-
size: constant.size,
|
|
84
|
-
type: constant.type,
|
|
85
|
-
dimension: constant.dimension,
|
|
86
|
-
elements: constant.elements,
|
|
87
|
-
isSRGB: constant.isSRGB,
|
|
88
|
-
isAutoregister: constant.isAutoregister
|
|
89
|
-
}))
|
|
90
|
-
}
|
|
91
|
-
}, ...(stage.textures ?? []).map(texture => ({
|
|
92
|
-
kind: "resource",
|
|
93
|
-
registerIndex: texture.registerIndex,
|
|
94
|
-
// Named so a rule can ask whether a described resource belongs
|
|
95
|
-
// to a family the packager is known to lower away.
|
|
96
|
-
name: texture.name.value,
|
|
97
|
-
// Carbon's own flags, nested like the sampler's, because that
|
|
98
|
-
// is where the consumer already looks for them.
|
|
99
|
-
//
|
|
100
|
-
// `isAutoregister` is not cosmetic: such a resource is bound
|
|
101
|
-
// automatically from the engine's global variable store rather
|
|
102
|
-
// than set by a material. Dropping it makes every resource look
|
|
103
|
-
// user-settable, so a consumer builds an ordinary texture
|
|
104
|
-
// parameter that nothing ever assigns and the global never
|
|
105
|
-
// reaches the shader.
|
|
106
|
-
carbon: {
|
|
107
|
-
isSRGB: texture.isSRGB === 1,
|
|
108
|
-
isAutoregister: texture.isAutoregister === 1
|
|
109
|
-
}
|
|
110
|
-
})), ...(stage.samplers ?? []).map(sampler => ({
|
|
111
|
-
kind: "sampler",
|
|
112
|
-
registerIndex: sampler.registerIndex,
|
|
113
|
-
// Carbon stores the flag as a byte; the rule compares against
|
|
114
|
-
// `=== true`, so the conversion has to happen here rather than
|
|
115
|
-
// letting a truthy 1 pass a strict check by accident.
|
|
116
|
-
carbon: {
|
|
117
|
-
sampler: {
|
|
118
|
-
comparison: sampler.comparison !== 0
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}))]
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
55
|
+
* @param {object} description Decoded Carbon description record tree.
|
|
56
|
+
* @param {number} version Container data version.
|
|
57
|
+
* @param {string} source Source name for diagnostics.
|
|
58
|
+
* @returns {Map<string, object>} Manifest stage records keyed by
|
|
59
|
+
* `technique.passN.stageName`.
|
|
60
|
+
*/
|
|
61
|
+
function bodyManifestStages(description, version, source) {
|
|
62
|
+
const runtime = runtimeDescriptionFromCarbon(description, {
|
|
63
|
+
effectName: source,
|
|
64
|
+
version
|
|
65
|
+
});
|
|
66
|
+
const manifest = HlslEffectBindingManifest.fromEffectDescription(runtime).toJSON();
|
|
67
|
+
return new Map(manifest.stages.map(stage => [`${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`, stage]));
|
|
68
|
+
}
|
|
69
|
+
|
|
125
70
|
/**
|
|
126
71
|
* Decodes one pass's backend block, tolerating a pass that has none.
|
|
127
72
|
*
|
|
@@ -129,22 +74,22 @@ function stageManifest(stage) {
|
|
|
129
74
|
* @param {string} passKey Enclosing pass key.
|
|
130
75
|
* @param {string} source Source name for error details.
|
|
131
76
|
* @returns {object} Per-stage backend data, keyed by stage name.
|
|
132
|
-
*/
|
|
133
|
-
function backendStages(pass, passKey, source) {
|
|
134
|
-
if (!pass.backendBlock?.size) return {
|
|
135
|
-
stages: {},
|
|
136
|
-
transforms: []
|
|
137
|
-
};
|
|
138
|
-
const block = readGlslBackendBlock(pass.backendBlock.bytes, {
|
|
139
|
-
layoutKey: passKey,
|
|
140
|
-
source
|
|
141
|
-
});
|
|
142
|
-
return {
|
|
143
|
-
stages: block.stages ?? {},
|
|
144
|
-
transforms: block.transforms ?? []
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
77
|
+
*/
|
|
78
|
+
function backendStages(pass, passKey, source) {
|
|
79
|
+
if (!pass.backendBlock?.size) return {
|
|
80
|
+
stages: {},
|
|
81
|
+
transforms: []
|
|
82
|
+
};
|
|
83
|
+
const block = readGlslBackendBlock(pass.backendBlock.bytes, {
|
|
84
|
+
layoutKey: passKey,
|
|
85
|
+
source
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
stages: block.stages ?? {},
|
|
89
|
+
transforms: block.transforms ?? []
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
148
93
|
/**
|
|
149
94
|
* Decodes container bytes into stage and shader records.
|
|
150
95
|
*
|
|
@@ -157,147 +102,148 @@ function backendStages(pass, passKey, source) {
|
|
|
157
102
|
* @param {string} [values.source] Source name, for diagnostics.
|
|
158
103
|
* @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}
|
|
159
104
|
* Stage graph in the completeness rules' vocabulary.
|
|
160
|
-
*/
|
|
161
|
-
function readGlslEffectContainer(input, values = {}) {
|
|
162
|
-
const source = values.source ?? "memory";
|
|
163
|
-
const reader = new CjsCarbonEffectReader(input, {
|
|
164
|
-
source
|
|
165
|
-
});
|
|
166
|
-
const stages = [];
|
|
167
|
-
const shaders = [];
|
|
168
|
-
const bodyKeyByOffset = new Map();
|
|
169
|
-
|
|
170
|
-
// Every permutation index that resolves to each body.
|
|
171
|
-
//
|
|
172
|
-
// This is the bridge a caller actually needs, and the only one that is
|
|
173
|
-
// sound. `bodyKey` here is this reader's own ordinal spelling; the
|
|
174
|
-
// permutation graph mints `body${N}` for the same body, and the two are not
|
|
175
|
-
// merely spelled differently — the graph dedupes by content (SHA-256 plus
|
|
176
|
-
// byte equality) while this reader dedupes by source-record offset. Those
|
|
177
|
-
// partitions coincide only because the container writer aliases
|
|
178
|
-
// byte-identical bodies onto one offset, which is a property of the writer
|
|
179
|
-
// rather than a contract.
|
|
180
|
-
//
|
|
181
|
-
// So a consumer must never map between the two by string surgery on either
|
|
182
|
-
// spelling, and must not assume the two ordinal sequences agree. It holds a
|
|
183
|
-
// permutation index; this gives it the body directly.
|
|
184
|
-
const permutationIndicesByOffset = new Map();
|
|
185
|
-
for (let index = 0; index < reader.records.length; index += 1) {
|
|
186
|
-
const {
|
|
187
|
-
offset
|
|
188
|
-
} = reader.records[index];
|
|
189
|
-
const seen = permutationIndicesByOffset.get(offset);
|
|
190
|
-
if (seen) seen.push(index);else permutationIndicesByOffset.set(offset, [index]);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// Distinct program texts share one shader record, so `shaders` counts unique
|
|
194
|
-
// translations the way the chunk package's shader table did. Empty stages are
|
|
195
|
-
// deliberately *not* pooled: each keeps its own record so a report can name
|
|
196
|
-
// every pass that is missing a program rather than one shared "absent".
|
|
197
|
-
//
|
|
198
|
-
// The pool key is the program text *and* the backend reflection that came
|
|
199
|
-
// with it, not the text alone. A pooled record carries the bindings and
|
|
200
|
-
// stage inputs of whichever stage was seen first, and
|
|
201
|
-
// `validateShaderRuntimeContract` judges the emitted GLSL against them — so
|
|
202
|
-
// pooling on text alone would let two stages with identical source but
|
|
203
|
-
// different reflection be checked against the wrong metadata, silently. It
|
|
204
|
-
// is unlikely that identical GLSL ever carries different reflection, which
|
|
205
|
-
// is exactly why it would not be noticed.
|
|
206
|
-
const shaderKeyByIdentity = new Map();
|
|
207
|
-
for (let index = 0; index < reader.records.length; index += 1) {
|
|
208
|
-
const {
|
|
209
|
-
offset
|
|
210
|
-
} = reader.records[index];
|
|
211
|
-
if (bodyKeyByOffset.has(offset)) continue;
|
|
212
|
-
const bodyKey = `body_${bodyKeyByOffset.size}`;
|
|
213
|
-
bodyKeyByOffset.set(offset, bodyKey);
|
|
214
|
-
const description = reader.readDescription(index, {
|
|
215
|
-
backend: true
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
const {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
shaderKeyByIdentity.
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
//
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
105
|
+
*/
|
|
106
|
+
function readGlslEffectContainer(input, values = {}) {
|
|
107
|
+
const source = values.source ?? "memory";
|
|
108
|
+
const reader = new CjsCarbonEffectReader(input, {
|
|
109
|
+
source
|
|
110
|
+
});
|
|
111
|
+
const stages = [];
|
|
112
|
+
const shaders = [];
|
|
113
|
+
const bodyKeyByOffset = new Map();
|
|
114
|
+
|
|
115
|
+
// Every permutation index that resolves to each body.
|
|
116
|
+
//
|
|
117
|
+
// This is the bridge a caller actually needs, and the only one that is
|
|
118
|
+
// sound. `bodyKey` here is this reader's own ordinal spelling; the
|
|
119
|
+
// permutation graph mints `body${N}` for the same body, and the two are not
|
|
120
|
+
// merely spelled differently — the graph dedupes by content (SHA-256 plus
|
|
121
|
+
// byte equality) while this reader dedupes by source-record offset. Those
|
|
122
|
+
// partitions coincide only because the container writer aliases
|
|
123
|
+
// byte-identical bodies onto one offset, which is a property of the writer
|
|
124
|
+
// rather than a contract.
|
|
125
|
+
//
|
|
126
|
+
// So a consumer must never map between the two by string surgery on either
|
|
127
|
+
// spelling, and must not assume the two ordinal sequences agree. It holds a
|
|
128
|
+
// permutation index; this gives it the body directly.
|
|
129
|
+
const permutationIndicesByOffset = new Map();
|
|
130
|
+
for (let index = 0; index < reader.records.length; index += 1) {
|
|
131
|
+
const {
|
|
132
|
+
offset
|
|
133
|
+
} = reader.records[index];
|
|
134
|
+
const seen = permutationIndicesByOffset.get(offset);
|
|
135
|
+
if (seen) seen.push(index);else permutationIndicesByOffset.set(offset, [index]);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Distinct program texts share one shader record, so `shaders` counts unique
|
|
139
|
+
// translations the way the chunk package's shader table did. Empty stages are
|
|
140
|
+
// deliberately *not* pooled: each keeps its own record so a report can name
|
|
141
|
+
// every pass that is missing a program rather than one shared "absent".
|
|
142
|
+
//
|
|
143
|
+
// The pool key is the program text *and* the backend reflection that came
|
|
144
|
+
// with it, not the text alone. A pooled record carries the bindings and
|
|
145
|
+
// stage inputs of whichever stage was seen first, and
|
|
146
|
+
// `validateShaderRuntimeContract` judges the emitted GLSL against them — so
|
|
147
|
+
// pooling on text alone would let two stages with identical source but
|
|
148
|
+
// different reflection be checked against the wrong metadata, silently. It
|
|
149
|
+
// is unlikely that identical GLSL ever carries different reflection, which
|
|
150
|
+
// is exactly why it would not be noticed.
|
|
151
|
+
const shaderKeyByIdentity = new Map();
|
|
152
|
+
for (let index = 0; index < reader.records.length; index += 1) {
|
|
153
|
+
const {
|
|
154
|
+
offset
|
|
155
|
+
} = reader.records[index];
|
|
156
|
+
if (bodyKeyByOffset.has(offset)) continue;
|
|
157
|
+
const bodyKey = `body_${bodyKeyByOffset.size}`;
|
|
158
|
+
bodyKeyByOffset.set(offset, bodyKey);
|
|
159
|
+
const description = reader.readDescription(index, {
|
|
160
|
+
backend: true
|
|
161
|
+
});
|
|
162
|
+
const manifestStages = bodyManifestStages(description, reader.version, source);
|
|
163
|
+
for (const technique of description.techniques) {
|
|
164
|
+
const techniqueName = technique.name.value;
|
|
165
|
+
for (const [passIndex, pass] of technique.passes.entries()) {
|
|
166
|
+
const passKey = `${techniqueName}.pass${passIndex}`;
|
|
167
|
+
const {
|
|
168
|
+
stages: backend,
|
|
169
|
+
transforms
|
|
170
|
+
} = backendStages(pass, passKey, source);
|
|
171
|
+
for (const stage of pass.stages) {
|
|
172
|
+
const name = hlslShaderStageName(stage.type);
|
|
173
|
+
const stageKey = `${bodyKey}.${passKey}.${name}`;
|
|
174
|
+
const stageBackend = backend[name] ?? {};
|
|
175
|
+
let shaderKey;
|
|
176
|
+
if (stage.shaderData?.size) {
|
|
177
|
+
const code = new TextDecoder().decode(stage.shaderData.bytes);
|
|
178
|
+
const identity = `${JSON.stringify([stageBackend.bindings ?? [], stageBackend.stageInputs ?? [], stageBackend.computeFragment ?? null])} ${code}`;
|
|
179
|
+
const pooled = shaderKeyByIdentity.get(identity);
|
|
180
|
+
if (pooled) {
|
|
181
|
+
shaderKey = pooled;
|
|
182
|
+
} else {
|
|
183
|
+
shaderKey = `shader_${shaderKeyByIdentity.size}`;
|
|
184
|
+
shaderKeyByIdentity.set(identity, shaderKey);
|
|
185
|
+
shaders.push({
|
|
186
|
+
key: shaderKey,
|
|
187
|
+
stageName: name,
|
|
188
|
+
source: code,
|
|
189
|
+
hlsl2webgl: {
|
|
190
|
+
ok: true
|
|
191
|
+
},
|
|
192
|
+
bindings: stageBackend.bindings ?? [],
|
|
193
|
+
stageInputs: stageBackend.stageInputs ?? [],
|
|
194
|
+
...(stageBackend.computeFragment ? {
|
|
195
|
+
computeFragment: stageBackend.computeFragment
|
|
196
|
+
} : {})
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
} else {
|
|
200
|
+
shaderKey = `${stageKey}.absent`;
|
|
201
|
+
shaders.push({
|
|
202
|
+
key: shaderKey,
|
|
203
|
+
stageName: name,
|
|
204
|
+
source: "",
|
|
205
|
+
hlsl2webgl: {
|
|
206
|
+
ok: false,
|
|
207
|
+
reason: NO_PROGRAM_REASON
|
|
208
|
+
},
|
|
209
|
+
bindings: stageBackend.bindings ?? [],
|
|
210
|
+
stageInputs: stageBackend.stageInputs ?? []
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
stages.push({
|
|
214
|
+
key: stageKey,
|
|
215
|
+
bodyKey,
|
|
216
|
+
techniqueName,
|
|
217
|
+
passIndex,
|
|
218
|
+
stageName: name,
|
|
219
|
+
stageType: stage.type,
|
|
220
|
+
shaderKey,
|
|
221
|
+
manifest: manifestStages.get(`${passKey}.${name}`) ?? null,
|
|
222
|
+
// The pass's transforms, so a rule can ask whether a
|
|
223
|
+
// description resource was merged away rather than lost.
|
|
224
|
+
transforms
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Ordered by first appearance, matching `bodyKey`'s ordinal.
|
|
232
|
+
const bodies = [];
|
|
233
|
+
for (const [offset, key] of bodyKeyByOffset) {
|
|
234
|
+
bodies.push({
|
|
235
|
+
key,
|
|
236
|
+
permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
stages,
|
|
241
|
+
shaders,
|
|
242
|
+
bodies,
|
|
243
|
+
recordCount: reader.records.length,
|
|
244
|
+
bodyCount: bodyKeyByOffset.size
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export { readGlslEffectContainer };
|
|
249
|
+
//# sourceMappingURL=readGlslEffectContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/readGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\r\nimport { readGlslBackendBlock } from \"./glslBackendBlock.js\";\r\nimport {\r\n hlslShaderStageName,\r\n HlslUsageCodeNames\r\n} from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\r\n\r\n/**\r\n * Decodes a WebGL effect container into the stage/shader records the\r\n * completeness rules consume.\r\n *\r\n * This exists so the rules run from container bytes alone. The alternative was\r\n * to hand them the in-memory translation, which works inside `buildEffectPackage`\r\n * and nowhere else — the validator reads a finished file and has no translation\r\n * in scope. That would have cost the validator its completeness check while\r\n * still requiring a decoder to produce the programs it compiles in a browser, so\r\n * it was strictly more work for strictly less checking.\r\n *\r\n * The vocabulary is deliberately the one the rules already speak — `stages` with\r\n * pass coordinates, `shaders` with source and a translation verdict. The rules\r\n * are about the translation, not about how it was stored, so retargeting them\r\n * meant changing where the records come from and nothing about what they mean.\r\n *\r\n * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body\r\n * the translator could not lower as its full pass tree with zero-length\r\n * programs; the *reason* it failed stays in the in-memory build result and is\r\n * never written. So a shader decoded from bytes reports `ok: false` with\r\n * \"no program was stored\" and nothing more specific. That is the honest answer:\r\n * a file on disk does not know why a translation failed months ago. Callers that\r\n * do know — `buildEffectPackage`, at build time — keep their specific\r\n * diagnostics by feeding the rules their own records instead.\r\n */\r\n\r\n/** The verdict a stage carrying no stored program gets. */\r\nconst NO_PROGRAM_REASON = \"no program was stored\";\r\n\r\n/**\r\n * Reshapes one Carbon stage's own reflection into the manifest vocabulary the\r\n * runtime-ABI rules read.\r\n *\r\n * The chunk package carried this as a separate META manifest, which is why the\r\n * old rules cross-checked two chunks against each other. The container needs no\r\n * such cross-check: `pipelineInputs`, `textures` and `samplers` are Carbon's own\r\n * per-stage reflection, read straight out of the description. There is only one\r\n * copy, so there is nothing for a second copy to disagree with — the class of\r\n * bug those cross-chunk rules existed to catch cannot occur here.\r\n *\r\n * `usageName` is derived from the `usage` byte rather than carried, the same way\r\n * `carbonDescriptionToRuntime.js:261` derives it.\r\n *\r\n * @param {object} stage Decoded Carbon stage record.\r\n * @returns {{pipelineInputs:object[], bindings:object[]}} Manifest-shaped reflection.\r\n */\r\nfunction stageManifest(stage)\r\n{\r\n return {\r\n pipelineInputs: (stage.pipelineInputs ?? []).map((input) => ({\r\n registerIndex: input.registerIndex,\r\n usageName: HlslUsageCodeNames[input.usage] || `USAGE_${input.usage}`,\r\n usageIndex: input.usageIndex,\r\n usedMask: input.usedMask\r\n })),\r\n bindings: [\r\n // The stage-local constant buffer, carrying the named constants an\r\n // engine binds its material parameters to. Register 0 is this\r\n // stage's own buffer in per-stage numbering; a consumer maps it to\r\n // the slot its backend uses (vertex b0, pixel b7 by the GL\r\n // convention).\r\n //\r\n // This is not optional detail. Without it an engine has no names to\r\n // bind parameters to, uploads nothing, and every material value the\r\n // shader reads is zero — which draws, links and binds correctly and\r\n // renders pure black. It was missing because the completeness rules\r\n // this reader was written for only needed inputs, resources and\r\n // samplers, so nothing noticed the constants were dropped.\r\n {\r\n kind: \"constantBuffer\",\r\n registerIndex: 0,\r\n carbon: {\r\n // Authored defaults live in the stage's blob; its declared\r\n // size is what a consumer allocates against.\r\n constantValueSize: stage.defaultValues?.size ?? 0,\r\n constants: (stage.constants ?? []).map((constant) => ({\r\n // String refs decode as `{offset, value}` records.\r\n name: constant.name?.value ?? constant.name,\r\n offset: constant.offset,\r\n size: constant.size,\r\n type: constant.type,\r\n dimension: constant.dimension,\r\n elements: constant.elements,\r\n isSRGB: constant.isSRGB,\r\n isAutoregister: constant.isAutoregister\r\n }))\r\n }\r\n },\r\n ...(stage.textures ?? []).map((texture) => ({\r\n kind: \"resource\",\r\n registerIndex: texture.registerIndex,\r\n // Named so a rule can ask whether a described resource belongs\r\n // to a family the packager is known to lower away.\r\n name: texture.name.value,\r\n // Carbon's own flags, nested like the sampler's, because that\r\n // is where the consumer already looks for them.\r\n //\r\n // `isAutoregister` is not cosmetic: such a resource is bound\r\n // automatically from the engine's global variable store rather\r\n // than set by a material. Dropping it makes every resource look\r\n // user-settable, so a consumer builds an ordinary texture\r\n // parameter that nothing ever assigns and the global never\r\n // reaches the shader.\r\n carbon: {\r\n isSRGB: texture.isSRGB === 1,\r\n isAutoregister: texture.isAutoregister === 1\r\n }\r\n })),\r\n ...(stage.samplers ?? []).map((sampler) => ({\r\n kind: \"sampler\",\r\n registerIndex: sampler.registerIndex,\r\n // Carbon stores the flag as a byte; the rule compares against\r\n // `=== true`, so the conversion has to happen here rather than\r\n // letting a truthy 1 pass a strict check by accident.\r\n carbon: { sampler: { comparison: sampler.comparison !== 0 } }\r\n }))\r\n ]\r\n };\r\n}\r\n\r\n/**\r\n * Decodes one pass's backend block, tolerating a pass that has none.\r\n *\r\n * @param {object} pass Decoded pass record.\r\n * @param {string} passKey Enclosing pass key.\r\n * @param {string} source Source name for error details.\r\n * @returns {object} Per-stage backend data, keyed by stage name.\r\n */\r\nfunction backendStages(pass, passKey, source)\r\n{\r\n if (!pass.backendBlock?.size) return { stages: {}, transforms: [] };\r\n const block = readGlslBackendBlock(pass.backendBlock.bytes, { layoutKey: passKey, source });\r\n return { stages: block.stages ?? {}, transforms: block.transforms ?? [] };\r\n}\r\n\r\n/**\r\n * Decodes container bytes into stage and shader records.\r\n *\r\n * Bodies are decoded once each rather than once per permutation row: rows alias\r\n * onto shared bodies, and a rule that saw the same body 4,096 times would report\r\n * 4,096 identical incomplete passes.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\r\n * @param {object} [values] Read values.\r\n * @param {string} [values.source] Source name, for diagnostics.\r\n * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}\r\n * Stage graph in the completeness rules' vocabulary.\r\n */\r\nexport function readGlslEffectContainer(input, values = {})\r\n{\r\n const source = values.source ?? \"memory\";\r\n const reader = new CjsCarbonEffectReader(input, { source });\r\n\r\n const stages = [];\r\n const shaders = [];\r\n const bodyKeyByOffset = new Map();\r\n\r\n // Every permutation index that resolves to each body.\r\n //\r\n // This is the bridge a caller actually needs, and the only one that is\r\n // sound. `bodyKey` here is this reader's own ordinal spelling; the\r\n // permutation graph mints `body${N}` for the same body, and the two are not\r\n // merely spelled differently — the graph dedupes by content (SHA-256 plus\r\n // byte equality) while this reader dedupes by source-record offset. Those\r\n // partitions coincide only because the container writer aliases\r\n // byte-identical bodies onto one offset, which is a property of the writer\r\n // rather than a contract.\r\n //\r\n // So a consumer must never map between the two by string surgery on either\r\n // spelling, and must not assume the two ordinal sequences agree. It holds a\r\n // permutation index; this gives it the body directly.\r\n const permutationIndicesByOffset = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n const seen = permutationIndicesByOffset.get(offset);\r\n if (seen) seen.push(index);\r\n else permutationIndicesByOffset.set(offset, [ index ]);\r\n }\r\n\r\n // Distinct program texts share one shader record, so `shaders` counts unique\r\n // translations the way the chunk package's shader table did. Empty stages are\r\n // deliberately *not* pooled: each keeps its own record so a report can name\r\n // every pass that is missing a program rather than one shared \"absent\".\r\n //\r\n // The pool key is the program text *and* the backend reflection that came\r\n // with it, not the text alone. A pooled record carries the bindings and\r\n // stage inputs of whichever stage was seen first, and\r\n // `validateShaderRuntimeContract` judges the emitted GLSL against them — so\r\n // pooling on text alone would let two stages with identical source but\r\n // different reflection be checked against the wrong metadata, silently. It\r\n // is unlikely that identical GLSL ever carries different reflection, which\r\n // is exactly why it would not be noticed.\r\n const shaderKeyByIdentity = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n if (bodyKeyByOffset.has(offset)) continue;\r\n\r\n const bodyKey = `body_${bodyKeyByOffset.size}`;\r\n bodyKeyByOffset.set(offset, bodyKey);\r\n\r\n const description = reader.readDescription(index, { backend: true });\r\n\r\n for (const technique of description.techniques)\r\n {\r\n const techniqueName = technique.name.value;\r\n for (const [ passIndex, pass ] of technique.passes.entries())\r\n {\r\n const passKey = `${techniqueName}.pass${passIndex}`;\r\n const { stages: backend, transforms } = backendStages(\r\n pass,\r\n passKey,\r\n source\r\n );\r\n\r\n for (const stage of pass.stages)\r\n {\r\n const name = hlslShaderStageName(stage.type);\r\n const stageKey = `${bodyKey}.${passKey}.${name}`;\r\n const stageBackend = backend[name] ?? {};\r\n\r\n let shaderKey;\r\n if (stage.shaderData?.size)\r\n {\r\n const code = new TextDecoder().decode(stage.shaderData.bytes);\r\n const identity = `${JSON.stringify([\r\n stageBackend.bindings ?? [],\r\n stageBackend.stageInputs ?? [],\r\n stageBackend.computeFragment ?? null\r\n ])} ${code}`;\r\n const pooled = shaderKeyByIdentity.get(identity);\r\n if (pooled)\r\n {\r\n shaderKey = pooled;\r\n }\r\n else\r\n {\r\n shaderKey = `shader_${shaderKeyByIdentity.size}`;\r\n shaderKeyByIdentity.set(identity, shaderKey);\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: code,\r\n hlsl2webgl: { ok: true },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? [],\r\n ...(stageBackend.computeFragment\r\n ? { computeFragment: stageBackend.computeFragment }\r\n : {})\r\n });\r\n }\r\n }\r\n else\r\n {\r\n shaderKey = `${stageKey}.absent`;\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: \"\",\r\n hlsl2webgl: { ok: false, reason: NO_PROGRAM_REASON },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? []\r\n });\r\n }\r\n\r\n stages.push({\r\n key: stageKey,\r\n bodyKey,\r\n techniqueName,\r\n passIndex,\r\n stageName: name,\r\n stageType: stage.type,\r\n shaderKey,\r\n manifest: stageManifest(stage),\r\n // The pass's transforms, so a rule can ask whether a\r\n // description resource was merged away rather than lost.\r\n transforms\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Ordered by first appearance, matching `bodyKey`'s ordinal.\r\n const bodies = [];\r\n for (const [ offset, key ] of bodyKeyByOffset)\r\n {\r\n bodies.push({\r\n key,\r\n permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])\r\n });\r\n }\r\n\r\n return {\r\n stages,\r\n shaders,\r\n bodies,\r\n recordCount: reader.records.length,\r\n bodyCount: bodyKeyByOffset.size\r\n };\r\n}\r\n\r\nexport default readGlslEffectContainer;\r\n"],"names":["NO_PROGRAM_REASON","stageManifest","stage","pipelineInputs","map","input","registerIndex","usageName","HlslUsageCodeNames","usage","usageIndex","usedMask","bindings","kind","carbon","constantValueSize","defaultValues","size","constants","constant","name","value","offset","type","dimension","elements","isSRGB","isAutoregister","textures","texture","samplers","sampler","comparison","backendStages","pass","passKey","source","backendBlock","stages","transforms","block","readGlslBackendBlock","bytes","layoutKey","readGlslEffectContainer","values","reader","CjsCarbonEffectReader","shaders","bodyKeyByOffset","Map","permutationIndicesByOffset","index","records","length","seen","get","push","set","shaderKeyByIdentity","has","bodyKey","description","readDescription","backend","technique","techniques","techniqueName","passIndex","passes","entries","hlslShaderStageName","stageKey","stageBackend","shaderKey","shaderData","code","TextDecoder","decode","identity","JSON","stringify","stageInputs","computeFragment","pooled","key","stageName","hlsl2webgl","ok","reason","stageType","manifest","bodies","permutationIndices","Object","freeze","recordCount","bodyCount"],"mappings":";;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMA,iBAAiB,GAAG,uBAAuB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,KAAK,EAC5B;EACI,OAAO;IACHC,cAAc,EAAE,CAACD,KAAK,CAACC,cAAc,IAAI,EAAE,EAAEC,GAAG,CAAEC,KAAK,KAAM;MACzDC,aAAa,EAAED,KAAK,CAACC,aAAa;AAClCC,MAAAA,SAAS,EAAEC,kBAAkB,CAACH,KAAK,CAACI,KAAK,CAAC,IAAI,CAAA,MAAA,EAASJ,KAAK,CAACI,KAAK,CAAA,CAAE;MACpEC,UAAU,EAAEL,KAAK,CAACK,UAAU;MAC5BC,QAAQ,EAAEN,KAAK,CAACM;AACpB,KAAC,CAAC,CAAC;AACHC,IAAAA,QAAQ,EAAE;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA;AACIC,MAAAA,IAAI,EAAE,gBAAgB;AACtBP,MAAAA,aAAa,EAAE,CAAC;AAChBQ,MAAAA,MAAM,EAAE;AACJ;AACA;AACAC,QAAAA,iBAAiB,EAAEb,KAAK,CAACc,aAAa,EAAEC,IAAI,IAAI,CAAC;QACjDC,SAAS,EAAE,CAAChB,KAAK,CAACgB,SAAS,IAAI,EAAE,EAAEd,GAAG,CAAEe,QAAQ,KAAM;AAClD;UACAC,IAAI,EAAED,QAAQ,CAACC,IAAI,EAAEC,KAAK,IAAIF,QAAQ,CAACC,IAAI;UAC3CE,MAAM,EAAEH,QAAQ,CAACG,MAAM;UACvBL,IAAI,EAAEE,QAAQ,CAACF,IAAI;UACnBM,IAAI,EAAEJ,QAAQ,CAACI,IAAI;UACnBC,SAAS,EAAEL,QAAQ,CAACK,SAAS;UAC7BC,QAAQ,EAAEN,QAAQ,CAACM,QAAQ;UAC3BC,MAAM,EAAEP,QAAQ,CAACO,MAAM;UACvBC,cAAc,EAAER,QAAQ,CAACQ;AAC7B,SAAC,CAAC;AACN;AACJ,KAAC,EACD,GAAG,CAACzB,KAAK,CAAC0B,QAAQ,IAAI,EAAE,EAAExB,GAAG,CAAEyB,OAAO,KAAM;AACxChB,MAAAA,IAAI,EAAE,UAAU;MAChBP,aAAa,EAAEuB,OAAO,CAACvB,aAAa;AACpC;AACA;AACAc,MAAAA,IAAI,EAAES,OAAO,CAACT,IAAI,CAACC,KAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAP,MAAAA,MAAM,EAAE;AACJY,QAAAA,MAAM,EAAEG,OAAO,CAACH,MAAM,KAAK,CAAC;AAC5BC,QAAAA,cAAc,EAAEE,OAAO,CAACF,cAAc,KAAK;AAC/C;AACJ,KAAC,CAAC,CAAC,EACH,GAAG,CAACzB,KAAK,CAAC4B,QAAQ,IAAI,EAAE,EAAE1B,GAAG,CAAE2B,OAAO,KAAM;AACxClB,MAAAA,IAAI,EAAE,SAAS;MACfP,aAAa,EAAEyB,OAAO,CAACzB,aAAa;AACpC;AACA;AACA;AACAQ,MAAAA,MAAM,EAAE;AAAEiB,QAAAA,OAAO,EAAE;AAAEC,UAAAA,UAAU,EAAED,OAAO,CAACC,UAAU,KAAK;AAAE;AAAE;AAChE,KAAC,CAAC,CAAC;GAEV;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,aAAaA,CAACC,IAAI,EAAEC,OAAO,EAAEC,MAAM,EAC5C;AACI,EAAA,IAAI,CAACF,IAAI,CAACG,YAAY,EAAEpB,IAAI,EAAE,OAAO;IAAEqB,MAAM,EAAE,EAAE;AAAEC,IAAAA,UAAU,EAAE;GAAI;EACnE,MAAMC,KAAK,GAAGC,oBAAoB,CAACP,IAAI,CAACG,YAAY,CAACK,KAAK,EAAE;AAAEC,IAAAA,SAAS,EAAER,OAAO;AAAEC,IAAAA;AAAO,GAAC,CAAC;EAC3F,OAAO;AAAEE,IAAAA,MAAM,EAAEE,KAAK,CAACF,MAAM,IAAI,EAAE;AAAEC,IAAAA,UAAU,EAAEC,KAAK,CAACD,UAAU,IAAI;GAAI;AAC7E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,uBAAuBA,CAACvC,KAAK,EAAEwC,MAAM,GAAG,EAAE,EAC1D;AACI,EAAA,MAAMT,MAAM,GAAGS,MAAM,CAACT,MAAM,IAAI,QAAQ;AACxC,EAAA,MAAMU,MAAM,GAAG,IAAIC,qBAAqB,CAAC1C,KAAK,EAAE;AAAE+B,IAAAA;AAAO,GAAC,CAAC;EAE3D,MAAME,MAAM,GAAG,EAAE;EACjB,MAAMU,OAAO,GAAG,EAAE;AAClB,EAAA,MAAMC,eAAe,GAAG,IAAIC,GAAG,EAAE;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,MAAMC,0BAA0B,GAAG,IAAID,GAAG,EAAE;AAE5C,EAAA,KAAK,IAAIE,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGN,MAAM,CAACO,OAAO,CAACC,MAAM,EAAEF,KAAK,IAAI,CAAC,EAC7D;IACI,MAAM;AAAE9B,MAAAA;AAAO,KAAC,GAAGwB,MAAM,CAACO,OAAO,CAACD,KAAK,CAAC;AACxC,IAAA,MAAMG,IAAI,GAAGJ,0BAA0B,CAACK,GAAG,CAAClC,MAAM,CAAC;AACnD,IAAA,IAAIiC,IAAI,EAAEA,IAAI,CAACE,IAAI,CAACL,KAAK,CAAC,CAAC,KACtBD,0BAA0B,CAACO,GAAG,CAACpC,MAAM,EAAE,CAAE8B,KAAK,CAAE,CAAC;AAC1D,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,MAAMO,mBAAmB,GAAG,IAAIT,GAAG,EAAE;AAErC,EAAA,KAAK,IAAIE,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAGN,MAAM,CAACO,OAAO,CAACC,MAAM,EAAEF,KAAK,IAAI,CAAC,EAC7D;IACI,MAAM;AAAE9B,MAAAA;AAAO,KAAC,GAAGwB,MAAM,CAACO,OAAO,CAACD,KAAK,CAAC;AACxC,IAAA,IAAIH,eAAe,CAACW,GAAG,CAACtC,MAAM,CAAC,EAAE;AAEjC,IAAA,MAAMuC,OAAO,GAAG,CAAA,KAAA,EAAQZ,eAAe,CAAChC,IAAI,CAAA,CAAE;AAC9CgC,IAAAA,eAAe,CAACS,GAAG,CAACpC,MAAM,EAAEuC,OAAO,CAAC;AAEpC,IAAA,MAAMC,WAAW,GAAGhB,MAAM,CAACiB,eAAe,CAACX,KAAK,EAAE;AAAEY,MAAAA,OAAO,EAAE;AAAK,KAAC,CAAC;AAEpE,IAAA,KAAK,MAAMC,SAAS,IAAIH,WAAW,CAACI,UAAU,EAC9C;AACI,MAAA,MAAMC,aAAa,GAAGF,SAAS,CAAC7C,IAAI,CAACC,KAAK;AAC1C,MAAA,KAAK,MAAM,CAAE+C,SAAS,EAAElC,IAAI,CAAE,IAAI+B,SAAS,CAACI,MAAM,CAACC,OAAO,EAAE,EAC5D;AACI,QAAA,MAAMnC,OAAO,GAAG,CAAA,EAAGgC,aAAa,CAAA,KAAA,EAAQC,SAAS,CAAA,CAAE;QACnD,MAAM;AAAE9B,UAAAA,MAAM,EAAE0B,OAAO;AAAEzB,UAAAA;SAAY,GAAGN,aAAa,CACjDC,IAAI,EACJC,OAAO,EACPC,MACJ,CAAC;AAED,QAAA,KAAK,MAAMlC,KAAK,IAAIgC,IAAI,CAACI,MAAM,EAC/B;AACI,UAAA,MAAMlB,IAAI,GAAGmD,mBAAmB,CAACrE,KAAK,CAACqB,IAAI,CAAC;UAC5C,MAAMiD,QAAQ,GAAG,CAAA,EAAGX,OAAO,IAAI1B,OAAO,CAAA,CAAA,EAAIf,IAAI,CAAA,CAAE;UAChD,MAAMqD,YAAY,GAAGT,OAAO,CAAC5C,IAAI,CAAC,IAAI,EAAE;AAExC,UAAA,IAAIsD,SAAS;AACb,UAAA,IAAIxE,KAAK,CAACyE,UAAU,EAAE1D,IAAI,EAC1B;AACI,YAAA,MAAM2D,IAAI,GAAG,IAAIC,WAAW,EAAE,CAACC,MAAM,CAAC5E,KAAK,CAACyE,UAAU,CAACjC,KAAK,CAAC;AAC7D,YAAA,MAAMqC,QAAQ,GAAG,CAAA,EAAGC,IAAI,CAACC,SAAS,CAAC,CAC/BR,YAAY,CAAC7D,QAAQ,IAAI,EAAE,EAC3B6D,YAAY,CAACS,WAAW,IAAI,EAAE,EAC9BT,YAAY,CAACU,eAAe,IAAI,IAAI,CACvC,CAAC,CAAA,CAAA,EAAIP,IAAI,CAAA,CAAE;AACZ,YAAA,MAAMQ,MAAM,GAAGzB,mBAAmB,CAACH,GAAG,CAACuB,QAAQ,CAAC;AAChD,YAAA,IAAIK,MAAM,EACV;AACIV,cAAAA,SAAS,GAAGU,MAAM;AACtB,YAAA,CAAC,MAED;AACIV,cAAAA,SAAS,GAAG,CAAA,OAAA,EAAUf,mBAAmB,CAAC1C,IAAI,CAAA,CAAE;AAChD0C,cAAAA,mBAAmB,CAACD,GAAG,CAACqB,QAAQ,EAAEL,SAAS,CAAC;cAC5C1B,OAAO,CAACS,IAAI,CAAC;AACT4B,gBAAAA,GAAG,EAAEX,SAAS;AACdY,gBAAAA,SAAS,EAAElE,IAAI;AACfgB,gBAAAA,MAAM,EAAEwC,IAAI;AACZW,gBAAAA,UAAU,EAAE;AAAEC,kBAAAA,EAAE,EAAE;iBAAM;AACxB5E,gBAAAA,QAAQ,EAAE6D,YAAY,CAAC7D,QAAQ,IAAI,EAAE;AACrCsE,gBAAAA,WAAW,EAAET,YAAY,CAACS,WAAW,IAAI,EAAE;gBAC3C,IAAIT,YAAY,CAACU,eAAe,GAC1B;kBAAEA,eAAe,EAAEV,YAAY,CAACU;iBAAiB,GACjD,EAAE;AACZ,eAAC,CAAC;AACN,YAAA;AACJ,UAAA,CAAC,MAED;YACIT,SAAS,GAAG,CAAA,EAAGF,QAAQ,CAAA,OAAA,CAAS;YAChCxB,OAAO,CAACS,IAAI,CAAC;AACT4B,cAAAA,GAAG,EAAEX,SAAS;AACdY,cAAAA,SAAS,EAAElE,IAAI;AACfgB,cAAAA,MAAM,EAAE,EAAE;AACVmD,cAAAA,UAAU,EAAE;AAAEC,gBAAAA,EAAE,EAAE,KAAK;AAAEC,gBAAAA,MAAM,EAAEzF;eAAmB;AACpDY,cAAAA,QAAQ,EAAE6D,YAAY,CAAC7D,QAAQ,IAAI,EAAE;AACrCsE,cAAAA,WAAW,EAAET,YAAY,CAACS,WAAW,IAAI;AAC7C,aAAC,CAAC;AACN,UAAA;UAEA5C,MAAM,CAACmB,IAAI,CAAC;AACR4B,YAAAA,GAAG,EAAEb,QAAQ;YACbX,OAAO;YACPM,aAAa;YACbC,SAAS;AACTkB,YAAAA,SAAS,EAAElE,IAAI;YACfsE,SAAS,EAAExF,KAAK,CAACqB,IAAI;YACrBmD,SAAS;AACTiB,YAAAA,QAAQ,EAAE1F,aAAa,CAACC,KAAK,CAAC;AAC9B;AACA;AACAqC,YAAAA;AACJ,WAAC,CAAC;AACN,QAAA;AACJ,MAAA;AACJ,IAAA;AACJ,EAAA;;AAEA;EACA,MAAMqD,MAAM,GAAG,EAAE;EACjB,KAAK,MAAM,CAAEtE,MAAM,EAAE+D,GAAG,CAAE,IAAIpC,eAAe,EAC7C;IACI2C,MAAM,CAACnC,IAAI,CAAC;MACR4B,GAAG;AACHQ,MAAAA,kBAAkB,EAAEC,MAAM,CAACC,MAAM,CAAC5C,0BAA0B,CAACK,GAAG,CAAClC,MAAM,CAAC,IAAI,EAAE;AAClF,KAAC,CAAC;AACN,EAAA;EAEA,OAAO;IACHgB,MAAM;IACNU,OAAO;IACP4C,MAAM;AACNI,IAAAA,WAAW,EAAElD,MAAM,CAACO,OAAO,CAACC,MAAM;IAClC2C,SAAS,EAAEhD,eAAe,CAAChC;GAC9B;AACL;;;;"}
|
|
1
|
+
{"version":3,"file":"readGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/readGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\r\nimport { readGlslBackendBlock } from \"./glslBackendBlock.js\";\r\nimport { hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\r\nimport { runtimeDescriptionFromCarbon } from \"../../hlsl/core/carbonDescriptionToRuntime.js\";\r\nimport { HlslEffectBindingManifest } from \"../../hlsl/core/tr2/shader/HlslEffectBindingManifest.js\";\r\n\r\n/**\r\n * Decodes a WebGL effect container into the stage/shader records the\r\n * completeness rules consume.\r\n *\r\n * This exists so the rules run from container bytes alone. The alternative was\r\n * to hand them the in-memory translation, which works inside `buildEffectPackage`\r\n * and nowhere else — the validator reads a finished file and has no translation\r\n * in scope. That would have cost the validator its completeness check while\r\n * still requiring a decoder to produce the programs it compiles in a browser, so\r\n * it was strictly more work for strictly less checking.\r\n *\r\n * The vocabulary is deliberately the one the rules already speak — `stages` with\r\n * pass coordinates, `shaders` with source and a translation verdict. The rules\r\n * are about the translation, not about how it was stored, so retargeting them\r\n * meant changing where the records come from and nothing about what they mean.\r\n *\r\n * **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body\r\n * the translator could not lower as its full pass tree with zero-length\r\n * programs; the *reason* it failed stays in the in-memory build result and is\r\n * never written. So a shader decoded from bytes reports `ok: false` with\r\n * \"no program was stored\" and nothing more specific. That is the honest answer:\r\n * a file on disk does not know why a translation failed months ago. Callers that\r\n * do know — `buildEffectPackage`, at build time — keep their specific\r\n * diagnostics by feeding the rules their own records instead.\r\n */\r\n\r\n/** The verdict a stage carrying no stored program gets. */\r\nconst NO_PROGRAM_REASON = \"no program was stored\";\r\n\r\n/**\r\n * Derives the per-stage binding manifests for one body through the one\r\n * manifest builder the source path uses.\r\n *\r\n * This replaces a hand-built reshape of the wire records into the manifest\r\n * vocabulary. That copy had already diverged from the real manifest once —\r\n * `isAutoregister` was silently dropped, making every resource look\r\n * user-settable — which is the whole argument against a second producer: two\r\n * hand-maintained spellings of one reflection drift, and the drift is exactly\r\n * the kind of bug that draws, links and renders black without an error. The\r\n * record tree now flows through `runtimeDescriptionFromCarbon` — the\r\n * corpus-proven adapter the runtime read path uses — and\r\n * `HlslEffectBindingManifest`, so the container read and the build-time\r\n * package derive their manifests from the same code.\r\n *\r\n * No `bytecodeFor` is supplied: program text lives in the shader records this\r\n * reader emits, so the manifest's `shaderBytecode` stays null rather than\r\n * duplicating every program into the reflection.\r\n *\r\n * @param {object} description Decoded Carbon description record tree.\r\n * @param {number} version Container data version.\r\n * @param {string} source Source name for diagnostics.\r\n * @returns {Map<string, object>} Manifest stage records keyed by\r\n * `technique.passN.stageName`.\r\n */\r\nfunction bodyManifestStages(description, version, source)\r\n{\r\n const runtime = runtimeDescriptionFromCarbon(description, {\r\n effectName: source,\r\n version\r\n });\r\n const manifest = HlslEffectBindingManifest.fromEffectDescription(runtime).toJSON();\r\n return new Map(manifest.stages.map((stage) => [\r\n `${stage.techniqueName}.pass${stage.passIndex}.${stage.stageName}`,\r\n stage\r\n ]));\r\n}\r\n\r\n/**\r\n * Decodes one pass's backend block, tolerating a pass that has none.\r\n *\r\n * @param {object} pass Decoded pass record.\r\n * @param {string} passKey Enclosing pass key.\r\n * @param {string} source Source name for error details.\r\n * @returns {object} Per-stage backend data, keyed by stage name.\r\n */\r\nfunction backendStages(pass, passKey, source)\r\n{\r\n if (!pass.backendBlock?.size) return { stages: {}, transforms: [] };\r\n const block = readGlslBackendBlock(pass.backendBlock.bytes, { layoutKey: passKey, source });\r\n return { stages: block.stages ?? {}, transforms: block.transforms ?? [] };\r\n}\r\n\r\n/**\r\n * Decodes container bytes into stage and shader records.\r\n *\r\n * Bodies are decoded once each rather than once per permutation row: rows alias\r\n * onto shared bodies, and a rule that saw the same body 4,096 times would report\r\n * 4,096 identical incomplete passes.\r\n *\r\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\r\n * @param {object} [values] Read values.\r\n * @param {string} [values.source] Source name, for diagnostics.\r\n * @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}\r\n * Stage graph in the completeness rules' vocabulary.\r\n */\r\nexport function readGlslEffectContainer(input, values = {})\r\n{\r\n const source = values.source ?? \"memory\";\r\n const reader = new CjsCarbonEffectReader(input, { source });\r\n\r\n const stages = [];\r\n const shaders = [];\r\n const bodyKeyByOffset = new Map();\r\n\r\n // Every permutation index that resolves to each body.\r\n //\r\n // This is the bridge a caller actually needs, and the only one that is\r\n // sound. `bodyKey` here is this reader's own ordinal spelling; the\r\n // permutation graph mints `body${N}` for the same body, and the two are not\r\n // merely spelled differently — the graph dedupes by content (SHA-256 plus\r\n // byte equality) while this reader dedupes by source-record offset. Those\r\n // partitions coincide only because the container writer aliases\r\n // byte-identical bodies onto one offset, which is a property of the writer\r\n // rather than a contract.\r\n //\r\n // So a consumer must never map between the two by string surgery on either\r\n // spelling, and must not assume the two ordinal sequences agree. It holds a\r\n // permutation index; this gives it the body directly.\r\n const permutationIndicesByOffset = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n const seen = permutationIndicesByOffset.get(offset);\r\n if (seen) seen.push(index);\r\n else permutationIndicesByOffset.set(offset, [ index ]);\r\n }\r\n\r\n // Distinct program texts share one shader record, so `shaders` counts unique\r\n // translations the way the chunk package's shader table did. Empty stages are\r\n // deliberately *not* pooled: each keeps its own record so a report can name\r\n // every pass that is missing a program rather than one shared \"absent\".\r\n //\r\n // The pool key is the program text *and* the backend reflection that came\r\n // with it, not the text alone. A pooled record carries the bindings and\r\n // stage inputs of whichever stage was seen first, and\r\n // `validateShaderRuntimeContract` judges the emitted GLSL against them — so\r\n // pooling on text alone would let two stages with identical source but\r\n // different reflection be checked against the wrong metadata, silently. It\r\n // is unlikely that identical GLSL ever carries different reflection, which\r\n // is exactly why it would not be noticed.\r\n const shaderKeyByIdentity = new Map();\r\n\r\n for (let index = 0; index < reader.records.length; index += 1)\r\n {\r\n const { offset } = reader.records[index];\r\n if (bodyKeyByOffset.has(offset)) continue;\r\n\r\n const bodyKey = `body_${bodyKeyByOffset.size}`;\r\n bodyKeyByOffset.set(offset, bodyKey);\r\n\r\n const description = reader.readDescription(index, { backend: true });\r\n const manifestStages = bodyManifestStages(description, reader.version, source);\r\n\r\n for (const technique of description.techniques)\r\n {\r\n const techniqueName = technique.name.value;\r\n for (const [ passIndex, pass ] of technique.passes.entries())\r\n {\r\n const passKey = `${techniqueName}.pass${passIndex}`;\r\n const { stages: backend, transforms } = backendStages(\r\n pass,\r\n passKey,\r\n source\r\n );\r\n\r\n for (const stage of pass.stages)\r\n {\r\n const name = hlslShaderStageName(stage.type);\r\n const stageKey = `${bodyKey}.${passKey}.${name}`;\r\n const stageBackend = backend[name] ?? {};\r\n\r\n let shaderKey;\r\n if (stage.shaderData?.size)\r\n {\r\n const code = new TextDecoder().decode(stage.shaderData.bytes);\r\n const identity = `${JSON.stringify([\r\n stageBackend.bindings ?? [],\r\n stageBackend.stageInputs ?? [],\r\n stageBackend.computeFragment ?? null\r\n ])} ${code}`;\r\n const pooled = shaderKeyByIdentity.get(identity);\r\n if (pooled)\r\n {\r\n shaderKey = pooled;\r\n }\r\n else\r\n {\r\n shaderKey = `shader_${shaderKeyByIdentity.size}`;\r\n shaderKeyByIdentity.set(identity, shaderKey);\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: code,\r\n hlsl2webgl: { ok: true },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? [],\r\n ...(stageBackend.computeFragment\r\n ? { computeFragment: stageBackend.computeFragment }\r\n : {})\r\n });\r\n }\r\n }\r\n else\r\n {\r\n shaderKey = `${stageKey}.absent`;\r\n shaders.push({\r\n key: shaderKey,\r\n stageName: name,\r\n source: \"\",\r\n hlsl2webgl: { ok: false, reason: NO_PROGRAM_REASON },\r\n bindings: stageBackend.bindings ?? [],\r\n stageInputs: stageBackend.stageInputs ?? []\r\n });\r\n }\r\n\r\n stages.push({\r\n key: stageKey,\r\n bodyKey,\r\n techniqueName,\r\n passIndex,\r\n stageName: name,\r\n stageType: stage.type,\r\n shaderKey,\r\n manifest: manifestStages.get(`${passKey}.${name}`) ?? null,\r\n // The pass's transforms, so a rule can ask whether a\r\n // description resource was merged away rather than lost.\r\n transforms\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Ordered by first appearance, matching `bodyKey`'s ordinal.\r\n const bodies = [];\r\n for (const [ offset, key ] of bodyKeyByOffset)\r\n {\r\n bodies.push({\r\n key,\r\n permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])\r\n });\r\n }\r\n\r\n return {\r\n stages,\r\n shaders,\r\n bodies,\r\n recordCount: reader.records.length,\r\n bodyCount: bodyKeyByOffset.size\r\n };\r\n}\r\n\r\nexport default readGlslEffectContainer;\r\n"],"names":["NO_PROGRAM_REASON","bodyManifestStages","description","version","source","runtime","runtimeDescriptionFromCarbon","effectName","manifest","HlslEffectBindingManifest","fromEffectDescription","toJSON","Map","stages","map","stage","techniqueName","passIndex","stageName","backendStages","pass","passKey","backendBlock","size","transforms","block","readGlslBackendBlock","bytes","layoutKey","readGlslEffectContainer","input","values","reader","CjsCarbonEffectReader","shaders","bodyKeyByOffset","permutationIndicesByOffset","index","records","length","offset","seen","get","push","set","shaderKeyByIdentity","has","bodyKey","readDescription","backend","manifestStages","technique","techniques","name","value","passes","entries","hlslShaderStageName","type","stageKey","stageBackend","shaderKey","shaderData","code","TextDecoder","decode","identity","JSON","stringify","bindings","stageInputs","computeFragment","pooled","key","hlsl2webgl","ok","reason","stageType","bodies","permutationIndices","Object","freeze","recordCount","bodyCount"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { CjsWebglFormat, CjsWebglFormat as default } from './CjsWebglFormat.js';
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
export { CjsWebglFormat, CjsWebglFormat as default } from './CjsWebglFormat.js';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|