@carbonenginejs/runtime-resource 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +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 -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,182 +1,182 @@
|
|
|
1
|
-
import { CjsCarbonEffectWriter } from './CjsCarbonEffectWriter.js';
|
|
2
|
-
import { CjsCarbonEffectReader } from './CjsCarbonEffectReader.js';
|
|
3
|
-
import { HlslShaderStageNames } from '../../formats/hlsl/core/tr2/HlslRenderContextEnum.js';
|
|
4
|
-
import { Tr2EffectDescription } from '../../resource/shader/reflection/Tr2EffectDescription.js';
|
|
5
|
-
import { CjsFormatWriteError } from '../CjsFormatError.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Assembles a backend effect container: Carbon's v15 record layout carrying our
|
|
9
|
-
* programs where a shipped file carries DXBC.
|
|
10
|
-
*
|
|
11
|
-
* The Carbon record layout is backend-invariant, and this module is the part
|
|
12
|
-
* that holds it that way. It walks the permutation graph, emits one description
|
|
13
|
-
* per distinct body, and substitutes stage programs and one optional trailing
|
|
14
|
-
* block per pass. What a program *is* and what the block *contains* are the only
|
|
15
|
-
* backend-varying decisions, so those two are the injected seam
|
|
16
|
-
* (`encodeProgram`, `encodeBackendBlock`) and nothing else here varies.
|
|
17
|
-
*
|
|
18
|
-
* Two backends use it. WGSL for WebGPU, GLSL ES 3.00 for WebGL 2. Their blocks
|
|
19
|
-
* are genuinely different documents - bind-group topology on one side, sampler
|
|
20
|
-
* fusion and synthesised bindings on the other - and neither is derivable from
|
|
21
|
-
* Carbon reflection. Which reader parses a given block is decided by the
|
|
22
|
-
* resource path the file came from, the same way the backend itself is chosen,
|
|
23
|
-
* so the two codecs may both start at their own version 1 without ambiguity.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* There is no envelope, no magic and no version of our own. That is deliberate.
|
|
28
|
-
*
|
|
29
|
-
* A twelve-byte prefix (`magic | containerVersion | payloadKind`) was carried
|
|
30
|
-
* here and has been removed, along with a proposed "v16" for this variant.
|
|
31
|
-
* Neither survived the only question worth asking of an addition: what breaks
|
|
32
|
-
* without it?
|
|
33
|
-
*
|
|
34
|
-
* - `payloadKind` is redundant with the directory the file came from. Backend
|
|
35
|
-
* identity belongs to the `effect.webgpu/` or `effect.webgl2/` resource path.
|
|
36
|
-
* - The magic only distinguished our file from a Carbon one, which the same
|
|
37
|
-
* directory already answers, and which the file *name* answers too.
|
|
38
|
-
* - A version of our own would have claimed a number CCP owns, in the one field
|
|
39
|
-
* whose job is telling a reader how to parse. A real v16 from them would then
|
|
40
|
-
* collide with ours.
|
|
41
|
-
*
|
|
42
|
-
* What remains is a bare Carbon v15 record file. The shared record reader
|
|
43
|
-
* detects the per-pass block from the description's declared end.
|
|
44
|
-
*
|
|
45
|
-
* The one addition that does survive the question is the block itself: neither
|
|
46
|
-
* backend's binding topology is derivable from Carbon reflection, so without it
|
|
47
|
-
* there is no way to bind anything and no pipeline.
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Maps one body's translated passes by pass key.
|
|
52
|
-
*
|
|
53
|
-
* @param {object} body Backend body-set record.
|
|
54
|
-
* @param {Map<string, object>} unitsByKey Units indexed by key.
|
|
55
|
-
* @returns {Map<string, object>} Units indexed by pass key.
|
|
56
|
-
*/
|
|
57
|
-
function unitsByPassKey(body, unitsByKey) {
|
|
58
|
-
const result = new Map();
|
|
59
|
-
for (const pass of body.passes ?? []) {
|
|
60
|
-
result.set(pass.passKey, unitsByKey.get(pass.unitKey));
|
|
61
|
-
}
|
|
62
|
-
return result;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Builds one body's Carbon description record tree with backend programs
|
|
67
|
-
* substituted in.
|
|
68
|
-
*
|
|
69
|
-
* A body the translator could not lower retains its representable non-program
|
|
70
|
-
* description fields and carries zero-length programs. Emitting empty
|
|
71
|
-
* `shaderData` says exactly what the wire knows: no backend program was stored.
|
|
72
|
-
* Full portable source reflection remains in the in-memory build result, not
|
|
73
|
-
* in this emitted body.
|
|
74
|
-
*
|
|
75
|
-
* @param {object} effectRes Loaded version-15 `Tr2EffectRes`.
|
|
76
|
-
* @param {number} permutationIndex Representative permutation for this body.
|
|
77
|
-
* @param {Map<string, object>|null} passUnits Units by pass key, or null when unsupported.
|
|
78
|
-
* @param {object} backend Backend encoders.
|
|
79
|
-
* @returns {object} Description record tree.
|
|
80
|
-
*/
|
|
81
|
-
function describeBody(reader, permutationIndex, passUnits, backend) {
|
|
82
|
-
// Read the source body once, as the resource layer reads any Carbon body,
|
|
83
|
-
// then substitute on the resulting graph and emit it. The substitution is
|
|
84
|
-
// two edits - a stage's program and a pass's trailing block - so there is
|
|
85
|
-
// nothing here that wants a bespoke mapping of its own.
|
|
86
|
-
const effect = Tr2EffectDescription.fromCarbonBinary(reader.readDescription(permutationIndex));
|
|
87
|
-
for (const technique of effect.techniques) {
|
|
88
|
-
for (const [passIndex, pass] of technique.passes.entries()) {
|
|
89
|
-
const passKey = `${technique.name}.pass${passIndex}`;
|
|
90
|
-
const unit = passUnits ? passUnits.get(passKey) : null;
|
|
91
|
-
for (const stage of pass.stageInputs) {
|
|
92
|
-
if (!stage.exists) continue;
|
|
93
|
-
const stageName = HlslShaderStageNames[stage.stageType];
|
|
94
|
-
const shader = unit?.shaders.find(entry => entry.key === `${passKey}.${stageName}`);
|
|
95
|
-
// A body the translator could not lower keeps its describable
|
|
96
|
-
// fields and carries a zero-length program: the wire then says
|
|
97
|
-
// exactly what is known, which is that no backend program was
|
|
98
|
-
// stored. The source DXBC is never re-emitted.
|
|
99
|
-
const bytes = shader ? backend.encodeProgram(shader) : new Uint8Array(0);
|
|
100
|
-
stage.sourceProgram = {
|
|
101
|
-
...stage.sourceProgram,
|
|
102
|
-
bytes,
|
|
103
|
-
shaderSize: bytes.byteLength
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
const block = unit ? backend.encodeBackendBlock(unit, passKey) : null;
|
|
107
|
-
pass.backendBlock = block ? {
|
|
108
|
-
bytes: block,
|
|
109
|
-
size: block.byteLength
|
|
110
|
-
} : null;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return effect.toCarbonBinary();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Builds a complete backend effect container.
|
|
118
|
-
*
|
|
119
|
-
* @param {object} effectRes Loaded version-15 `Tr2EffectRes`.
|
|
120
|
-
* @param {object} permutationGraph Validated `PGRF` document.
|
|
121
|
-
* @param {object} backendBodySet Translated backend bodies.
|
|
122
|
-
* @param {object} backend Backend encoders.
|
|
123
|
-
* @param {(shader:object, stage:object, context:object)=>Uint8Array} backend.encodeProgram Encodes one stage program.
|
|
124
|
-
* @param {(unit:object, passKey:string)=>(Uint8Array|null)} backend.encodeBackendBlock Builds one pass's trailing block.
|
|
125
|
-
* @param {object} [options] Container options.
|
|
126
|
-
* @param {number[]|Uint8Array} [options.compilerVersion] Four version bytes.
|
|
127
|
-
* @param {string} [options.sourceHash] 32 ASCII hash characters.
|
|
128
|
-
* @returns {{bytes:Uint8Array, permutationCount:number, bodyCount:number}} Container and its body accounting.
|
|
129
|
-
*/
|
|
130
|
-
function buildCarbonEffectContainer(effectRes, permutationGraph, backendBodySet, backend, options = {}) {
|
|
131
|
-
if (typeof backend?.encodeProgram !== "function" || typeof backend?.encodeBackendBlock !== "function") {
|
|
132
|
-
throw new CjsFormatWriteError("buildCarbonEffectContainer requires a backend with encodeProgram and encodeBackendBlock");
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// One reader over the source file, shared by every body: the arena and the
|
|
136
|
-
// offset table are read once, and a body is a seek into them. A dx11 effect
|
|
137
|
-
// is a Carbon v15 container, so the same reader serves here and at load.
|
|
138
|
-
const reader = new CjsCarbonEffectReader(effectRes.m_data, {
|
|
139
|
-
source: effectRes.sourcePath || "effect source"
|
|
140
|
-
});
|
|
141
|
-
const unitsByKey = new Map(backendBodySet.passUnits.map(unit => [unit.key, unit]));
|
|
142
|
-
const bodyByKey = new Map(backendBodySet.bodies.map(body => [body.bodyKey, body]));
|
|
143
|
-
const writer = new CjsCarbonEffectWriter({
|
|
144
|
-
backend: true,
|
|
145
|
-
compilerVersion: options.compilerVersion ?? effectRes.m_compilerVersionBytes ?? [0, 0, 0, 0],
|
|
146
|
-
...(options.sourceHash ? {
|
|
147
|
-
sourceHash: options.sourceHash
|
|
148
|
-
} : {})
|
|
149
|
-
});
|
|
150
|
-
for (const axis of permutationGraph.axes) {
|
|
151
|
-
writer.addPermutation({
|
|
152
|
-
name: axis.name,
|
|
153
|
-
defaultOption: axis.defaultOption,
|
|
154
|
-
description: axis.description,
|
|
155
|
-
type: axis.type,
|
|
156
|
-
options: axis.options
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Build one emitted description per source body key and reuse it for each
|
|
161
|
-
// matching permutation. The writer may dedupe additional descriptions when
|
|
162
|
-
// their emitted bytes become identical after source programs are replaced;
|
|
163
|
-
// the offset table remains dense.
|
|
164
|
-
const describedByBodyKey = new Map();
|
|
165
|
-
for (const [permutationIndex, variant] of permutationGraph.variants.entries()) {
|
|
166
|
-
let description = describedByBodyKey.get(variant.bodyKey);
|
|
167
|
-
if (!description) {
|
|
168
|
-
const body = bodyByKey.get(variant.bodyKey);
|
|
169
|
-
description = describeBody(reader, body?.representativePermutationIndex ?? permutationIndex, body?.status === "translated" ? unitsByPassKey(body, unitsByKey) : null, backend);
|
|
170
|
-
describedByBodyKey.set(variant.bodyKey, description);
|
|
171
|
-
}
|
|
172
|
-
writer.addBody(permutationIndex, description);
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
bytes: writer.toBytes(),
|
|
176
|
-
permutationCount: permutationGraph.variants.length,
|
|
177
|
-
bodyCount: describedByBodyKey.size
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export { buildCarbonEffectContainer };
|
|
182
|
-
//# sourceMappingURL=buildCarbonEffectContainer.js.map
|
|
1
|
+
import { CjsCarbonEffectWriter } from './CjsCarbonEffectWriter.js';
|
|
2
|
+
import { CjsCarbonEffectReader } from './CjsCarbonEffectReader.js';
|
|
3
|
+
import { HlslShaderStageNames } from '../../formats/hlsl/core/tr2/HlslRenderContextEnum.js';
|
|
4
|
+
import { Tr2EffectDescription } from '../../resource/shader/reflection/Tr2EffectDescription.js';
|
|
5
|
+
import { CjsFormatWriteError } from '../CjsFormatError.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Assembles a backend effect container: Carbon's v15 record layout carrying our
|
|
9
|
+
* programs where a shipped file carries DXBC.
|
|
10
|
+
*
|
|
11
|
+
* The Carbon record layout is backend-invariant, and this module is the part
|
|
12
|
+
* that holds it that way. It walks the permutation graph, emits one description
|
|
13
|
+
* per distinct body, and substitutes stage programs and one optional trailing
|
|
14
|
+
* block per pass. What a program *is* and what the block *contains* are the only
|
|
15
|
+
* backend-varying decisions, so those two are the injected seam
|
|
16
|
+
* (`encodeProgram`, `encodeBackendBlock`) and nothing else here varies.
|
|
17
|
+
*
|
|
18
|
+
* Two backends use it. WGSL for WebGPU, GLSL ES 3.00 for WebGL 2. Their blocks
|
|
19
|
+
* are genuinely different documents - bind-group topology on one side, sampler
|
|
20
|
+
* fusion and synthesised bindings on the other - and neither is derivable from
|
|
21
|
+
* Carbon reflection. Which reader parses a given block is decided by the
|
|
22
|
+
* resource path the file came from, the same way the backend itself is chosen,
|
|
23
|
+
* so the two codecs may both start at their own version 1 without ambiguity.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* There is no envelope, no magic and no version of our own. That is deliberate.
|
|
28
|
+
*
|
|
29
|
+
* A twelve-byte prefix (`magic | containerVersion | payloadKind`) was carried
|
|
30
|
+
* here and has been removed, along with a proposed "v16" for this variant.
|
|
31
|
+
* Neither survived the only question worth asking of an addition: what breaks
|
|
32
|
+
* without it?
|
|
33
|
+
*
|
|
34
|
+
* - `payloadKind` is redundant with the directory the file came from. Backend
|
|
35
|
+
* identity belongs to the `effect.webgpu/` or `effect.webgl2/` resource path.
|
|
36
|
+
* - The magic only distinguished our file from a Carbon one, which the same
|
|
37
|
+
* directory already answers, and which the file *name* answers too.
|
|
38
|
+
* - A version of our own would have claimed a number CCP owns, in the one field
|
|
39
|
+
* whose job is telling a reader how to parse. A real v16 from them would then
|
|
40
|
+
* collide with ours.
|
|
41
|
+
*
|
|
42
|
+
* What remains is a bare Carbon v15 record file. The shared record reader
|
|
43
|
+
* detects the per-pass block from the description's declared end.
|
|
44
|
+
*
|
|
45
|
+
* The one addition that does survive the question is the block itself: neither
|
|
46
|
+
* backend's binding topology is derivable from Carbon reflection, so without it
|
|
47
|
+
* there is no way to bind anything and no pipeline.
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Maps one body's translated passes by pass key.
|
|
52
|
+
*
|
|
53
|
+
* @param {object} body Backend body-set record.
|
|
54
|
+
* @param {Map<string, object>} unitsByKey Units indexed by key.
|
|
55
|
+
* @returns {Map<string, object>} Units indexed by pass key.
|
|
56
|
+
*/
|
|
57
|
+
function unitsByPassKey(body, unitsByKey) {
|
|
58
|
+
const result = new Map();
|
|
59
|
+
for (const pass of body.passes ?? []) {
|
|
60
|
+
result.set(pass.passKey, unitsByKey.get(pass.unitKey));
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Builds one body's Carbon description record tree with backend programs
|
|
67
|
+
* substituted in.
|
|
68
|
+
*
|
|
69
|
+
* A body the translator could not lower retains its representable non-program
|
|
70
|
+
* description fields and carries zero-length programs. Emitting empty
|
|
71
|
+
* `shaderData` says exactly what the wire knows: no backend program was stored.
|
|
72
|
+
* Full portable source reflection remains in the in-memory build result, not
|
|
73
|
+
* in this emitted body.
|
|
74
|
+
*
|
|
75
|
+
* @param {object} effectRes Loaded version-15 `Tr2EffectRes`.
|
|
76
|
+
* @param {number} permutationIndex Representative permutation for this body.
|
|
77
|
+
* @param {Map<string, object>|null} passUnits Units by pass key, or null when unsupported.
|
|
78
|
+
* @param {object} backend Backend encoders.
|
|
79
|
+
* @returns {object} Description record tree.
|
|
80
|
+
*/
|
|
81
|
+
function describeBody(reader, permutationIndex, passUnits, backend) {
|
|
82
|
+
// Read the source body once, as the resource layer reads any Carbon body,
|
|
83
|
+
// then substitute on the resulting graph and emit it. The substitution is
|
|
84
|
+
// two edits - a stage's program and a pass's trailing block - so there is
|
|
85
|
+
// nothing here that wants a bespoke mapping of its own.
|
|
86
|
+
const effect = Tr2EffectDescription.fromCarbonBinary(reader.readDescription(permutationIndex));
|
|
87
|
+
for (const technique of effect.techniques) {
|
|
88
|
+
for (const [passIndex, pass] of technique.passes.entries()) {
|
|
89
|
+
const passKey = `${technique.name}.pass${passIndex}`;
|
|
90
|
+
const unit = passUnits ? passUnits.get(passKey) : null;
|
|
91
|
+
for (const stage of pass.stageInputs) {
|
|
92
|
+
if (!stage.exists) continue;
|
|
93
|
+
const stageName = HlslShaderStageNames[stage.stageType];
|
|
94
|
+
const shader = unit?.shaders.find(entry => entry.key === `${passKey}.${stageName}`);
|
|
95
|
+
// A body the translator could not lower keeps its describable
|
|
96
|
+
// fields and carries a zero-length program: the wire then says
|
|
97
|
+
// exactly what is known, which is that no backend program was
|
|
98
|
+
// stored. The source DXBC is never re-emitted.
|
|
99
|
+
const bytes = shader ? backend.encodeProgram(shader) : new Uint8Array(0);
|
|
100
|
+
stage.sourceProgram = {
|
|
101
|
+
...stage.sourceProgram,
|
|
102
|
+
bytes,
|
|
103
|
+
shaderSize: bytes.byteLength
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const block = unit ? backend.encodeBackendBlock(unit, passKey) : null;
|
|
107
|
+
pass.backendBlock = block ? {
|
|
108
|
+
bytes: block,
|
|
109
|
+
size: block.byteLength
|
|
110
|
+
} : null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return effect.toCarbonBinary();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Builds a complete backend effect container.
|
|
118
|
+
*
|
|
119
|
+
* @param {object} effectRes Loaded version-15 `Tr2EffectRes`.
|
|
120
|
+
* @param {object} permutationGraph Validated `PGRF` document.
|
|
121
|
+
* @param {object} backendBodySet Translated backend bodies.
|
|
122
|
+
* @param {object} backend Backend encoders.
|
|
123
|
+
* @param {(shader:object, stage:object, context:object)=>Uint8Array} backend.encodeProgram Encodes one stage program.
|
|
124
|
+
* @param {(unit:object, passKey:string)=>(Uint8Array|null)} backend.encodeBackendBlock Builds one pass's trailing block.
|
|
125
|
+
* @param {object} [options] Container options.
|
|
126
|
+
* @param {number[]|Uint8Array} [options.compilerVersion] Four version bytes.
|
|
127
|
+
* @param {string} [options.sourceHash] 32 ASCII hash characters.
|
|
128
|
+
* @returns {{bytes:Uint8Array, permutationCount:number, bodyCount:number}} Container and its body accounting.
|
|
129
|
+
*/
|
|
130
|
+
function buildCarbonEffectContainer(effectRes, permutationGraph, backendBodySet, backend, options = {}) {
|
|
131
|
+
if (typeof backend?.encodeProgram !== "function" || typeof backend?.encodeBackendBlock !== "function") {
|
|
132
|
+
throw new CjsFormatWriteError("buildCarbonEffectContainer requires a backend with encodeProgram and encodeBackendBlock");
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// One reader over the source file, shared by every body: the arena and the
|
|
136
|
+
// offset table are read once, and a body is a seek into them. A dx11 effect
|
|
137
|
+
// is a Carbon v15 container, so the same reader serves here and at load.
|
|
138
|
+
const reader = new CjsCarbonEffectReader(effectRes.m_data, {
|
|
139
|
+
source: effectRes.sourcePath || "effect source"
|
|
140
|
+
});
|
|
141
|
+
const unitsByKey = new Map(backendBodySet.passUnits.map(unit => [unit.key, unit]));
|
|
142
|
+
const bodyByKey = new Map(backendBodySet.bodies.map(body => [body.bodyKey, body]));
|
|
143
|
+
const writer = new CjsCarbonEffectWriter({
|
|
144
|
+
backend: true,
|
|
145
|
+
compilerVersion: options.compilerVersion ?? effectRes.m_compilerVersionBytes ?? [0, 0, 0, 0],
|
|
146
|
+
...(options.sourceHash ? {
|
|
147
|
+
sourceHash: options.sourceHash
|
|
148
|
+
} : {})
|
|
149
|
+
});
|
|
150
|
+
for (const axis of permutationGraph.axes) {
|
|
151
|
+
writer.addPermutation({
|
|
152
|
+
name: axis.name,
|
|
153
|
+
defaultOption: axis.defaultOption,
|
|
154
|
+
description: axis.description,
|
|
155
|
+
type: axis.type,
|
|
156
|
+
options: axis.options
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Build one emitted description per source body key and reuse it for each
|
|
161
|
+
// matching permutation. The writer may dedupe additional descriptions when
|
|
162
|
+
// their emitted bytes become identical after source programs are replaced;
|
|
163
|
+
// the offset table remains dense.
|
|
164
|
+
const describedByBodyKey = new Map();
|
|
165
|
+
for (const [permutationIndex, variant] of permutationGraph.variants.entries()) {
|
|
166
|
+
let description = describedByBodyKey.get(variant.bodyKey);
|
|
167
|
+
if (!description) {
|
|
168
|
+
const body = bodyByKey.get(variant.bodyKey);
|
|
169
|
+
description = describeBody(reader, body?.representativePermutationIndex ?? permutationIndex, body?.status === "translated" ? unitsByPassKey(body, unitsByKey) : null, backend);
|
|
170
|
+
describedByBodyKey.set(variant.bodyKey, description);
|
|
171
|
+
}
|
|
172
|
+
writer.addBody(permutationIndex, description);
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
bytes: writer.toBytes(),
|
|
176
|
+
permutationCount: permutationGraph.variants.length,
|
|
177
|
+
bodyCount: describedByBodyKey.size
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export { buildCarbonEffectContainer };
|
|
182
|
+
//# sourceMappingURL=buildCarbonEffectContainer.js.map
|