@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,110 +1,110 @@
|
|
|
1
|
-
import { sha256Utf8 } from '../../../../format/effect/sha256.js';
|
|
2
|
-
|
|
3
|
-
function encodeString(value, parts) {
|
|
4
|
-
parts.push("s", `${value.length}`, ":", value, ";");
|
|
5
|
-
}
|
|
6
|
-
function propertyKeyRecord(key) {
|
|
7
|
-
if (typeof key === "string") return `s${key.length}:${key}`;
|
|
8
|
-
return `y${String(key).length}:${String(key)}`;
|
|
9
|
-
}
|
|
10
|
-
function objectKind(value) {
|
|
11
|
-
if (Array.isArray(value)) return "array";
|
|
12
|
-
const prototype = Object.getPrototypeOf(value);
|
|
13
|
-
if (prototype === Object.prototype) return "object";
|
|
14
|
-
if (prototype === null) return "null-prototype";
|
|
15
|
-
return "foreign-prototype";
|
|
16
|
-
}
|
|
17
|
-
function encodeDescriptor(descriptor, parts, seen, transform = null) {
|
|
18
|
-
if (!descriptor) {
|
|
19
|
-
parts.push("missing;");
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (!Object.hasOwn(descriptor, "value")) {
|
|
23
|
-
parts.push("accessor;");
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
parts.push("data:");
|
|
27
|
-
if (transform) transform(descriptor.value, parts, seen);else encodeValue(descriptor.value, parts, seen);
|
|
28
|
-
}
|
|
29
|
-
function sortedKeys(value, omitted = null) {
|
|
30
|
-
return Reflect.ownKeys(value).filter(key => !omitted?.has(key)).map(key => ({
|
|
31
|
-
key,
|
|
32
|
-
record: propertyKeyRecord(key)
|
|
33
|
-
})).sort((left, right) => left.record < right.record ? -1 : left.record > right.record ? 1 : 0);
|
|
34
|
-
}
|
|
35
|
-
function encodeObject(value, parts, seen, omitted = null, transformProperty = null) {
|
|
36
|
-
if (seen.has(value)) {
|
|
37
|
-
throw new TypeError("Exact semantic records must be acyclic");
|
|
38
|
-
}
|
|
39
|
-
seen.add(value);
|
|
40
|
-
const kind = objectKind(value);
|
|
41
|
-
parts.push("o", `${kind.length}`, ":", kind, "{");
|
|
42
|
-
const keys = sortedKeys(value, omitted);
|
|
43
|
-
parts.push(`${keys.length}`, ":");
|
|
44
|
-
for (const {
|
|
45
|
-
key,
|
|
46
|
-
record
|
|
47
|
-
} of keys) {
|
|
48
|
-
parts.push("k", record, "=");
|
|
49
|
-
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
50
|
-
const transform = transformProperty ? transformProperty(key) : null;
|
|
51
|
-
encodeDescriptor(descriptor, parts, seen, transform);
|
|
52
|
-
}
|
|
53
|
-
parts.push("}");
|
|
54
|
-
seen.delete(value);
|
|
55
|
-
}
|
|
56
|
-
function encodeValue(value, parts, seen) {
|
|
57
|
-
if (value === undefined) parts.push("undefined;");else if (value === null) parts.push("null;");else if (typeof value === "boolean") {
|
|
58
|
-
parts.push(value ? "boolean:true;" : "boolean:false;");
|
|
59
|
-
} else if (typeof value === "number") {
|
|
60
|
-
if (Number.isNaN(value)) parts.push("number:NaN;");else if (Object.is(value, -0)) parts.push("number:-0;");else if (value === Number.POSITIVE_INFINITY) {
|
|
61
|
-
parts.push("number:+Infinity;");
|
|
62
|
-
} else if (value === Number.NEGATIVE_INFINITY) {
|
|
63
|
-
parts.push("number:-Infinity;");
|
|
64
|
-
} else parts.push("number:", `${value}`, ";");
|
|
65
|
-
} else if (typeof value === "string") encodeString(value, parts);else if (typeof value === "bigint") {
|
|
66
|
-
parts.push("bigint:", value.toString(), ";");
|
|
67
|
-
} else if (typeof value === "symbol") {
|
|
68
|
-
parts.push("symbol:", propertyKeyRecord(value), ";");
|
|
69
|
-
} else if (typeof value === "function") parts.push("function;");else encodeObject(value, parts, seen);
|
|
70
|
-
}
|
|
71
|
-
function encodeInstruction(instruction, parts, seen) {
|
|
72
|
-
if (!instruction || typeof instruction !== "object") {
|
|
73
|
-
encodeValue(instruction, parts, seen);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
encodeObject(instruction, parts, seen, new Set(["dataflow", "typeInfo"]));
|
|
77
|
-
}
|
|
78
|
-
function instructionTransform(key) {
|
|
79
|
-
return typeof key === "string" && /^\d+$/u.test(key) ? encodeInstruction : null;
|
|
80
|
-
}
|
|
81
|
-
function encodeInstructions(value, parts, seen) {
|
|
82
|
-
if (!Array.isArray(value)) {
|
|
83
|
-
encodeValue(value, parts, seen);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
encodeObject(value, parts, seen, null, instructionTransform);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Produces the lossless semantic digest used only by the particle-emitter
|
|
91
|
-
* exact profile. Source labels and derived CFG/SSA/type annotations are
|
|
92
|
-
* deliberately excluded.
|
|
93
|
-
*
|
|
94
|
-
* @param {object} program CJS shader IR candidate.
|
|
95
|
-
* @returns {string} Lower-case SHA-256 digest.
|
|
96
|
-
*/
|
|
97
|
-
function particleEmitSemanticDigest(program) {
|
|
98
|
-
const parts = ["particle-emit-semantic-profile:1{"];
|
|
99
|
-
const seen = new WeakSet();
|
|
100
|
-
if (!program || typeof program !== "object") {
|
|
101
|
-
encodeValue(program, parts, seen);
|
|
102
|
-
} else {
|
|
103
|
-
encodeObject(program, parts, seen, new Set(["source", "blocks", "controlFlow", "values"]), key => key === "instructions" ? encodeInstructions : null);
|
|
104
|
-
}
|
|
105
|
-
parts.push("}");
|
|
106
|
-
return sha256Utf8(parts.join(""));
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export { particleEmitSemanticDigest, sha256Utf8 };
|
|
110
|
-
//# sourceMappingURL=particleEmitSemanticDigest.js.map
|
|
1
|
+
import { sha256Utf8 } from '../../../../format/effect/sha256.js';
|
|
2
|
+
|
|
3
|
+
function encodeString(value, parts) {
|
|
4
|
+
parts.push("s", `${value.length}`, ":", value, ";");
|
|
5
|
+
}
|
|
6
|
+
function propertyKeyRecord(key) {
|
|
7
|
+
if (typeof key === "string") return `s${key.length}:${key}`;
|
|
8
|
+
return `y${String(key).length}:${String(key)}`;
|
|
9
|
+
}
|
|
10
|
+
function objectKind(value) {
|
|
11
|
+
if (Array.isArray(value)) return "array";
|
|
12
|
+
const prototype = Object.getPrototypeOf(value);
|
|
13
|
+
if (prototype === Object.prototype) return "object";
|
|
14
|
+
if (prototype === null) return "null-prototype";
|
|
15
|
+
return "foreign-prototype";
|
|
16
|
+
}
|
|
17
|
+
function encodeDescriptor(descriptor, parts, seen, transform = null) {
|
|
18
|
+
if (!descriptor) {
|
|
19
|
+
parts.push("missing;");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!Object.hasOwn(descriptor, "value")) {
|
|
23
|
+
parts.push("accessor;");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
parts.push("data:");
|
|
27
|
+
if (transform) transform(descriptor.value, parts, seen);else encodeValue(descriptor.value, parts, seen);
|
|
28
|
+
}
|
|
29
|
+
function sortedKeys(value, omitted = null) {
|
|
30
|
+
return Reflect.ownKeys(value).filter(key => !omitted?.has(key)).map(key => ({
|
|
31
|
+
key,
|
|
32
|
+
record: propertyKeyRecord(key)
|
|
33
|
+
})).sort((left, right) => left.record < right.record ? -1 : left.record > right.record ? 1 : 0);
|
|
34
|
+
}
|
|
35
|
+
function encodeObject(value, parts, seen, omitted = null, transformProperty = null) {
|
|
36
|
+
if (seen.has(value)) {
|
|
37
|
+
throw new TypeError("Exact semantic records must be acyclic");
|
|
38
|
+
}
|
|
39
|
+
seen.add(value);
|
|
40
|
+
const kind = objectKind(value);
|
|
41
|
+
parts.push("o", `${kind.length}`, ":", kind, "{");
|
|
42
|
+
const keys = sortedKeys(value, omitted);
|
|
43
|
+
parts.push(`${keys.length}`, ":");
|
|
44
|
+
for (const {
|
|
45
|
+
key,
|
|
46
|
+
record
|
|
47
|
+
} of keys) {
|
|
48
|
+
parts.push("k", record, "=");
|
|
49
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
50
|
+
const transform = transformProperty ? transformProperty(key) : null;
|
|
51
|
+
encodeDescriptor(descriptor, parts, seen, transform);
|
|
52
|
+
}
|
|
53
|
+
parts.push("}");
|
|
54
|
+
seen.delete(value);
|
|
55
|
+
}
|
|
56
|
+
function encodeValue(value, parts, seen) {
|
|
57
|
+
if (value === undefined) parts.push("undefined;");else if (value === null) parts.push("null;");else if (typeof value === "boolean") {
|
|
58
|
+
parts.push(value ? "boolean:true;" : "boolean:false;");
|
|
59
|
+
} else if (typeof value === "number") {
|
|
60
|
+
if (Number.isNaN(value)) parts.push("number:NaN;");else if (Object.is(value, -0)) parts.push("number:-0;");else if (value === Number.POSITIVE_INFINITY) {
|
|
61
|
+
parts.push("number:+Infinity;");
|
|
62
|
+
} else if (value === Number.NEGATIVE_INFINITY) {
|
|
63
|
+
parts.push("number:-Infinity;");
|
|
64
|
+
} else parts.push("number:", `${value}`, ";");
|
|
65
|
+
} else if (typeof value === "string") encodeString(value, parts);else if (typeof value === "bigint") {
|
|
66
|
+
parts.push("bigint:", value.toString(), ";");
|
|
67
|
+
} else if (typeof value === "symbol") {
|
|
68
|
+
parts.push("symbol:", propertyKeyRecord(value), ";");
|
|
69
|
+
} else if (typeof value === "function") parts.push("function;");else encodeObject(value, parts, seen);
|
|
70
|
+
}
|
|
71
|
+
function encodeInstruction(instruction, parts, seen) {
|
|
72
|
+
if (!instruction || typeof instruction !== "object") {
|
|
73
|
+
encodeValue(instruction, parts, seen);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
encodeObject(instruction, parts, seen, new Set(["dataflow", "typeInfo"]));
|
|
77
|
+
}
|
|
78
|
+
function instructionTransform(key) {
|
|
79
|
+
return typeof key === "string" && /^\d+$/u.test(key) ? encodeInstruction : null;
|
|
80
|
+
}
|
|
81
|
+
function encodeInstructions(value, parts, seen) {
|
|
82
|
+
if (!Array.isArray(value)) {
|
|
83
|
+
encodeValue(value, parts, seen);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
encodeObject(value, parts, seen, null, instructionTransform);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Produces the lossless semantic digest used only by the particle-emitter
|
|
91
|
+
* exact profile. Source labels and derived CFG/SSA/type annotations are
|
|
92
|
+
* deliberately excluded.
|
|
93
|
+
*
|
|
94
|
+
* @param {object} program CJS shader IR candidate.
|
|
95
|
+
* @returns {string} Lower-case SHA-256 digest.
|
|
96
|
+
*/
|
|
97
|
+
function particleEmitSemanticDigest(program) {
|
|
98
|
+
const parts = ["particle-emit-semantic-profile:1{"];
|
|
99
|
+
const seen = new WeakSet();
|
|
100
|
+
if (!program || typeof program !== "object") {
|
|
101
|
+
encodeValue(program, parts, seen);
|
|
102
|
+
} else {
|
|
103
|
+
encodeObject(program, parts, seen, new Set(["source", "blocks", "controlFlow", "values"]), key => key === "instructions" ? encodeInstructions : null);
|
|
104
|
+
}
|
|
105
|
+
parts.push("}");
|
|
106
|
+
return sha256Utf8(parts.join(""));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { particleEmitSemanticDigest, sha256Utf8 };
|
|
110
|
+
//# sourceMappingURL=particleEmitSemanticDigest.js.map
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
const COMPONENT_MASK = /^x?y?z?w?$/u;
|
|
2
|
-
const REFACTORING_ALLOWED = 1 << 11;
|
|
3
|
-
function fail(stage, instruction, message) {
|
|
4
|
-
throw new Error(`WGSL ${stage} instruction ${instruction.index} precise ${instruction.opcodeName} ${message}`);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Requires the DXBC shader to opt into refactoring. Without the global flag,
|
|
9
|
-
* DXBC defines every operation as precise, which portable WGSL cannot promise.
|
|
10
|
-
*
|
|
11
|
-
* @param {object} program CJS shader IR.
|
|
12
|
-
* @param {string} stage Diagnostic stage label.
|
|
13
|
-
*/
|
|
14
|
-
function requireRefactoringAllowed(program, stage) {
|
|
15
|
-
const declarations = program.declarations.filter(entry => entry.opcodeName === "dcl_global_flags");
|
|
16
|
-
if (declarations.length !== 1) {
|
|
17
|
-
throw new Error(`WGSL ${stage} shader requires exactly one dcl_global_flags declaration`);
|
|
18
|
-
}
|
|
19
|
-
const data = declarations[0].data;
|
|
20
|
-
if (!Number.isInteger(data?.globalFlags) || data.globalFlags < 0 || typeof data.refactoringAllowed !== "boolean" || data.refactoringAllowed !== ((data.globalFlags & REFACTORING_ALLOWED) !== 0)) {
|
|
21
|
-
throw new Error(`WGSL ${stage} shader has inconsistent dcl_global_flags metadata`);
|
|
22
|
-
}
|
|
23
|
-
if (!data.refactoringAllowed) {
|
|
24
|
-
throw new Error(`WGSL ${stage} shader disables refactoring globally; exact lowering is not representable in WGSL`);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Validates precise-mask metadata only. ADAPTED CONTRACT (requester decision,
|
|
30
|
-
* 2026-07-20): DXBC `precise` operations are accepted and lowered as ordinary
|
|
31
|
-
* IEEE float math, and the vertex position output is emitted `@invariant`.
|
|
32
|
-
* WGSL has no general no-contraction control, so bit-exact parity with native
|
|
33
|
-
* D3D11 arithmetic is NOT promised; `@invariant` instead guarantees identical
|
|
34
|
-
* position results across the pipelines built from the same emitted WGSL,
|
|
35
|
-
* which is the multi-pass invariance `precise` protects in these shaders.
|
|
36
|
-
* See docs/reference/wgsl-compatibility.md ("precise" entry) before changing
|
|
37
|
-
* this.
|
|
38
|
-
*
|
|
39
|
-
* @param {object} instruction Typed CJS shader IR instruction.
|
|
40
|
-
* @param {string} stage Diagnostic stage label.
|
|
41
|
-
*/
|
|
42
|
-
function validatePreciseInstruction(instruction, stage) {
|
|
43
|
-
const mask = instruction.preciseMask;
|
|
44
|
-
if (typeof mask !== "string" || !COMPONENT_MASK.test(mask)) {
|
|
45
|
-
fail(stage, instruction, `has malformed component mask ${String(mask)}`);
|
|
46
|
-
}
|
|
47
|
-
if (!mask) return;
|
|
48
|
-
const writes = instruction.dataflow?.writes || [];
|
|
49
|
-
if (!writes.length || Array.from(mask).some(component => !writes.some(write => write.mask.includes(component)))) {
|
|
50
|
-
fail(stage, instruction, `mask ${mask} requires a destination write containing every precise lane`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export { requireRefactoringAllowed, validatePreciseInstruction };
|
|
55
|
-
//# sourceMappingURL=precisionControls.js.map
|
|
1
|
+
const COMPONENT_MASK = /^x?y?z?w?$/u;
|
|
2
|
+
const REFACTORING_ALLOWED = 1 << 11;
|
|
3
|
+
function fail(stage, instruction, message) {
|
|
4
|
+
throw new Error(`WGSL ${stage} instruction ${instruction.index} precise ${instruction.opcodeName} ${message}`);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Requires the DXBC shader to opt into refactoring. Without the global flag,
|
|
9
|
+
* DXBC defines every operation as precise, which portable WGSL cannot promise.
|
|
10
|
+
*
|
|
11
|
+
* @param {object} program CJS shader IR.
|
|
12
|
+
* @param {string} stage Diagnostic stage label.
|
|
13
|
+
*/
|
|
14
|
+
function requireRefactoringAllowed(program, stage) {
|
|
15
|
+
const declarations = program.declarations.filter(entry => entry.opcodeName === "dcl_global_flags");
|
|
16
|
+
if (declarations.length !== 1) {
|
|
17
|
+
throw new Error(`WGSL ${stage} shader requires exactly one dcl_global_flags declaration`);
|
|
18
|
+
}
|
|
19
|
+
const data = declarations[0].data;
|
|
20
|
+
if (!Number.isInteger(data?.globalFlags) || data.globalFlags < 0 || typeof data.refactoringAllowed !== "boolean" || data.refactoringAllowed !== ((data.globalFlags & REFACTORING_ALLOWED) !== 0)) {
|
|
21
|
+
throw new Error(`WGSL ${stage} shader has inconsistent dcl_global_flags metadata`);
|
|
22
|
+
}
|
|
23
|
+
if (!data.refactoringAllowed) {
|
|
24
|
+
throw new Error(`WGSL ${stage} shader disables refactoring globally; exact lowering is not representable in WGSL`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Validates precise-mask metadata only. ADAPTED CONTRACT (requester decision,
|
|
30
|
+
* 2026-07-20): DXBC `precise` operations are accepted and lowered as ordinary
|
|
31
|
+
* IEEE float math, and the vertex position output is emitted `@invariant`.
|
|
32
|
+
* WGSL has no general no-contraction control, so bit-exact parity with native
|
|
33
|
+
* D3D11 arithmetic is NOT promised; `@invariant` instead guarantees identical
|
|
34
|
+
* position results across the pipelines built from the same emitted WGSL,
|
|
35
|
+
* which is the multi-pass invariance `precise` protects in these shaders.
|
|
36
|
+
* See docs/reference/wgsl-compatibility.md ("precise" entry) before changing
|
|
37
|
+
* this.
|
|
38
|
+
*
|
|
39
|
+
* @param {object} instruction Typed CJS shader IR instruction.
|
|
40
|
+
* @param {string} stage Diagnostic stage label.
|
|
41
|
+
*/
|
|
42
|
+
function validatePreciseInstruction(instruction, stage) {
|
|
43
|
+
const mask = instruction.preciseMask;
|
|
44
|
+
if (typeof mask !== "string" || !COMPONENT_MASK.test(mask)) {
|
|
45
|
+
fail(stage, instruction, `has malformed component mask ${String(mask)}`);
|
|
46
|
+
}
|
|
47
|
+
if (!mask) return;
|
|
48
|
+
const writes = instruction.dataflow?.writes || [];
|
|
49
|
+
if (!writes.length || Array.from(mask).some(component => !writes.some(write => write.mask.includes(component)))) {
|
|
50
|
+
fail(stage, instruction, `mask ${mask} requires a destination write containing every precise lane`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { requireRefactoringAllowed, validatePreciseInstruction };
|
|
55
|
+
//# sourceMappingURL=precisionControls.js.map
|