@carbonenginejs/runtime-resource 0.12.1 → 0.13.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 -108
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3494
- package/dist/CjsResMan.js.map +1 -1
- 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 +408 -361
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -0
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js.map +1 -0
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -427
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -955
- package/dist/format/carbonEffect/carbonEffectRecords.js.map +1 -1
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -0
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js.map +1 -0
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -0
- package/dist/format/effect/effectBodyInventory.js.map +1 -0
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/effectPermutationGraph.js.map +1 -1
- 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 -292
- package/dist/formats/black/CjsBlackFormat.js.map +1 -1
- 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 -156
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/formats/bnk/core/busNodes.js +252 -0
- package/dist/formats/bnk/core/busNodes.js.map +1 -0
- package/dist/formats/bnk/core/effectNodes.js +147 -0
- package/dist/formats/bnk/core/effectNodes.js.map +1 -0
- package/dist/formats/bnk/core/eventAction.js +416 -305
- package/dist/formats/bnk/core/eventAction.js.map +1 -1
- package/dist/formats/bnk/core/globalSettings.js +215 -0
- package/dist/formats/bnk/core/globalSettings.js.map +1 -0
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -480
- package/dist/formats/bnk/core/helpers.js.map +1 -1
- package/dist/formats/bnk/core/musicNodes.js +533 -509
- package/dist/formats/bnk/core/musicNodes.js.map +1 -1
- package/dist/formats/bnk/core/nodeBase.js +553 -532
- package/dist/formats/bnk/core/nodeBase.js.map +1 -1
- 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 +862 -862
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +142 -142
- 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/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 +290 -290
- package/dist/formats/gltf/core/helpers.js +307 -307
- 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 +254 -254
- 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 -781
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -0
- package/dist/formats/hlsl/core/detailMapFamily.js.map +1 -0
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -0
- package/dist/formats/hlsl/core/localLightFamily.js.map +1 -0
- 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 -314
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +416 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -742
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js.map +1 -1
- 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 -31
- package/dist/formats/index.js.map +1 -1
- 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 +253 -253
- package/dist/formats/obj/core/helpers.js +573 -573
- 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 -0
- package/dist/formats/pickle/CjsPickleFormat.js.map +1 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -0
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -0
- package/dist/formats/pickle/index.js +2 -0
- package/dist/formats/pickle/index.js.map +1 -0
- package/dist/formats/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 -68
- package/dist/formats/red/core/redGraph.js.map +1 -1
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +365 -365
- package/dist/formats/stl/core/helpers.js +261 -261
- 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 -221
- package/dist/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -0
- package/dist/formats/webgl/core/buildGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/effectPackage.js +900 -792
- package/dist/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/errors.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2678
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -428
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -0
- package/dist/formats/webgl/core/glsl/packedLightFixups.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -0
- package/dist/formats/webgl/core/glslBackendBlock.js.map +1 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -0
- package/dist/formats/webgl/core/glslBackendBodySet.js.map +1 -0
- package/dist/formats/webgl/core/{cewgCompleteness.js → glslEffectCompleteness.js} +85 -81
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -0
- package/dist/formats/webgl/core/helpers.js +167 -306
- package/dist/formats/webgl/core/helpers.js.map +1 -1
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -0
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js +303 -0
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -0
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -197
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js.map +1 -1
- package/dist/formats/webgpu/core/{cewgpu/CewgpuContainer.js → carbonWebgpu/CarbonWebgpuContainer.js} +354 -368
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js.map +1 -0
- package/dist/formats/webgpu/core/{cewgpu → carbonWebgpu}/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -0
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +289 -289
- package/dist/formats/webgpu/core/effectBackendBodySet.js.map +1 -1
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/errors.js.map +1 -1
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/helpers.js.map +1 -1
- 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 -385
- package/dist/formats/webgpu/core/packageEffect.js.map +1 -1
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageEffectSelection.js.map +1 -1
- 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/buildResourceTransformPlan.js.map +1 -1
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +320 -320
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- 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/CjsYamlFormat.js.map +1 -1
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -402
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
- package/dist/formats/yaml/core/helpers.js +196 -170
- package/dist/formats/yaml/core/helpers.js.map +1 -1
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -62
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsLoadingObject.js +19 -0
- package/dist/resource/CjsLoadingObject.js.map +1 -0
- package/dist/resource/CjsResource.js +801 -797
- package/dist/resource/CjsResource.js.map +1 -1
- package/dist/resource/ResourceHandlerMode.js +14 -0
- package/dist/resource/ResourceHandlerMode.js.map +1 -0
- package/dist/resource/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 +675 -675
- 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 -52
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -431
- package/dist/resource/shader/Tr2EffectRes.js.map +1 -1
- 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 -261
- package/dist/resource/shader/Tr2Shader.js.map +1 -1
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -135
- package/dist/resource/shader/reflection/Tr2EffectConstant.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -109
- package/dist/resource/shader/reflection/Tr2EffectDescription.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -147
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -105
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -86
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -241
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -68
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -111
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -0
- package/dist/resource/shader/reflection/carbonRecordFields.js.map +1 -0
- package/dist/resource/shader/reflection/shaderStage.js +22 -0
- package/dist/resource/shader/reflection/shaderStage.js.map +1 -0
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -77
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js.map +1 -1
- 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 -87
- package/dist/worker/CjsResManMainThreadLoader.js.map +1 -1
- package/dist/worker/CjsResManWorker.js +218 -217
- package/dist/worker/CjsResManWorker.js.map +1 -1
- package/dist/worker/CjsResManWorkerLoader.js +437 -434
- package/dist/worker/CjsResManWorkerLoader.js.map +1 -1
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -109
- package/docs/concepts/resource-lifecycle.md +226 -225
- package/docs/concepts/shader-resource-model.md +111 -114
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -136
- package/docs/formats/carbon-effect-container.md +553 -452
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +77 -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 +65 -67
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -62
- package/docs/formats/hlsl/guides/reading-effects.md +64 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -66
- package/docs/formats/hlsl/reference/api.md +92 -98
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -100
- package/docs/formats/pickle.md +82 -0
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -57
- package/docs/formats/webgl/architecture.md +69 -70
- 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 -871
- 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 -96
- package/docs/formats/webgpu/formats/{cewgpu.md → carbon-webgpu.md} +215 -216
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -191
- package/docs/formats/webgpu/reference/api.md +196 -197
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1543
- package/docs/formats/wwise.md +146 -85
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -206
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -952
- 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 -110
- 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 -135
- 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
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js +0 -372
- package/dist/format/carbonEffect/carbonDescriptionFromPortable.js.map +0 -1
- package/dist/format/effect/effectReflectionPackage.js +0 -636
- package/dist/format/effect/effectReflectionPackage.js.map +0 -1
- package/dist/formats/hlsl/core/HlslReader.js +0 -16
- package/dist/formats/hlsl/core/HlslReader.js.map +0 -1
- package/dist/formats/hlsl/core/portableReflection.js +0 -848
- package/dist/formats/hlsl/core/portableReflection.js.map +0 -1
- package/dist/formats/hlsl/portable.js +0 -2
- package/dist/formats/hlsl/portable.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackage.js +0 -340
- package/dist/formats/webgl/core/cewg/CewgPackage.js.map +0 -1
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js +0 -104
- package/dist/formats/webgl/core/cewg/CewgPackageBuilder.js.map +0 -1
- package/dist/formats/webgl/core/cewg/binary.js +0 -19
- package/dist/formats/webgl/core/cewg/binary.js.map +0 -1
- package/dist/formats/webgl/core/cewgCompleteness.js.map +0 -1
- package/dist/formats/webgl/core/effectPackageValidation.js +0 -331
- package/dist/formats/webgl/core/effectPackageValidation.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/CewgpuContainer.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/containerViews.js.map +0 -1
- package/dist/formats/webgpu/core/cewgpu/validateContainer.js.map +0 -1
- package/dist/resource/shader/portable.js +0 -33
- package/dist/resource/shader/portable.js.map +0 -1
- package/docs/formats/hlsl/reference/portable-reflection.md +0 -141
- package/docs/formats/webgl/effect-reflection.md +0 -127
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
|
|
2
|
+
import { hlslShaderStageName } from '../../hlsl/core/tr2/HlslRenderContextEnum.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Cheap inspection of a WebGL effect container.
|
|
6
|
+
*
|
|
7
|
+
* The chunk package's inspection reported tags, offsets and sizes, because a
|
|
8
|
+
* chunk file's structure *was* a list of tagged byte ranges. A Carbon v15
|
|
9
|
+
* container has no such list, so none of that vocabulary is carried across. A
|
|
10
|
+
* `chunks` array describing a container would be a lie, and a believed one.
|
|
11
|
+
*
|
|
12
|
+
* What a container's structure actually is: an arena of strings, a set of
|
|
13
|
+
* permutation axes, and an offset table whose rows point at description bodies —
|
|
14
|
+
* with rows deliberately aliased onto one body when permutations share a
|
|
15
|
+
* translation. So that is what this reports: how many rows, how many distinct
|
|
16
|
+
* bodies they resolve to, how much of the file is arena, and what the axes are.
|
|
17
|
+
*
|
|
18
|
+
* `uniqueBodyCount` and `aliasedRowCount` come from the reader's own structural
|
|
19
|
+
* diagnostics rather than being recomputed here — the reader already validates
|
|
20
|
+
* every row's byte range while building them, so a second walk could only
|
|
21
|
+
* disagree with the thing that already refused to construct.
|
|
22
|
+
*
|
|
23
|
+
* Body decoding is done once per *distinct* body offset, not once per row.
|
|
24
|
+
* Effects here reach 4,096 permutations over a few dozen bodies, so decoding per
|
|
25
|
+
* row would make an inspection call cost more than the packaging that produced
|
|
26
|
+
* the file.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Counts programs and backend blocks across the container's distinct bodies.
|
|
31
|
+
*
|
|
32
|
+
* A stage slot with zero-length `shaderData` is a declared stage that carries no
|
|
33
|
+
* stored program — the shape `buildCarbonEffectContainer` emits for a body the
|
|
34
|
+
* translator could not lower. Counting those separately is the whole point: a
|
|
35
|
+
* container with every stage present and every program empty would otherwise
|
|
36
|
+
* inspect identically to a complete one.
|
|
37
|
+
*
|
|
38
|
+
* @param {CjsCarbonEffectReader} reader Container reader.
|
|
39
|
+
* @returns {{programCount:number, emptyProgramCount:number, backendBlockCount:number,
|
|
40
|
+
* techniqueCount:number, passCount:number, stageNames:string[]}} Body tallies.
|
|
41
|
+
*/
|
|
42
|
+
function inspectBodies(reader) {
|
|
43
|
+
const seenOffsets = new Set();
|
|
44
|
+
const stageNames = new Set();
|
|
45
|
+
let programCount = 0;
|
|
46
|
+
let emptyProgramCount = 0;
|
|
47
|
+
let backendBlockCount = 0;
|
|
48
|
+
let techniqueCount = 0;
|
|
49
|
+
let passCount = 0;
|
|
50
|
+
for (let index = 0; index < reader.records.length; index += 1) {
|
|
51
|
+
const {
|
|
52
|
+
offset
|
|
53
|
+
} = reader.records[index];
|
|
54
|
+
if (seenOffsets.has(offset)) continue;
|
|
55
|
+
seenOffsets.add(offset);
|
|
56
|
+
const description = reader.readDescription(index, {
|
|
57
|
+
backend: true
|
|
58
|
+
});
|
|
59
|
+
for (const technique of description.techniques) {
|
|
60
|
+
techniqueCount += 1;
|
|
61
|
+
for (const pass of technique.passes) {
|
|
62
|
+
passCount += 1;
|
|
63
|
+
if (pass.backendBlock?.size) backendBlockCount += 1;
|
|
64
|
+
for (const stage of pass.stages) {
|
|
65
|
+
stageNames.add(hlslShaderStageName(stage.type));
|
|
66
|
+
if (stage.shaderData?.size) programCount += 1;else emptyProgramCount += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
programCount,
|
|
73
|
+
emptyProgramCount,
|
|
74
|
+
backendBlockCount,
|
|
75
|
+
techniqueCount,
|
|
76
|
+
passCount,
|
|
77
|
+
stageNames: [...stageNames].sort()
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Inspects WebGL effect container bytes.
|
|
83
|
+
*
|
|
84
|
+
* @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.
|
|
85
|
+
* @param {object} [values] Normalized format values.
|
|
86
|
+
* @param {string} [values.source] Source name, for diagnostics.
|
|
87
|
+
* @returns {object} Plain summary data.
|
|
88
|
+
*/
|
|
89
|
+
function inspectGlslEffectContainer(input, values = {}) {
|
|
90
|
+
const source = values.source ?? "memory";
|
|
91
|
+
const reader = new CjsCarbonEffectReader(input, {
|
|
92
|
+
source
|
|
93
|
+
});
|
|
94
|
+
const bodies = inspectBodies(reader);
|
|
95
|
+
return {
|
|
96
|
+
source,
|
|
97
|
+
isContainer: true,
|
|
98
|
+
version: reader.version,
|
|
99
|
+
compilerVersion: [...reader.compilerVersion],
|
|
100
|
+
byteLength: reader.bytes.length,
|
|
101
|
+
arenaByteLength: reader.stringTableSize,
|
|
102
|
+
// The offset table, and what it resolves to. `recordCount` counts rows;
|
|
103
|
+
// `uniqueBodyCount` counts the bodies those rows point at. The gap
|
|
104
|
+
// between them is the sharing, which is the container's whole reason for
|
|
105
|
+
// being cheaper than one file per permutation.
|
|
106
|
+
recordCount: reader.diagnostics.recordCount,
|
|
107
|
+
permutationProduct: reader.diagnostics.permutationProduct,
|
|
108
|
+
dense: reader.diagnostics.dense,
|
|
109
|
+
uniqueBodyCount: reader.diagnostics.uniqueBodyCount,
|
|
110
|
+
aliasedRowCount: reader.diagnostics.aliasedRowCount,
|
|
111
|
+
permutationAxes: reader.permutations.map(axis => ({
|
|
112
|
+
name: axis.name.value,
|
|
113
|
+
type: axis.type,
|
|
114
|
+
defaultOption: axis.defaultOption,
|
|
115
|
+
options: axis.options.map(option => option.value)
|
|
116
|
+
})),
|
|
117
|
+
...bodies
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { inspectGlslEffectContainer };
|
|
122
|
+
//# sourceMappingURL=inspectGlslEffectContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspectGlslEffectContainer.js","sources":["../../../../../src/formats/webgl/core/inspectGlslEffectContainer.js"],"sourcesContent":["import { CjsCarbonEffectReader } from \"../../../format/carbonEffect/CjsCarbonEffectReader.js\";\nimport { hlslShaderStageName } from \"../../hlsl/core/tr2/HlslRenderContextEnum.js\";\n\n/**\n * Cheap inspection of a WebGL effect container.\n *\n * The chunk package's inspection reported tags, offsets and sizes, because a\n * chunk file's structure *was* a list of tagged byte ranges. A Carbon v15\n * container has no such list, so none of that vocabulary is carried across. A\n * `chunks` array describing a container would be a lie, and a believed one.\n *\n * What a container's structure actually is: an arena of strings, a set of\n * permutation axes, and an offset table whose rows point at description bodies —\n * with rows deliberately aliased onto one body when permutations share a\n * translation. So that is what this reports: how many rows, how many distinct\n * bodies they resolve to, how much of the file is arena, and what the axes are.\n *\n * `uniqueBodyCount` and `aliasedRowCount` come from the reader's own structural\n * diagnostics rather than being recomputed here — the reader already validates\n * every row's byte range while building them, so a second walk could only\n * disagree with the thing that already refused to construct.\n *\n * Body decoding is done once per *distinct* body offset, not once per row.\n * Effects here reach 4,096 permutations over a few dozen bodies, so decoding per\n * row would make an inspection call cost more than the packaging that produced\n * the file.\n */\n\n/**\n * Counts programs and backend blocks across the container's distinct bodies.\n *\n * A stage slot with zero-length `shaderData` is a declared stage that carries no\n * stored program — the shape `buildCarbonEffectContainer` emits for a body the\n * translator could not lower. Counting those separately is the whole point: a\n * container with every stage present and every program empty would otherwise\n * inspect identically to a complete one.\n *\n * @param {CjsCarbonEffectReader} reader Container reader.\n * @returns {{programCount:number, emptyProgramCount:number, backendBlockCount:number,\n * techniqueCount:number, passCount:number, stageNames:string[]}} Body tallies.\n */\nfunction inspectBodies(reader)\n{\n const seenOffsets = new Set();\n const stageNames = new Set();\n let programCount = 0;\n let emptyProgramCount = 0;\n let backendBlockCount = 0;\n let techniqueCount = 0;\n let passCount = 0;\n\n for (let index = 0; index < reader.records.length; index += 1)\n {\n const { offset } = reader.records[index];\n if (seenOffsets.has(offset)) continue;\n seenOffsets.add(offset);\n\n const description = reader.readDescription(index, { backend: true });\n for (const technique of description.techniques)\n {\n techniqueCount += 1;\n for (const pass of technique.passes)\n {\n passCount += 1;\n if (pass.backendBlock?.size) backendBlockCount += 1;\n for (const stage of pass.stages)\n {\n stageNames.add(hlslShaderStageName(stage.type));\n if (stage.shaderData?.size) programCount += 1;\n else emptyProgramCount += 1;\n }\n }\n }\n }\n\n return {\n programCount,\n emptyProgramCount,\n backendBlockCount,\n techniqueCount,\n passCount,\n stageNames: [ ...stageNames ].sort()\n };\n}\n\n/**\n * Inspects WebGL effect container bytes.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.\n * @param {object} [values] Normalized format values.\n * @param {string} [values.source] Source name, for diagnostics.\n * @returns {object} Plain summary data.\n */\nexport function inspectGlslEffectContainer(input, values = {})\n{\n const source = values.source ?? \"memory\";\n const reader = new CjsCarbonEffectReader(input, { source });\n const bodies = inspectBodies(reader);\n\n return {\n source,\n isContainer: true,\n version: reader.version,\n compilerVersion: [ ...reader.compilerVersion ],\n byteLength: reader.bytes.length,\n arenaByteLength: reader.stringTableSize,\n\n // The offset table, and what it resolves to. `recordCount` counts rows;\n // `uniqueBodyCount` counts the bodies those rows point at. The gap\n // between them is the sharing, which is the container's whole reason for\n // being cheaper than one file per permutation.\n recordCount: reader.diagnostics.recordCount,\n permutationProduct: reader.diagnostics.permutationProduct,\n dense: reader.diagnostics.dense,\n uniqueBodyCount: reader.diagnostics.uniqueBodyCount,\n aliasedRowCount: reader.diagnostics.aliasedRowCount,\n\n permutationAxes: reader.permutations.map((axis) => ({\n name: axis.name.value,\n type: axis.type,\n defaultOption: axis.defaultOption,\n options: axis.options.map((option) => option.value)\n })),\n\n ...bodies\n };\n}\n\nexport default inspectGlslEffectContainer;\n"],"names":["inspectBodies","reader","seenOffsets","Set","stageNames","programCount","emptyProgramCount","backendBlockCount","techniqueCount","passCount","index","records","length","offset","has","add","description","readDescription","backend","technique","techniques","pass","passes","backendBlock","size","stage","stages","hlslShaderStageName","type","shaderData","sort","inspectGlslEffectContainer","input","values","source","CjsCarbonEffectReader","bodies","isContainer","version","compilerVersion","byteLength","bytes","arenaByteLength","stringTableSize","recordCount","diagnostics","permutationProduct","dense","uniqueBodyCount","aliasedRowCount","permutationAxes","permutations","map","axis","name","value","defaultOption","options","option"],"mappings":"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"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { CjsCarbonEffectReader } from '../../../format/carbonEffect/CjsCarbonEffectReader.js';
|
|
2
|
+
import { readGlslBackendBlock } from './glslBackendBlock.js';
|
|
3
|
+
import { hlslShaderStageName, HlslUsageCodeNames } from '../../hlsl/core/tr2/HlslRenderContextEnum.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Decodes a WebGL effect container into the stage/shader records the
|
|
7
|
+
* completeness rules consume.
|
|
8
|
+
*
|
|
9
|
+
* This exists so the rules run from container bytes alone. The alternative was
|
|
10
|
+
* to hand them the in-memory translation, which works inside `buildEffectPackage`
|
|
11
|
+
* and nowhere else — the validator reads a finished file and has no translation
|
|
12
|
+
* in scope. That would have cost the validator its completeness check while
|
|
13
|
+
* still requiring a decoder to produce the programs it compiles in a browser, so
|
|
14
|
+
* it was strictly more work for strictly less checking.
|
|
15
|
+
*
|
|
16
|
+
* The vocabulary is deliberately the one the rules already speak — `stages` with
|
|
17
|
+
* pass coordinates, `shaders` with source and a translation verdict. The rules
|
|
18
|
+
* are about the translation, not about how it was stored, so retargeting them
|
|
19
|
+
* meant changing where the records come from and nothing about what they mean.
|
|
20
|
+
*
|
|
21
|
+
* **What the wire cannot tell you.** `buildCarbonEffectContainer` stores a body
|
|
22
|
+
* the translator could not lower as its full pass tree with zero-length
|
|
23
|
+
* programs; the *reason* it failed stays in the in-memory build result and is
|
|
24
|
+
* never written. So a shader decoded from bytes reports `ok: false` with
|
|
25
|
+
* "no program was stored" and nothing more specific. That is the honest answer:
|
|
26
|
+
* a file on disk does not know why a translation failed months ago. Callers that
|
|
27
|
+
* do know — `buildEffectPackage`, at build time — keep their specific
|
|
28
|
+
* 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
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Reshapes one Carbon stage's own reflection into the manifest vocabulary the
|
|
36
|
+
* runtime-ABI rules read.
|
|
37
|
+
*
|
|
38
|
+
* The chunk package carried this as a separate META manifest, which is why the
|
|
39
|
+
* old rules cross-checked two chunks against each other. The container needs no
|
|
40
|
+
* such cross-check: `pipelineInputs`, `textures` and `samplers` are Carbon's own
|
|
41
|
+
* per-stage reflection, read straight out of the description. There is only one
|
|
42
|
+
* copy, so there is nothing for a second copy to disagree with — the class of
|
|
43
|
+
* bug those cross-chunk rules existed to catch cannot occur here.
|
|
44
|
+
*
|
|
45
|
+
* `usageName` is derived from the `usage` byte rather than carried, the same way
|
|
46
|
+
* `carbonDescriptionToRuntime.js:261` derives it.
|
|
47
|
+
*
|
|
48
|
+
* @param {object} stage Decoded Carbon stage record.
|
|
49
|
+
* @returns {{pipelineInputs:object[], bindings:object[]}} Manifest-shaped reflection.
|
|
50
|
+
*/
|
|
51
|
+
function stageManifest(stage) {
|
|
52
|
+
return {
|
|
53
|
+
pipelineInputs: (stage.pipelineInputs ?? []).map(input => ({
|
|
54
|
+
registerIndex: input.registerIndex,
|
|
55
|
+
usageName: HlslUsageCodeNames[input.usage] || `USAGE_${input.usage}`,
|
|
56
|
+
usageIndex: input.usageIndex,
|
|
57
|
+
usedMask: input.usedMask
|
|
58
|
+
})),
|
|
59
|
+
bindings: [
|
|
60
|
+
// The stage-local constant buffer, carrying the named constants an
|
|
61
|
+
// engine binds its material parameters to. Register 0 is this
|
|
62
|
+
// stage's own buffer in per-stage numbering; a consumer maps it to
|
|
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
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Decodes one pass's backend block, tolerating a pass that has none.
|
|
127
|
+
*
|
|
128
|
+
* @param {object} pass Decoded pass record.
|
|
129
|
+
* @param {string} passKey Enclosing pass key.
|
|
130
|
+
* @param {string} source Source name for error details.
|
|
131
|
+
* @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
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Decodes container bytes into stage and shader records.
|
|
150
|
+
*
|
|
151
|
+
* Bodies are decoded once each rather than once per permutation row: rows alias
|
|
152
|
+
* onto shared bodies, and a rule that saw the same body 4,096 times would report
|
|
153
|
+
* 4,096 identical incomplete passes.
|
|
154
|
+
*
|
|
155
|
+
* @param {Uint8Array|ArrayBuffer|Buffer|DataView} input Container payload.
|
|
156
|
+
* @param {object} [values] Read values.
|
|
157
|
+
* @param {string} [values.source] Source name, for diagnostics.
|
|
158
|
+
* @returns {{stages:object[], shaders:object[], recordCount:number, bodyCount:number}}
|
|
159
|
+
* 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
|
+
for (const technique of description.techniques) {
|
|
218
|
+
const techniqueName = technique.name.value;
|
|
219
|
+
for (const [passIndex, pass] of technique.passes.entries()) {
|
|
220
|
+
const passKey = `${techniqueName}.pass${passIndex}`;
|
|
221
|
+
const {
|
|
222
|
+
stages: backend,
|
|
223
|
+
transforms
|
|
224
|
+
} = backendStages(pass, passKey, source);
|
|
225
|
+
for (const stage of pass.stages) {
|
|
226
|
+
const name = hlslShaderStageName(stage.type);
|
|
227
|
+
const stageKey = `${bodyKey}.${passKey}.${name}`;
|
|
228
|
+
const stageBackend = backend[name] ?? {};
|
|
229
|
+
let shaderKey;
|
|
230
|
+
if (stage.shaderData?.size) {
|
|
231
|
+
const code = new TextDecoder().decode(stage.shaderData.bytes);
|
|
232
|
+
const identity = `${JSON.stringify([stageBackend.bindings ?? [], stageBackend.stageInputs ?? [], stageBackend.computeFragment ?? null])} ${code}`;
|
|
233
|
+
const pooled = shaderKeyByIdentity.get(identity);
|
|
234
|
+
if (pooled) {
|
|
235
|
+
shaderKey = pooled;
|
|
236
|
+
} else {
|
|
237
|
+
shaderKey = `shader_${shaderKeyByIdentity.size}`;
|
|
238
|
+
shaderKeyByIdentity.set(identity, shaderKey);
|
|
239
|
+
shaders.push({
|
|
240
|
+
key: shaderKey,
|
|
241
|
+
stageName: name,
|
|
242
|
+
source: code,
|
|
243
|
+
hlsl2webgl: {
|
|
244
|
+
ok: true
|
|
245
|
+
},
|
|
246
|
+
bindings: stageBackend.bindings ?? [],
|
|
247
|
+
stageInputs: stageBackend.stageInputs ?? [],
|
|
248
|
+
...(stageBackend.computeFragment ? {
|
|
249
|
+
computeFragment: stageBackend.computeFragment
|
|
250
|
+
} : {})
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
} else {
|
|
254
|
+
shaderKey = `${stageKey}.absent`;
|
|
255
|
+
shaders.push({
|
|
256
|
+
key: shaderKey,
|
|
257
|
+
stageName: name,
|
|
258
|
+
source: "",
|
|
259
|
+
hlsl2webgl: {
|
|
260
|
+
ok: false,
|
|
261
|
+
reason: NO_PROGRAM_REASON
|
|
262
|
+
},
|
|
263
|
+
bindings: stageBackend.bindings ?? [],
|
|
264
|
+
stageInputs: stageBackend.stageInputs ?? []
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
stages.push({
|
|
268
|
+
key: stageKey,
|
|
269
|
+
bodyKey,
|
|
270
|
+
techniqueName,
|
|
271
|
+
passIndex,
|
|
272
|
+
stageName: name,
|
|
273
|
+
stageType: stage.type,
|
|
274
|
+
shaderKey,
|
|
275
|
+
manifest: stageManifest(stage),
|
|
276
|
+
// The pass's transforms, so a rule can ask whether a
|
|
277
|
+
// description resource was merged away rather than lost.
|
|
278
|
+
transforms
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Ordered by first appearance, matching `bodyKey`'s ordinal.
|
|
286
|
+
const bodies = [];
|
|
287
|
+
for (const [offset, key] of bodyKeyByOffset) {
|
|
288
|
+
bodies.push({
|
|
289
|
+
key,
|
|
290
|
+
permutationIndices: Object.freeze(permutationIndicesByOffset.get(offset) ?? [])
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
stages,
|
|
295
|
+
shaders,
|
|
296
|
+
bodies,
|
|
297
|
+
recordCount: reader.records.length,
|
|
298
|
+
bodyCount: bodyKeyByOffset.size
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export { readGlslEffectContainer };
|
|
303
|
+
//# sourceMappingURL=readGlslEffectContainer.js.map
|
|
@@ -0,0 +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":"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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
|