@carbonenginejs/runtime-resource 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/NOTICE +32 -32
- package/README.md +129 -129
- package/dist/CjsMotherLode.js +1271 -1271
- package/dist/CjsResMan.js +3858 -3858
- package/dist/CjsResManFetchProvider.js +94 -94
- package/dist/CjsResManWorkQueue.js +301 -301
- package/dist/_virtual/_rollupPluginBabelHelpers.js +150 -150
- package/dist/format/CjsBlueReader.js +358 -358
- package/dist/format/CjsByteReader.js +310 -310
- package/dist/format/CjsByteWriter.js +242 -242
- package/dist/format/CjsFormat.js +223 -223
- package/dist/format/CjsFormatError.js +41 -41
- package/dist/format/CjsReader.js +22 -22
- package/dist/format/CjsResourceProbe.js +279 -279
- package/dist/format/CjsStringTable.js +268 -268
- package/dist/format/carbonEffect/CjsCarbonEffectReader.js +265 -265
- package/dist/format/carbonEffect/CjsCarbonEffectWriter.js +373 -373
- package/dist/format/carbonEffect/buildCarbonEffectContainer.js +182 -182
- package/dist/format/carbonEffect/carbonEffectBackendBlock.js +321 -321
- package/dist/format/carbonEffect/carbonEffectRecords.js +1147 -1147
- package/dist/format/carbonEffect/carbonEffectResourceTransform.js +197 -197
- package/dist/format/compareUtf8.js +36 -36
- package/dist/format/effect/effectBodyInventory.js +146 -146
- package/dist/format/effect/effectPermutationGraph.js +257 -257
- package/dist/format/effect/sha256.js +114 -114
- package/dist/format/index.js +11 -11
- package/dist/format/payloadContract.js +193 -193
- package/dist/formats/black/CjsBlackFormat.js +310 -310
- package/dist/formats/black/core/CjsBlackBinaryReader.js +260 -260
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +448 -448
- package/dist/formats/black/core/CjsBlackReader.js +764 -764
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +540 -540
- package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -4
- package/dist/formats/black/core/blackConstants.js +7 -7
- package/dist/formats/black/core/blackDefinitions.js +10 -10
- package/dist/formats/black/core/blackEnums.js +6 -6
- package/dist/formats/black/core/blackSchema.js +3 -3
- package/dist/formats/black/core/blackVersion.js +22 -22
- package/dist/formats/black/core/helpers.js +199 -199
- package/dist/formats/black/core/schema.js +4 -4
- package/dist/formats/black/index.js +2 -2
- package/dist/formats/bnk/CjsBnkFormat.js +175 -175
- package/dist/formats/bnk/core/busNodes.js +252 -252
- package/dist/formats/bnk/core/effectNodes.js +147 -147
- package/dist/formats/bnk/core/eventAction.js +416 -416
- package/dist/formats/bnk/core/globalSettings.js +215 -215
- package/dist/formats/bnk/core/graph.js +137 -137
- package/dist/formats/bnk/core/helpers.js +512 -512
- package/dist/formats/bnk/core/musicNodes.js +540 -540
- package/dist/formats/bnk/core/nodeBase.js +553 -553
- package/dist/formats/bnk/core/sfxNodes.js +632 -632
- package/dist/formats/bnk/core/soundbanksInfo.js +209 -209
- package/dist/formats/bnk/index.js +2 -2
- package/dist/formats/cmf/CjsCmfFormat.js +497 -497
- package/dist/formats/cmf/core/binary.js +194 -194
- package/dist/formats/cmf/core/buffers.js +237 -237
- package/dist/formats/cmf/core/constants.js +47 -47
- package/dist/formats/cmf/core/gr2Anim.js +453 -453
- package/dist/formats/cmf/core/helpers.js +318 -318
- package/dist/formats/cmf/core/pack.js +276 -276
- package/dist/formats/cmf/core/schema.js +374 -374
- package/dist/formats/cmf/core/shared.js +277 -277
- package/dist/formats/cmf/core/writer.js +571 -571
- package/dist/formats/cmf/index.js +2 -2
- package/dist/formats/dds/CjsDdsFormat.js +200 -200
- package/dist/formats/dds/core/bc6h.js +298 -298
- package/dist/formats/dds/core/bc7.js +272 -272
- package/dist/formats/dds/core/helpers.js +901 -862
- package/dist/formats/dds/core/helpers.js.map +1 -1
- package/dist/formats/dds/index.js +2 -2
- package/dist/formats/dxbc/CjsDxbcFormat.js +187 -142
- package/dist/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/formats/dxbc/core/DxbcReader.js +266 -266
- package/dist/formats/dxbc/core/container.js +169 -169
- package/dist/formats/dxbc/core/decoder.js +789 -789
- package/dist/formats/dxbc/core/disassemble.js +240 -0
- package/dist/formats/dxbc/core/disassemble.js.map +1 -0
- package/dist/formats/dxbc/core/errors.js +19 -19
- package/dist/formats/dxbc/core/helpers.js +220 -220
- package/dist/formats/dxbc/core/opcodes.js +45 -45
- package/dist/formats/dxbc/core/program.js +91 -91
- package/dist/formats/dxbc/core/signature.js +172 -172
- package/dist/formats/dxbc/index.js +2 -2
- package/dist/formats/fbx/CjsFbxFormat.js +266 -266
- package/dist/formats/fbx/core/helpers.js +3932 -3932
- package/dist/formats/fbx/index.js +2 -2
- package/dist/formats/flac/CjsFlacFormat.js +142 -142
- package/dist/formats/flac/core/helpers.js +315 -315
- package/dist/formats/flac/index.js +2 -2
- package/dist/formats/gif/CjsGifFormat.js +141 -141
- package/dist/formats/gif/core/helpers.js +380 -380
- package/dist/formats/gif/index.js +2 -2
- package/dist/formats/gltf/CjsGltfFormat.js +252 -290
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/formats/gltf/core/helpers.js +287 -307
- package/dist/formats/gltf/core/helpers.js.map +1 -1
- package/dist/formats/gltf/core/json.js +79 -79
- package/dist/formats/gltf/core/parser.js +679 -679
- package/dist/formats/gltf/core/targets.js +173 -173
- package/dist/formats/gltf/index.js +2 -2
- package/dist/formats/gr2/CjsGr2Format.js +289 -289
- package/dist/formats/gr2/core/bitknit2.js +282 -282
- package/dist/formats/gr2/core/curves.js +1047 -1047
- package/dist/formats/gr2/core/gsf.js +72 -72
- package/dist/formats/gr2/core/helpers.js +352 -352
- package/dist/formats/gr2/core/json.js +622 -622
- package/dist/formats/gr2/core/oodle1.js +388 -388
- package/dist/formats/gr2/core/tangents.js +48 -48
- package/dist/formats/gr2/core/targets.js +361 -361
- package/dist/formats/gr2/index.js +2 -2
- package/dist/formats/hlsl/CjsHlslFormat.js +233 -254
- package/dist/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/formats/hlsl/core/HlslBinaryUtils.js +15 -15
- package/dist/formats/hlsl/core/HlslEffectReadError.js +19 -19
- package/dist/formats/hlsl/core/HlslEffectStateManager.js +130 -130
- package/dist/formats/hlsl/core/HlslRenderStateSetup.js +37 -37
- package/dist/formats/hlsl/core/HlslResourceSetDescription.js +94 -94
- package/dist/formats/hlsl/core/HlslShaderBytecode.js +44 -44
- package/dist/formats/hlsl/core/analysis.js +51 -51
- package/dist/formats/hlsl/core/carbonDescriptionToRuntime.js +850 -850
- package/dist/formats/hlsl/core/detailMapFamily.js +128 -128
- package/dist/formats/hlsl/core/helpers.js +270 -270
- package/dist/formats/hlsl/core/json.js +284 -284
- package/dist/formats/hlsl/core/localLightFamily.js +133 -133
- package/dist/formats/hlsl/core/metadata.js +327 -327
- package/dist/formats/hlsl/core/render-states.js +280 -280
- package/dist/formats/hlsl/core/tr2/HlslRenderContextEnum.js +43 -43
- package/dist/formats/hlsl/core/tr2/resources/HlslEffectRes.js +320 -320
- package/dist/formats/hlsl/core/tr2/resources/HlslShaderPermutation.js +33 -33
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js +423 -416
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectBindingManifest.js.map +1 -1
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectConstant.js +40 -40
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectDescription.js +62 -62
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectLibrary.js +52 -52
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectParameterAnnotation.js +38 -38
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectResource.js +50 -50
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +86 -86
- package/dist/formats/hlsl/core/tr2/shader/HlslEffectTechnique.js +31 -31
- package/dist/formats/hlsl/core/tr2/shader/HlslPass.js +42 -42
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerDescription.js +55 -55
- package/dist/formats/hlsl/core/tr2/shader/HlslSamplerSetup.js +29 -29
- package/dist/formats/hlsl/core/tr2/shader/HlslShader.js +220 -220
- package/dist/formats/hlsl/core/tr2/shader/HlslShaderOption.js +30 -30
- package/dist/formats/hlsl/index.js +3 -3
- package/dist/formats/index.js +33 -33
- package/dist/formats/jpeg/CjsJpegFormat.js +212 -212
- package/dist/formats/jpeg/core/helpers.js +402 -402
- package/dist/formats/jpeg/core/jpeg.js +480 -480
- package/dist/formats/jpeg/index.js +2 -2
- package/dist/formats/mp3/CjsMp3Format.js +197 -197
- package/dist/formats/mp3/core/helpers.js +375 -375
- package/dist/formats/mp3/index.js +2 -2
- package/dist/formats/mp4/CjsMp4Format.js +197 -197
- package/dist/formats/mp4/core/helpers.js +484 -484
- package/dist/formats/mp4/index.js +2 -2
- package/dist/formats/obj/CjsObjFormat.js +232 -253
- package/dist/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/formats/obj/core/helpers.js +553 -573
- package/dist/formats/obj/core/helpers.js.map +1 -1
- package/dist/formats/obj/core/json.js +64 -64
- package/dist/formats/obj/core/parser.js +321 -321
- package/dist/formats/obj/index.js +2 -2
- package/dist/formats/ogg/CjsOggFormat.js +143 -143
- package/dist/formats/ogg/core/helpers.js +410 -410
- package/dist/formats/ogg/core/imdct.js +178 -178
- package/dist/formats/ogg/core/vorbis.js +1017 -1017
- package/dist/formats/ogg/index.js +2 -2
- package/dist/formats/pickle/CjsPickleFormat.js +214 -214
- package/dist/formats/pickle/core/CjsPickleProtocol0Reader.js +551 -551
- package/dist/formats/pickle/index.js +2 -2
- package/dist/formats/png/CjsPngFormat.js +201 -201
- package/dist/formats/png/core/helpers.js +635 -635
- package/dist/formats/png/index.js +2 -2
- package/dist/formats/red/CjsRedFormat.js +263 -263
- package/dist/formats/red/core/CjsRedReader.js +246 -246
- package/dist/formats/red/core/blackDefinitions.js +3 -3
- package/dist/formats/red/core/helpers.js +158 -158
- package/dist/formats/red/core/redGraph.js +71 -71
- package/dist/formats/red/core/schema.js +4 -4
- package/dist/formats/red/index.js +2 -2
- package/dist/formats/stl/CjsStlFormat.js +320 -365
- package/dist/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/formats/stl/core/helpers.js +241 -261
- package/dist/formats/stl/core/helpers.js.map +1 -1
- package/dist/formats/stl/core/json.js +51 -51
- package/dist/formats/stl/core/stl.js +642 -642
- package/dist/formats/stl/core/targets.js +173 -173
- package/dist/formats/stl/index.js +2 -2
- package/dist/formats/tga/CjsTgaFormat.js +197 -197
- package/dist/formats/tga/core/helpers.js +493 -493
- package/dist/formats/tga/index.js +2 -2
- package/dist/formats/wav/CjsWavFormat.js +198 -198
- package/dist/formats/wav/core/helpers.js +365 -365
- package/dist/formats/wav/index.js +2 -2
- package/dist/formats/webgl/CjsWebglFormat.js +199 -199
- package/dist/formats/webgl/core/buildGlslEffectContainer.js +70 -70
- package/dist/formats/webgl/core/effectPackage.js +900 -900
- package/dist/formats/webgl/core/errors.js +27 -27
- package/dist/formats/webgl/core/glsl/DxbcGlslEmitter.js +2820 -2820
- package/dist/formats/webgl/core/glsl/DxbcGlslHelpers.js +89 -89
- package/dist/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +486 -486
- package/dist/formats/webgl/core/glsl/packedLightFixups.js +98 -98
- package/dist/formats/webgl/core/glslBackendBlock.js +552 -552
- package/dist/formats/webgl/core/glslBackendBodySet.js +243 -243
- package/dist/formats/webgl/core/glslEffectCompleteness.js +85 -85
- package/dist/formats/webgl/core/glslEffectCompleteness.js.map +1 -1
- package/dist/formats/webgl/core/helpers.js +167 -167
- package/dist/formats/webgl/core/inspectGlslEffectContainer.js +122 -122
- package/dist/formats/webgl/core/readGlslEffectContainer.js +202 -256
- package/dist/formats/webgl/core/readGlslEffectContainer.js.map +1 -1
- package/dist/formats/webgl/index.js +2 -2
- package/dist/formats/webgpu/CjsWebgpuFormat.js +357 -357
- package/dist/formats/webgpu/core/buildCarbonEffectContainer.js +89 -89
- package/dist/formats/webgpu/core/carbonWebgpu/CarbonWebgpuContainer.js +354 -354
- package/dist/formats/webgpu/core/carbonWebgpu/containerViews.js +355 -355
- package/dist/formats/webgpu/core/carbonWebgpu/validateContainer.js +90 -90
- package/dist/formats/webgpu/core/effectAnalysis.js +82 -82
- package/dist/formats/webgpu/core/effectBackendBodySet.js +306 -306
- package/dist/formats/webgpu/core/errors.js +20 -20
- package/dist/formats/webgpu/core/helpers.js +443 -443
- package/dist/formats/webgpu/core/ir/analyzeRegisterValues.js +212 -212
- package/dist/formats/webgpu/core/ir/buildControlFlow.js +220 -220
- package/dist/formats/webgpu/core/ir/indexableTemps.js +137 -137
- package/dist/formats/webgpu/core/ir/inferValueTypes.js +449 -449
- package/dist/formats/webgpu/core/ir/lowerDxbcToIr.js +494 -494
- package/dist/formats/webgpu/core/ir/resolveRegisterFlow.js +177 -177
- package/dist/formats/webgpu/core/ir/sourceLanes.js +61 -61
- package/dist/formats/webgpu/core/packageEffect.js +381 -381
- package/dist/formats/webgpu/core/packageEffectSelection.js +164 -164
- package/dist/formats/webgpu/core/packageMetadata.js +17 -17
- package/dist/formats/webgpu/core/schema.js +4 -4
- package/dist/formats/webgpu/core/wgsl/buildResourceTransformPlan.js +263 -263
- package/dist/formats/webgpu/core/wgsl/buildWgslBindingPlan.js +172 -172
- package/dist/formats/webgpu/core/wgsl/buildWgslSet.js +325 -325
- package/dist/formats/webgpu/core/wgsl/emitWgsl.js +356 -356
- package/dist/formats/webgpu/core/wgsl/hoistEscapingValues.js +77 -77
- package/dist/formats/webgpu/core/wgsl/lowerBindingLayout.js +451 -451
- package/dist/formats/webgpu/core/wgsl/lowerComputeProgram.js +735 -735
- package/dist/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +457 -457
- package/dist/formats/webgpu/core/wgsl/lowerFragmentProgram.js +1572 -1572
- package/dist/formats/webgpu/core/wgsl/lowerMergeHistogramsComputeProgram.js +659 -659
- package/dist/formats/webgpu/core/wgsl/lowerParticleClearComputePrograms.js +734 -734
- package/dist/formats/webgpu/core/wgsl/lowerParticleEmitComputeProgram.js +583 -583
- package/dist/formats/webgpu/core/wgsl/lowerSkinVerticesComputeProgram.js +621 -621
- package/dist/formats/webgpu/core/wgsl/lowerSortComputeProgram.js +824 -824
- package/dist/formats/webgpu/core/wgsl/lowerSortInnerComputeProgram.js +697 -697
- package/dist/formats/webgpu/core/wgsl/lowerSortStepComputeProgram.js +559 -559
- package/dist/formats/webgpu/core/wgsl/lowerVertexProgram.js +1328 -1328
- package/dist/formats/webgpu/core/wgsl/particleEmitSemanticDigest.js +110 -110
- package/dist/formats/webgpu/core/wgsl/precisionControls.js +55 -55
- package/dist/formats/webgpu/core/wgsl/selectionPlans.js +717 -717
- package/dist/formats/webgpu/core/wgsl/uniformity.js +78 -78
- package/dist/formats/webgpu/core/wgsl/validateExactComputeIr.js +196 -196
- package/dist/formats/webgpu/core/wgsl/validateHandleOperand.js +37 -37
- package/dist/formats/webgpu/index.js +2 -2
- package/dist/formats/webm/CjsWebmFormat.js +197 -197
- package/dist/formats/webm/core/helpers.js +572 -572
- package/dist/formats/webm/index.js +2 -2
- package/dist/formats/webp/CjsWebpFormat.js +140 -140
- package/dist/formats/webp/core/helpers.js +237 -237
- package/dist/formats/webp/index.js +2 -2
- package/dist/formats/wem/CjsWemFormat.js +250 -250
- package/dist/formats/wem/core/bitStream.js +261 -261
- package/dist/formats/wem/core/codebookLibrary.js +164 -164
- package/dist/formats/wem/core/helpers.js +437 -437
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
- package/dist/formats/wem/core/ptadpcm.js +77 -77
- package/dist/formats/wem/core/resolve.js +121 -121
- package/dist/formats/wem/core/wemToOgg.js +485 -485
- package/dist/formats/wem/index.js +2 -2
- package/dist/formats/yaml/CjsYamlFormat.js +134 -134
- package/dist/formats/yaml/core/CjsYamlReader.js +400 -400
- package/dist/formats/yaml/core/helpers.js +196 -196
- package/dist/formats/yaml/index.js +2 -2
- package/dist/index.js +64 -64
- package/dist/resource/CjsLoadingObject.js +19 -19
- package/dist/resource/CjsResource.js +801 -801
- package/dist/resource/ResourceHandlerMode.js +14 -14
- package/dist/resource/Tr2LightProfileRes.js +32 -32
- package/dist/resource/audio/AudioGeometryResData.js +47 -47
- package/dist/resource/audio/CjsAudioBufferRes.js +86 -86
- package/dist/resource/audio/CjsAudioRes.js +213 -213
- package/dist/resource/audio/index.js +4 -4
- package/dist/resource/geometry/MeshDecalData.js +37 -37
- package/dist/resource/geometry/MeshDecalLodData.js +34 -34
- package/dist/resource/geometry/TriGeometryRes.js +570 -467
- package/dist/resource/geometry/TriGeometryRes.js.map +1 -1
- package/dist/resource/geometry/TriGeometryResAreaData.js +59 -59
- package/dist/resource/geometry/TriGeometryResJointData.js +38 -38
- package/dist/resource/geometry/TriGeometryResLodData.js +88 -88
- package/dist/resource/geometry/TriGeometryResMeshData.js +63 -63
- package/dist/resource/geometry/TriGeometryResSkeletonData.js +34 -34
- package/dist/resource/geometry/TriJointBinding.js +38 -38
- package/dist/resource/geometry/TriMorphTargetGeometryConstants.js +46 -46
- package/dist/resource/geometry/TriRtGeometryConstants.js +88 -88
- package/dist/resource/geometry/granny/GStateBindingCallbackData.js +31 -31
- package/dist/resource/geometry/granny/Tr2GrannyIntersectionResult.js +60 -60
- package/dist/resource/geometry/granny/Tr2GrannyStateRes.js +36 -36
- package/dist/resource/geometry/granny/TriGrannyRes.js +35 -35
- package/dist/resource/geometry/granny/enums.js +10 -10
- package/dist/resource/geometry/granny/index.js +6 -6
- package/dist/resource/geometry/index.js +17 -17
- package/dist/resource/index.js +54 -54
- package/dist/resource/resourceBoundary.js +64 -64
- package/dist/resource/shader/Tr2EffectRes.js +336 -336
- package/dist/resource/shader/Tr2MaterialArea.js +31 -31
- package/dist/resource/shader/Tr2MaterialMesh.js +27 -27
- package/dist/resource/shader/Tr2MaterialRes.js +31 -31
- package/dist/resource/shader/Tr2Shader.js +283 -283
- package/dist/resource/shader/Tr2ShaderPermutation.js +43 -43
- package/dist/resource/shader/index.js +17 -17
- package/dist/resource/shader/reflection/Tr2EffectConstant.js +143 -143
- package/dist/resource/shader/reflection/Tr2EffectDefine.js +30 -30
- package/dist/resource/shader/reflection/Tr2EffectDescription.js +114 -114
- package/dist/resource/shader/reflection/Tr2EffectLibrary.js +168 -168
- package/dist/resource/shader/reflection/Tr2EffectParameterAnnotation.js +125 -125
- package/dist/resource/shader/reflection/Tr2EffectResource.js +120 -120
- package/dist/resource/shader/reflection/Tr2EffectStageInput.js +372 -372
- package/dist/resource/shader/reflection/Tr2EffectTechnique.js +78 -78
- package/dist/resource/shader/reflection/Tr2Pass.js +168 -168
- package/dist/resource/shader/reflection/carbonRecordFields.js +159 -159
- package/dist/resource/shader/reflection/shaderStage.js +22 -22
- package/dist/resource/shader/sampler/Tr2SamplerSetup.js +135 -135
- package/dist/resource/texture/CjsTextureArrayRes.js +472 -472
- package/dist/resource/texture/CjsTextureArrayResParameterProxy.js +179 -179
- package/dist/resource/texture/Tr2ImageRes.js +120 -120
- package/dist/resource/texture/Tr2TextureLodManager.js +82 -82
- package/dist/resource/texture/Tr2TextureLodUpdateRequest.js +37 -37
- package/dist/resource/texture/Tr2TexturePackChannel.js +37 -37
- package/dist/resource/texture/Tr2TexturePipeline.js +54 -54
- package/dist/resource/texture/Tr2TexturePipelineParams.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +40 -40
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +22 -22
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +34 -34
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +31 -31
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +43 -43
- package/dist/resource/texture/TriTextureRes.js +359 -359
- package/dist/resource/texture/index.js +15 -15
- package/dist/resource/texture/texturePipelineBehavior.js +308 -308
- package/dist/worker/CjsResManMainThreadLoader.js +89 -89
- package/dist/worker/CjsResManWorker.js +218 -218
- package/dist/worker/CjsResManWorkerLoader.js +437 -437
- package/dist/worker/protocol.js +12 -12
- package/docs/README.md +98 -98
- package/docs/architecture.md +118 -118
- package/docs/concepts/resource-lifecycle.md +226 -226
- package/docs/concepts/shader-resource-model.md +111 -111
- package/docs/concepts/writing-an-engine-adapter.md +115 -115
- package/docs/formats/README.md +138 -138
- package/docs/formats/carbon-effect-container.md +553 -553
- package/docs/formats/dxbc/README.md +68 -68
- package/docs/formats/dxbc/architecture.md +80 -80
- package/docs/formats/dxbc/reference/api.md +105 -77
- package/docs/formats/dxbc/reference/classes/README.md +9 -9
- package/docs/formats/dxbc/reference/decoded-output.md +122 -122
- package/docs/formats/gr2.md +160 -160
- package/docs/formats/hlsl/README.md +54 -54
- package/docs/formats/hlsl/architecture.md +66 -65
- package/docs/formats/hlsl/guides/hydrating-json-output.md +60 -60
- package/docs/formats/hlsl/guides/reading-effects.md +68 -64
- package/docs/formats/hlsl/reference/advanced-analysis.md +61 -61
- package/docs/formats/hlsl/reference/api.md +91 -92
- package/docs/formats/hlsl/reference/classes/README.md +11 -11
- package/docs/formats/hlsl/reference/json-graph.md +97 -97
- package/docs/formats/pickle.md +82 -82
- package/docs/formats/provenance.md +196 -196
- package/docs/formats/stl.md +37 -37
- package/docs/formats/webgl/README.md +115 -115
- package/docs/formats/webgl/architecture.md +69 -69
- package/docs/formats/webgl/carbon-constant-layouts.md +326 -326
- package/docs/formats/webgl/decl-io.md +1234 -1234
- package/docs/formats/webgl/memory-structured.md +890 -890
- package/docs/formats/webgl/reference/classes/README.md +9 -9
- package/docs/formats/webgl/texture-sample.md +964 -964
- package/docs/formats/webgpu/README.md +84 -84
- package/docs/formats/webgpu/architecture.md +95 -95
- package/docs/formats/webgpu/formats/carbon-webgpu.md +215 -215
- package/docs/formats/webgpu/guides/effect-packaging.md +189 -189
- package/docs/formats/webgpu/reference/api.md +196 -196
- package/docs/formats/webgpu/reference/classes/README.md +9 -9
- package/docs/formats/webgpu/reference/wgsl-compatibility.md +1546 -1546
- package/docs/formats/wwise.md +146 -146
- package/docs/reference/classes/README.md +35 -35
- package/docs/reference/classes/audio.md +30 -30
- package/docs/reference/classes/core.md +216 -216
- package/docs/reference/classes/dropped.md +46 -46
- package/docs/reference/classes/formats.md +944 -944
- package/docs/reference/classes/resources.md +456 -456
- package/docs/reference/classes/texture.md +26 -26
- package/docs/reference/events.md +117 -117
- package/docs/reference/motherlode-cache.md +275 -275
- package/docs/reference/queues.md +194 -194
- package/docs/reference/reload.md +107 -107
- package/docs/reference/texture-arrays.md +113 -113
- package/docs/reference/texture-pipeline.md +53 -53
- package/docs/reference/workers.md +142 -142
- package/docs/roadmap.md +150 -150
- package/format-notices/black/LICENSE +21 -21
- package/format-notices/black/NOTICE +47 -47
- package/format-notices/bnk/LICENSE +21 -21
- package/format-notices/bnk/NOTICE +21 -21
- package/format-notices/cmf/LICENSE +21 -21
- package/format-notices/cmf/NOTICE +36 -36
- package/format-notices/dds/LICENSE +21 -21
- package/format-notices/dds/NOTICE +14 -14
- package/format-notices/dxbc/LICENSE +21 -21
- package/format-notices/dxbc/NOTICE +20 -20
- package/format-notices/fbx/LICENSE +21 -21
- package/format-notices/fbx/NOTICE +14 -14
- package/format-notices/flac/LICENSE +21 -21
- package/format-notices/flac/NOTICE +14 -14
- package/format-notices/gif/LICENSE +21 -21
- package/format-notices/gif/NOTICE +14 -14
- package/format-notices/gltf/LICENSE +21 -21
- package/format-notices/gltf/NOTICE +27 -27
- package/format-notices/gr2/LICENSE +21 -21
- package/format-notices/gr2/NOTICE +60 -60
- package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -93
- package/format-notices/hlsl/LICENSE +21 -21
- package/format-notices/hlsl/NOTICE +25 -25
- package/format-notices/jpeg/LICENSE +21 -21
- package/format-notices/jpeg/NOTICE +14 -14
- package/format-notices/mp3/LICENSE +21 -21
- package/format-notices/mp3/NOTICE +14 -14
- package/format-notices/mp4/LICENSE +21 -21
- package/format-notices/mp4/NOTICE +14 -14
- package/format-notices/obj/LICENSE +21 -21
- package/format-notices/obj/NOTICE +26 -26
- package/format-notices/ogg/LICENSE +21 -21
- package/format-notices/ogg/NOTICE +28 -28
- package/format-notices/png/LICENSE +21 -21
- package/format-notices/png/NOTICE +14 -14
- package/format-notices/red/LICENSE +21 -21
- package/format-notices/red/NOTICE +31 -31
- package/format-notices/stl/LICENSE +21 -21
- package/format-notices/stl/NOTICE +21 -21
- package/format-notices/tga/LICENSE +21 -21
- package/format-notices/tga/NOTICE +14 -14
- package/format-notices/wav/LICENSE +21 -21
- package/format-notices/wav/NOTICE +14 -14
- package/format-notices/webgl/LICENSE +21 -21
- package/format-notices/webgl/NOTICE +35 -35
- package/format-notices/webgpu/LICENSE +21 -21
- package/format-notices/webgpu/NOTICE +31 -31
- package/format-notices/webm/LICENSE +21 -21
- package/format-notices/webm/NOTICE +14 -14
- package/format-notices/webp/LICENSE +21 -21
- package/format-notices/webp/NOTICE +14 -14
- package/format-notices/wem/LICENSE +57 -57
- package/format-notices/wem/NOTICE +33 -33
- package/format-notices/yaml/LICENSE +21 -21
- package/format-notices/yaml/NOTICE +44 -44
- package/package.json +63 -63
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { CjsByteReader } from '../CjsByteReader.js';
|
|
2
|
-
import { CjsFormatReadError } from '../CjsFormatError.js';
|
|
3
|
-
import { CARBON_EFFECT_MIN_DATA_VERSION, CARBON_EFFECT_DATA_VERSION, readEffectDescription } from './carbonEffectRecords.js';
|
|
4
|
-
|
|
5
|
-
// Source: trinity/trinity/Resources/Tr2EffectRes.cpp (DoLoad, GetShader)
|
|
6
|
-
// Source: trinity/shadercompiler/ShaderCompiler.cpp:746-845 (file assembly)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/** Byte count of the ASCII-hex MD5 source hash in the v15 header. */
|
|
10
|
-
const CARBON_EFFECT_SOURCE_HASH_BYTES = 32;
|
|
11
|
-
|
|
12
|
-
/** Byte count of one offset-table row: `{u32 index, u32 offset, u32 size}`. */
|
|
13
|
-
const CARBON_EFFECT_RECORD_BYTES = 12;
|
|
14
|
-
|
|
1
|
+
import { CjsByteReader } from '../CjsByteReader.js';
|
|
2
|
+
import { CjsFormatReadError } from '../CjsFormatError.js';
|
|
3
|
+
import { CARBON_EFFECT_MIN_DATA_VERSION, CARBON_EFFECT_DATA_VERSION, readEffectDescription } from './carbonEffectRecords.js';
|
|
4
|
+
|
|
5
|
+
// Source: trinity/trinity/Resources/Tr2EffectRes.cpp (DoLoad, GetShader)
|
|
6
|
+
// Source: trinity/shadercompiler/ShaderCompiler.cpp:746-845 (file assembly)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/** Byte count of the ASCII-hex MD5 source hash in the v15 header. */
|
|
10
|
+
const CARBON_EFFECT_SOURCE_HASH_BYTES = 32;
|
|
11
|
+
|
|
12
|
+
/** Byte count of one offset-table row: `{u32 index, u32 offset, u32 size}`. */
|
|
13
|
+
const CARBON_EFFECT_RECORD_BYTES = 12;
|
|
14
|
+
|
|
15
15
|
/**
|
|
16
16
|
* Plain byte cursor over one description blob, carrying the Carbon effect error
|
|
17
17
|
* class and message.
|
|
18
18
|
*
|
|
19
19
|
* Separate from the container reader because the container reader parses its
|
|
20
20
|
* header in the constructor; a body needs a cursor, not a second header parse.
|
|
21
|
-
*/
|
|
22
|
-
class CjsCarbonEffectBodyReader extends CjsByteReader {
|
|
23
|
-
static ReadError = CjsFormatReadError;
|
|
24
|
-
static endOfDataMessage = "Unexpected end of Carbon effect data";
|
|
25
|
-
}
|
|
26
|
-
|
|
21
|
+
*/
|
|
22
|
+
class CjsCarbonEffectBodyReader extends CjsByteReader {
|
|
23
|
+
static ReadError = CjsFormatReadError;
|
|
24
|
+
static endOfDataMessage = "Unexpected end of Carbon effect data";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
27
|
/**
|
|
28
28
|
* Reader for Carbon's compiled-effect container, versions 8 through 15.
|
|
29
29
|
*
|
|
@@ -61,11 +61,11 @@ class CjsCarbonEffectBodyReader extends CjsByteReader {
|
|
|
61
61
|
* question. Versions below 8 are still rejected outright — those branches
|
|
62
62
|
* have no examined file and no writer to check against, and applying newer
|
|
63
63
|
* rules to an older layout misaligns fields silently.
|
|
64
|
-
*/
|
|
65
|
-
class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
66
|
-
/** Cursor class used for description blobs. */
|
|
67
|
-
static BodyReader = CjsCarbonEffectBodyReader;
|
|
68
|
-
|
|
64
|
+
*/
|
|
65
|
+
class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
66
|
+
/** Cursor class used for description blobs. */
|
|
67
|
+
static BodyReader = CjsCarbonEffectBodyReader;
|
|
68
|
+
|
|
69
69
|
/**
|
|
70
70
|
* Reads the container header, arena, permutation axes and offset table.
|
|
71
71
|
*
|
|
@@ -75,58 +75,58 @@ class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
|
75
75
|
* @param {boolean} [options.permissive] Accept a sparse or misordered offset
|
|
76
76
|
* table instead of rejecting it. For forensic inspection of a file already
|
|
77
77
|
* known to be malformed; never for a load path.
|
|
78
|
-
*/
|
|
79
|
-
constructor(bytes, options = {}) {
|
|
80
|
-
super(bytes, options);
|
|
81
|
-
this.version = this.readUint32();
|
|
82
|
-
if (this.version < CARBON_EFFECT_MIN_DATA_VERSION || this.version > CARBON_EFFECT_DATA_VERSION) {
|
|
83
|
-
throw this._error(`Unsupported Carbon effect version ${this.version}; expected ${CARBON_EFFECT_MIN_DATA_VERSION}..${CARBON_EFFECT_DATA_VERSION}`, {
|
|
84
|
-
version: this.version
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// The compiler version and source hash are the v15 header additions;
|
|
89
|
-
// an older header goes straight from the version to the arena.
|
|
90
|
-
if (this.version === CARBON_EFFECT_DATA_VERSION) {
|
|
91
|
-
this.compilerVersion = Array.from(this.readRaw(4));
|
|
92
|
-
this.sourceHash = Uint8Array.from(this.readRaw(CARBON_EFFECT_SOURCE_HASH_BYTES));
|
|
93
|
-
} else {
|
|
94
|
-
this.compilerVersion = null;
|
|
95
|
-
this.sourceHash = null;
|
|
96
|
-
}
|
|
97
|
-
this.stringTableSize = this.readUint32();
|
|
98
|
-
if (this.offset + this.stringTableSize > this.bytes.length) {
|
|
99
|
-
throw this._error("Invalid Carbon effect string-table size", {
|
|
100
|
-
stringTableSize: this.stringTableSize,
|
|
101
|
-
byteLength: this.bytes.length
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
this.stringTableBytes = this.bytes.subarray(this.offset, this.offset + this.stringTableSize);
|
|
105
|
-
this.skip(this.stringTableSize);
|
|
106
|
-
this.setStringTable(this.stringTableBytes, this.stringTableSize);
|
|
107
|
-
this.permutations = this.#readPermutations();
|
|
108
|
-
this.records = this.#readRecords();
|
|
109
|
-
this.headerEnd = this.offset;
|
|
110
|
-
this.diagnostics = this.#inspect();
|
|
111
|
-
if (!options.permissive) {
|
|
112
|
-
this.requireDensePermutationTable();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
78
|
+
*/
|
|
79
|
+
constructor(bytes, options = {}) {
|
|
80
|
+
super(bytes, options);
|
|
81
|
+
this.version = this.readUint32();
|
|
82
|
+
if (this.version < CARBON_EFFECT_MIN_DATA_VERSION || this.version > CARBON_EFFECT_DATA_VERSION) {
|
|
83
|
+
throw this._error(`Unsupported Carbon effect version ${this.version}; expected ${CARBON_EFFECT_MIN_DATA_VERSION}..${CARBON_EFFECT_DATA_VERSION}`, {
|
|
84
|
+
version: this.version
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// The compiler version and source hash are the v15 header additions;
|
|
89
|
+
// an older header goes straight from the version to the arena.
|
|
90
|
+
if (this.version === CARBON_EFFECT_DATA_VERSION) {
|
|
91
|
+
this.compilerVersion = Array.from(this.readRaw(4));
|
|
92
|
+
this.sourceHash = Uint8Array.from(this.readRaw(CARBON_EFFECT_SOURCE_HASH_BYTES));
|
|
93
|
+
} else {
|
|
94
|
+
this.compilerVersion = null;
|
|
95
|
+
this.sourceHash = null;
|
|
96
|
+
}
|
|
97
|
+
this.stringTableSize = this.readUint32();
|
|
98
|
+
if (this.offset + this.stringTableSize > this.bytes.length) {
|
|
99
|
+
throw this._error("Invalid Carbon effect string-table size", {
|
|
100
|
+
stringTableSize: this.stringTableSize,
|
|
101
|
+
byteLength: this.bytes.length
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.stringTableBytes = this.bytes.subarray(this.offset, this.offset + this.stringTableSize);
|
|
105
|
+
this.skip(this.stringTableSize);
|
|
106
|
+
this.setStringTable(this.stringTableBytes, this.stringTableSize);
|
|
107
|
+
this.permutations = this.#readPermutations();
|
|
108
|
+
this.records = this.#readRecords();
|
|
109
|
+
this.headerEnd = this.offset;
|
|
110
|
+
this.diagnostics = this.#inspect();
|
|
111
|
+
if (!options.permissive) {
|
|
112
|
+
this.requireDensePermutationTable();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
116
|
/**
|
|
117
117
|
* Returns the product of the permutation axes' option counts — the number of
|
|
118
118
|
* offset-table rows a fully populated file has.
|
|
119
119
|
*
|
|
120
120
|
* @returns {number} Permutation count.
|
|
121
|
-
*/
|
|
122
|
-
get permutationProduct() {
|
|
123
|
-
let product = 1;
|
|
124
|
-
for (const permutation of this.permutations) {
|
|
125
|
-
product *= permutation.options.length;
|
|
126
|
-
}
|
|
127
|
-
return product;
|
|
128
|
-
}
|
|
129
|
-
|
|
121
|
+
*/
|
|
122
|
+
get permutationProduct() {
|
|
123
|
+
let product = 1;
|
|
124
|
+
for (const permutation of this.permutations) {
|
|
125
|
+
product *= permutation.options.length;
|
|
126
|
+
}
|
|
127
|
+
return product;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
130
|
/**
|
|
131
131
|
* Throws unless the offset table is dense and positionally indexed.
|
|
132
132
|
*
|
|
@@ -147,21 +147,21 @@ class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
|
147
147
|
* is exactly the failure class this container port exists to close.
|
|
148
148
|
* `{ permissive: true }` is the opt-in, for inspecting a file already known to
|
|
149
149
|
* be malformed.
|
|
150
|
-
*/
|
|
151
|
-
requireDensePermutationTable() {
|
|
152
|
-
if (!this.diagnostics.dense) {
|
|
153
|
-
throw this._error("Carbon effect offset table is sparse", {
|
|
154
|
-
recordCount: this.records.length,
|
|
155
|
-
permutationProduct: this.permutationProduct
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
if (!this.diagnostics.indicesMatchPosition) {
|
|
159
|
-
throw this._error("Carbon effect offset table is not positionally indexed", {
|
|
160
|
-
firstMismatch: this.diagnostics.firstIndexMismatch
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
150
|
+
*/
|
|
151
|
+
requireDensePermutationTable() {
|
|
152
|
+
if (!this.diagnostics.dense) {
|
|
153
|
+
throw this._error("Carbon effect offset table is sparse", {
|
|
154
|
+
recordCount: this.records.length,
|
|
155
|
+
permutationProduct: this.permutationProduct
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (!this.diagnostics.indicesMatchPosition) {
|
|
159
|
+
throw this._error("Carbon effect offset table is not positionally indexed", {
|
|
160
|
+
firstMismatch: this.diagnostics.firstIndexMismatch
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
165
|
/**
|
|
166
166
|
* Reads and parses one permutation's description blob.
|
|
167
167
|
*
|
|
@@ -188,202 +188,202 @@ class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
|
188
188
|
* @param {boolean} [options.backend] Expect our optional per-pass trailing
|
|
189
189
|
* block. Omit to detect it from the blob's declared end.
|
|
190
190
|
* @returns {object} Description record tree.
|
|
191
|
-
*/
|
|
192
|
-
readDescription(index, options = {}) {
|
|
193
|
-
const record = this.records[index];
|
|
194
|
-
if (!record) {
|
|
195
|
-
throw this._error(`No Carbon effect body at permutation index ${index}`, {
|
|
196
|
-
index,
|
|
197
|
-
recordCount: this.records.length
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
if (options.backend !== undefined) {
|
|
201
|
-
return this.#readDescriptionAs(record, options.backend === true);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Plain Carbon first: it is the larger population, and it is the reading
|
|
205
|
-
// that must stay cheap.
|
|
206
|
-
try {
|
|
207
|
-
return this.#readDescriptionAs(record, false);
|
|
208
|
-
} catch (withoutBlocks) {
|
|
209
|
-
try {
|
|
210
|
-
return this.#readDescriptionAs(record, true);
|
|
211
|
-
} catch {
|
|
212
|
-
// Report the plain-Carbon failure. If neither reading works the
|
|
213
|
-
// blob is malformed, and the Carbon diagnosis is the useful one;
|
|
214
|
-
// the backend attempt's error would describe a misparse of bytes
|
|
215
|
-
// that were never a backend block.
|
|
216
|
-
throw withoutBlocks;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
191
|
+
*/
|
|
192
|
+
readDescription(index, options = {}) {
|
|
193
|
+
const record = this.records[index];
|
|
194
|
+
if (!record) {
|
|
195
|
+
throw this._error(`No Carbon effect body at permutation index ${index}`, {
|
|
196
|
+
index,
|
|
197
|
+
recordCount: this.records.length
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (options.backend !== undefined) {
|
|
201
|
+
return this.#readDescriptionAs(record, options.backend === true);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Plain Carbon first: it is the larger population, and it is the reading
|
|
205
|
+
// that must stay cheap.
|
|
206
|
+
try {
|
|
207
|
+
return this.#readDescriptionAs(record, false);
|
|
208
|
+
} catch (withoutBlocks) {
|
|
209
|
+
try {
|
|
210
|
+
return this.#readDescriptionAs(record, true);
|
|
211
|
+
} catch {
|
|
212
|
+
// Report the plain-Carbon failure. If neither reading works the
|
|
213
|
+
// blob is malformed, and the Carbon diagnosis is the useful one;
|
|
214
|
+
// the backend attempt's error would describe a misparse of bytes
|
|
215
|
+
// that were never a backend block.
|
|
216
|
+
throw withoutBlocks;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
221
|
/**
|
|
222
222
|
* Parses one body under an exact backend-block assumption.
|
|
223
223
|
*
|
|
224
224
|
* @param {object} record Offset-table row.
|
|
225
225
|
* @param {boolean} backend Whether to expect the per-pass block.
|
|
226
226
|
* @returns {object} Description record tree.
|
|
227
|
-
*/
|
|
228
|
-
#readDescriptionAs(record, backend) {
|
|
229
|
-
const reader = new this.constructor.BodyReader(this.bytes, {
|
|
230
|
-
source: this.source,
|
|
231
|
-
offset: record.offset,
|
|
232
|
-
end: record.offset + record.size,
|
|
233
|
-
stringTable: this.stringTableBytes,
|
|
234
|
-
stringTableSize: this.stringTableSize
|
|
235
|
-
});
|
|
236
|
-
return readEffectDescription(reader, {
|
|
237
|
-
backend,
|
|
238
|
-
version: this.version
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
227
|
+
*/
|
|
228
|
+
#readDescriptionAs(record, backend) {
|
|
229
|
+
const reader = new this.constructor.BodyReader(this.bytes, {
|
|
230
|
+
source: this.source,
|
|
231
|
+
offset: record.offset,
|
|
232
|
+
end: record.offset + record.size,
|
|
233
|
+
stringTable: this.stringTableBytes,
|
|
234
|
+
stringTableSize: this.stringTableSize
|
|
235
|
+
});
|
|
236
|
+
return readEffectDescription(reader, {
|
|
237
|
+
backend,
|
|
238
|
+
version: this.version
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
|
|
242
242
|
/**
|
|
243
243
|
* Returns the raw description-blob bytes for one permutation.
|
|
244
244
|
*
|
|
245
245
|
* @param {number} index Permutation index, positional in the offset table.
|
|
246
246
|
* @returns {Uint8Array} View over the body bytes.
|
|
247
|
-
*/
|
|
248
|
-
bodyBytes(index) {
|
|
249
|
-
const record = this.records[index];
|
|
250
|
-
if (!record) {
|
|
251
|
-
throw this._error(`No Carbon effect body at permutation index ${index}`, {
|
|
252
|
-
index
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
return this.bytes.subarray(record.offset, record.offset + record.size);
|
|
256
|
-
}
|
|
257
|
-
|
|
247
|
+
*/
|
|
248
|
+
bodyBytes(index) {
|
|
249
|
+
const record = this.records[index];
|
|
250
|
+
if (!record) {
|
|
251
|
+
throw this._error(`No Carbon effect body at permutation index ${index}`, {
|
|
252
|
+
index
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return this.bytes.subarray(record.offset, record.offset + record.size);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
258
|
/**
|
|
259
259
|
* Reads the permutation axis records (`ShaderCompiler.cpp:769-795`,
|
|
260
260
|
* `Tr2EffectRes.cpp:263-292`).
|
|
261
261
|
*
|
|
262
262
|
* @returns {object[]} Permutation axes with arena references retained.
|
|
263
|
-
*/
|
|
264
|
-
#readPermutations() {
|
|
265
|
-
const permutations = [];
|
|
266
|
-
const count = this.readUint8();
|
|
267
|
-
for (let index = 0; index < count; index += 1) {
|
|
268
|
-
const nameOffset = this.readUint32();
|
|
269
|
-
const name = this.readStringAt(nameOffset);
|
|
270
|
-
const defaultOption = this.readUint8();
|
|
271
|
-
const descriptionOffset = this.readUint32();
|
|
272
|
-
const description = this.readStringAt(descriptionOffset);
|
|
273
|
-
const type = this.readUint8();
|
|
274
|
-
const options = [];
|
|
275
|
-
const optionCount = this.readUint8();
|
|
276
|
-
for (let optionIndex = 0; optionIndex < optionCount; optionIndex += 1) {
|
|
277
|
-
const offset = this.readUint32();
|
|
278
|
-
options.push({
|
|
279
|
-
offset,
|
|
280
|
-
value: this.readStringAt(offset)
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
permutations.push({
|
|
284
|
-
name: {
|
|
285
|
-
offset: nameOffset,
|
|
286
|
-
value: name
|
|
287
|
-
},
|
|
288
|
-
defaultOption,
|
|
289
|
-
description: {
|
|
290
|
-
offset: descriptionOffset,
|
|
291
|
-
value: description
|
|
292
|
-
},
|
|
293
|
-
type,
|
|
294
|
-
options
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
return permutations;
|
|
298
|
-
}
|
|
299
|
-
|
|
263
|
+
*/
|
|
264
|
+
#readPermutations() {
|
|
265
|
+
const permutations = [];
|
|
266
|
+
const count = this.readUint8();
|
|
267
|
+
for (let index = 0; index < count; index += 1) {
|
|
268
|
+
const nameOffset = this.readUint32();
|
|
269
|
+
const name = this.readStringAt(nameOffset);
|
|
270
|
+
const defaultOption = this.readUint8();
|
|
271
|
+
const descriptionOffset = this.readUint32();
|
|
272
|
+
const description = this.readStringAt(descriptionOffset);
|
|
273
|
+
const type = this.readUint8();
|
|
274
|
+
const options = [];
|
|
275
|
+
const optionCount = this.readUint8();
|
|
276
|
+
for (let optionIndex = 0; optionIndex < optionCount; optionIndex += 1) {
|
|
277
|
+
const offset = this.readUint32();
|
|
278
|
+
options.push({
|
|
279
|
+
offset,
|
|
280
|
+
value: this.readStringAt(offset)
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
permutations.push({
|
|
284
|
+
name: {
|
|
285
|
+
offset: nameOffset,
|
|
286
|
+
value: name
|
|
287
|
+
},
|
|
288
|
+
defaultOption,
|
|
289
|
+
description: {
|
|
290
|
+
offset: descriptionOffset,
|
|
291
|
+
value: description
|
|
292
|
+
},
|
|
293
|
+
type,
|
|
294
|
+
options
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return permutations;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
300
|
/**
|
|
301
301
|
* Reads the offset table (`ShaderCompiler.cpp:800-820`,
|
|
302
302
|
* `Tr2EffectRes.cpp:294-311`).
|
|
303
303
|
*
|
|
304
304
|
* @returns {object[]} Offset-table rows.
|
|
305
|
-
*/
|
|
306
|
-
#readRecords() {
|
|
307
|
-
const count = this.readUint32();
|
|
308
|
-
if (count === 0) {
|
|
309
|
-
throw this._error("Carbon effect contains no compiled bodies");
|
|
310
|
-
}
|
|
311
|
-
if (this.offset + count * CARBON_EFFECT_RECORD_BYTES > this.bytes.length) {
|
|
312
|
-
throw this._error("Carbon effect offset table runs past the end of the file", {
|
|
313
|
-
recordCount: count,
|
|
314
|
-
byteLength: this.bytes.length
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
const records = [];
|
|
318
|
-
for (let index = 0; index < count; index += 1) {
|
|
319
|
-
records.push({
|
|
320
|
-
index: this.readUint32(),
|
|
321
|
-
offset: this.readUint32(),
|
|
322
|
-
size: this.readUint32()
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
return records;
|
|
326
|
-
}
|
|
327
|
-
|
|
305
|
+
*/
|
|
306
|
+
#readRecords() {
|
|
307
|
+
const count = this.readUint32();
|
|
308
|
+
if (count === 0) {
|
|
309
|
+
throw this._error("Carbon effect contains no compiled bodies");
|
|
310
|
+
}
|
|
311
|
+
if (this.offset + count * CARBON_EFFECT_RECORD_BYTES > this.bytes.length) {
|
|
312
|
+
throw this._error("Carbon effect offset table runs past the end of the file", {
|
|
313
|
+
recordCount: count,
|
|
314
|
+
byteLength: this.bytes.length
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
const records = [];
|
|
318
|
+
for (let index = 0; index < count; index += 1) {
|
|
319
|
+
records.push({
|
|
320
|
+
index: this.readUint32(),
|
|
321
|
+
offset: this.readUint32(),
|
|
322
|
+
size: this.readUint32()
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
return records;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
328
|
/**
|
|
329
329
|
* Validates every row's byte range and collects the structural diagnostics
|
|
330
330
|
* Carbon relies on without stating.
|
|
331
331
|
*
|
|
332
332
|
* @returns {object} Structural diagnostics.
|
|
333
|
-
*/
|
|
334
|
-
#inspect() {
|
|
335
|
-
const headerEnd = this.headerEnd;
|
|
336
|
-
const byteLength = this.bytes.length;
|
|
337
|
-
let firstIndexMismatch = null;
|
|
338
|
-
const uniqueOffsets = new Set();
|
|
339
|
-
for (let index = 0; index < this.records.length; index += 1) {
|
|
340
|
-
const record = this.records[index];
|
|
341
|
-
if (record.index !== index && firstIndexMismatch === null) {
|
|
342
|
-
firstIndexMismatch = {
|
|
343
|
-
position: index,
|
|
344
|
-
storedIndex: record.index
|
|
345
|
-
};
|
|
346
|
-
}
|
|
347
|
-
const end = record.offset + record.size;
|
|
348
|
-
if (record.offset < headerEnd || end > byteLength || record.size === 0) {
|
|
349
|
-
throw this._error(`Carbon effect body record ${index} is out of range`, {
|
|
350
|
-
position: index,
|
|
351
|
-
offset: record.offset,
|
|
352
|
-
size: record.size,
|
|
353
|
-
headerEnd,
|
|
354
|
-
byteLength
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
uniqueOffsets.add(record.offset);
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
// The body region must begin exactly where the header ends. Carbon computes
|
|
361
|
-
// its first body offset as `4 + 4 + 32 + headerSize + stringTable.GetSize()`
|
|
362
|
-
// (`ShaderCompiler.cpp:801`), so a gap or an overlap means our reconstruction
|
|
363
|
-
// of that arithmetic disagrees with the writer's — which would silently
|
|
364
|
-
// misread every body rather than fail. Carbon's own reader does not check
|
|
365
|
-
// this; measured across 4833 shipped files, every one starts its body region
|
|
366
|
-
// flush against the header with no slack.
|
|
367
|
-
const firstBody = Math.min(...this.records.map(record => record.offset));
|
|
368
|
-
if (firstBody !== headerEnd) {
|
|
369
|
-
throw this._error("Carbon effect body region does not start where the header ends", {
|
|
370
|
-
firstBody,
|
|
371
|
-
headerEnd,
|
|
372
|
-
slack: firstBody - headerEnd
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
return {
|
|
376
|
-
recordCount: this.records.length,
|
|
377
|
-
permutationProduct: this.permutationProduct,
|
|
378
|
-
dense: this.records.length === this.permutationProduct,
|
|
379
|
-
indicesMatchPosition: firstIndexMismatch === null,
|
|
380
|
-
firstIndexMismatch,
|
|
381
|
-
uniqueBodyCount: uniqueOffsets.size,
|
|
382
|
-
aliasedRowCount: this.records.length - uniqueOffsets.size
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
333
|
+
*/
|
|
334
|
+
#inspect() {
|
|
335
|
+
const headerEnd = this.headerEnd;
|
|
336
|
+
const byteLength = this.bytes.length;
|
|
337
|
+
let firstIndexMismatch = null;
|
|
338
|
+
const uniqueOffsets = new Set();
|
|
339
|
+
for (let index = 0; index < this.records.length; index += 1) {
|
|
340
|
+
const record = this.records[index];
|
|
341
|
+
if (record.index !== index && firstIndexMismatch === null) {
|
|
342
|
+
firstIndexMismatch = {
|
|
343
|
+
position: index,
|
|
344
|
+
storedIndex: record.index
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
const end = record.offset + record.size;
|
|
348
|
+
if (record.offset < headerEnd || end > byteLength || record.size === 0) {
|
|
349
|
+
throw this._error(`Carbon effect body record ${index} is out of range`, {
|
|
350
|
+
position: index,
|
|
351
|
+
offset: record.offset,
|
|
352
|
+
size: record.size,
|
|
353
|
+
headerEnd,
|
|
354
|
+
byteLength
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
uniqueOffsets.add(record.offset);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// The body region must begin exactly where the header ends. Carbon computes
|
|
361
|
+
// its first body offset as `4 + 4 + 32 + headerSize + stringTable.GetSize()`
|
|
362
|
+
// (`ShaderCompiler.cpp:801`), so a gap or an overlap means our reconstruction
|
|
363
|
+
// of that arithmetic disagrees with the writer's — which would silently
|
|
364
|
+
// misread every body rather than fail. Carbon's own reader does not check
|
|
365
|
+
// this; measured across 4833 shipped files, every one starts its body region
|
|
366
|
+
// flush against the header with no slack.
|
|
367
|
+
const firstBody = Math.min(...this.records.map(record => record.offset));
|
|
368
|
+
if (firstBody !== headerEnd) {
|
|
369
|
+
throw this._error("Carbon effect body region does not start where the header ends", {
|
|
370
|
+
firstBody,
|
|
371
|
+
headerEnd,
|
|
372
|
+
slack: firstBody - headerEnd
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
recordCount: this.records.length,
|
|
377
|
+
permutationProduct: this.permutationProduct,
|
|
378
|
+
dense: this.records.length === this.permutationProduct,
|
|
379
|
+
indicesMatchPosition: firstIndexMismatch === null,
|
|
380
|
+
firstIndexMismatch,
|
|
381
|
+
uniqueBodyCount: uniqueOffsets.size,
|
|
382
|
+
aliasedRowCount: this.records.length - uniqueOffsets.size
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
387
|
/**
|
|
388
388
|
* Reports whether a payload has the Carbon effect container shape.
|
|
389
389
|
*
|
|
@@ -398,11 +398,11 @@ class CjsCarbonEffectReader extends CjsCarbonEffectBodyReader {
|
|
|
398
398
|
*
|
|
399
399
|
* @param {Uint8Array} bytes Candidate payload.
|
|
400
400
|
* @returns {boolean} True when the payload opens on Carbon's version dword.
|
|
401
|
-
*/
|
|
402
|
-
function looksLikeCarbonEffectContainer(bytes) {
|
|
403
|
-
if (!bytes || bytes.length < 4) return false;
|
|
404
|
-
return bytes[0] === CARBON_EFFECT_DATA_VERSION && bytes[1] === 0 && bytes[2] === 0 && bytes[3] === 0;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
export { CARBON_EFFECT_RECORD_BYTES, CARBON_EFFECT_SOURCE_HASH_BYTES, CjsCarbonEffectBodyReader, CjsCarbonEffectReader, looksLikeCarbonEffectContainer };
|
|
408
|
-
//# sourceMappingURL=CjsCarbonEffectReader.js.map
|
|
401
|
+
*/
|
|
402
|
+
function looksLikeCarbonEffectContainer(bytes) {
|
|
403
|
+
if (!bytes || bytes.length < 4) return false;
|
|
404
|
+
return bytes[0] === CARBON_EFFECT_DATA_VERSION && bytes[1] === 0 && bytes[2] === 0 && bytes[3] === 0;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
export { CARBON_EFFECT_RECORD_BYTES, CARBON_EFFECT_SOURCE_HASH_BYTES, CjsCarbonEffectBodyReader, CjsCarbonEffectReader, looksLikeCarbonEffectContainer };
|
|
408
|
+
//# sourceMappingURL=CjsCarbonEffectReader.js.map
|