@carbonenginejs/runtime 0.1.0-alpha.4 → 0.1.0-alpha.5
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/dist/global/blue/BlueClasses.js +200 -0
- package/dist/global/blue/BlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueClasses.js +79 -0
- package/dist/global/blue/IBlueClasses.js.map +1 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js +16 -0
- package/dist/global/blue/IBlueDynamicResourceConstructor.js.map +1 -1
- package/dist/global/blue/blue.js +8 -2
- package/dist/global/blue/blue.js.map +1 -1
- package/dist/global/blue/index.js +2 -0
- package/dist/global/blue/index.js.map +1 -1
- package/dist/global/consts/index.js +0 -1
- package/dist/global/consts/index.js.map +1 -1
- package/dist/global/consts/renderContext/formats.js +26 -25
- package/dist/global/consts/renderContext/formats.js.map +1 -1
- package/dist/{trinityal/Tr2BitmapDimensions.js → global/imageio/BitmapDimensions.js} +19 -15
- package/dist/global/imageio/BitmapDimensions.js.map +1 -0
- package/dist/global/imageio/Cutout.js +28 -0
- package/dist/global/imageio/Cutout.js.map +1 -0
- package/dist/global/imageio/HostBitmap.js +1106 -0
- package/dist/global/imageio/HostBitmap.js.map +1 -0
- package/dist/global/imageio/ImageIOResult.js +99 -0
- package/dist/global/imageio/ImageIOResult.js.map +1 -0
- package/dist/global/imageio/ImageUtility.js +205 -0
- package/dist/global/imageio/ImageUtility.js.map +1 -0
- package/dist/global/imageio/LoadParameters.js +86 -0
- package/dist/global/imageio/LoadParameters.js.map +1 -0
- package/dist/global/imageio/Metadata.js +22 -0
- package/dist/global/imageio/Metadata.js.map +1 -0
- package/dist/global/imageio/index.js +8 -0
- package/dist/global/{consts/webgpu → imageio}/index.js.map +1 -1
- package/dist/global/index.js +2 -1
- package/dist/global/index.js.map +1 -1
- package/dist/global/math/color.js +1 -1
- package/dist/global/math/color.js.map +1 -1
- package/dist/global/schema/CjsSchema.js +8 -0
- package/dist/global/schema/CjsSchema.js.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/resource/CjsResMan.js +47 -7
- package/dist/resource/CjsResMan.js.map +1 -1
- package/dist/resource/Tr2LightProfileRes.js +37 -0
- package/dist/resource/Tr2LightProfileRes.js.map +1 -1
- package/dist/resource/format/CjsByteWriter.js +46 -46
- package/dist/resource/format/CjsByteWriter.js.map +1 -1
- package/dist/resource/format/CjsFormat.js +7 -8
- package/dist/resource/format/CjsFormat.js.map +1 -1
- package/dist/resource/format/CjsFormatStore.js +8 -8
- package/dist/resource/format/CjsFormatStore.js.map +1 -1
- package/dist/resource/format/CjsGeometryFormat.js +114 -0
- package/dist/resource/format/CjsGeometryFormat.js.map +1 -0
- package/dist/resource/format/CjsImageFormat.js +282 -0
- package/dist/resource/format/CjsImageFormat.js.map +1 -0
- package/dist/resource/format/CjsResourceProbe.js +12 -48
- package/dist/resource/format/CjsResourceProbe.js.map +1 -1
- package/dist/resource/format/CjsStringTable.js +37 -37
- package/dist/resource/format/CjsStringTable.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js +10 -10
- package/dist/resource/format/carbonEffect/CjsCarbonEffectReader.js.map +1 -1
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js +37 -37
- package/dist/resource/format/carbonEffect/CjsCarbonEffectWriter.js.map +1 -1
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js +35 -7
- package/dist/resource/format/carbonEffect/carbonEffectBackendBlock.js.map +1 -1
- package/dist/resource/format/index.js +3 -1
- package/dist/resource/format/index.js.map +1 -1
- package/dist/resource/formats/black/CjsBlackFormat.js +130 -137
- package/dist/resource/formats/black/CjsBlackFormat.js.map +1 -1
- package/dist/resource/formats/bnk/CjsBnkFormat.js +12 -19
- package/dist/resource/formats/bnk/CjsBnkFormat.js.map +1 -1
- package/dist/resource/formats/bnk/core/helpers.js +1 -3
- package/dist/resource/formats/bnk/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/CjsCmfFormat.js +19 -82
- package/dist/resource/formats/cmf/CjsCmfFormat.js.map +1 -1
- package/dist/resource/formats/cmf/core/constants.js +1 -2
- package/dist/resource/formats/cmf/core/constants.js.map +1 -1
- package/dist/resource/formats/{stl/core/targets.js → cmf/core/flatShared.js} +9 -8
- package/dist/resource/formats/cmf/core/flatShared.js.map +1 -0
- package/dist/resource/formats/cmf/core/helpers.js +13 -13
- package/dist/resource/formats/cmf/core/helpers.js.map +1 -1
- package/dist/resource/formats/cmf/core/writer.js +24 -24
- package/dist/resource/formats/cmf/core/writer.js.map +1 -1
- package/dist/resource/formats/dds/CjsDdsFormat.js +134 -17
- package/dist/resource/formats/dds/CjsDdsFormat.js.map +1 -1
- package/dist/resource/formats/dds/core/helpers.js +125 -40
- package/dist/resource/formats/dds/core/helpers.js.map +1 -1
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js +14 -16
- package/dist/resource/formats/dxbc/CjsDxbcFormat.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{container.js → DxbcContainer.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcContainer.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{errors.js → DxbcReadError.js} +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReadError.js.map +1 -0
- package/dist/resource/formats/dxbc/core/DxbcReader.js +1 -1
- package/dist/resource/formats/dxbc/core/DxbcReader.js.map +1 -1
- package/dist/resource/formats/dxbc/core/{program.js → DxbcShaderProgram.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcShaderProgram.js.map +1 -0
- package/dist/resource/formats/dxbc/core/{signature.js → DxbcSignatureChunk.js} +2 -2
- package/dist/resource/formats/dxbc/core/DxbcSignatureChunk.js.map +1 -0
- package/dist/resource/formats/dxbc/core/decoder.js +2 -2
- package/dist/resource/formats/dxbc/core/decoder.js.map +1 -1
- package/dist/resource/formats/dxbc/core/helpers.js +3 -3
- package/dist/resource/formats/dxbc/core/helpers.js.map +1 -1
- package/dist/resource/formats/fbx/CjsFbxFormat.js +18 -20
- package/dist/resource/formats/fbx/CjsFbxFormat.js.map +1 -1
- package/dist/resource/formats/flac/CjsFlacFormat.js +7 -13
- package/dist/resource/formats/flac/CjsFlacFormat.js.map +1 -1
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js +29 -29
- package/dist/resource/formats/fsd/32/CjsFsd32Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js +3 -3
- package/dist/resource/formats/fsd/64/CjsFsd64Format.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js +23 -23
- package/dist/resource/formats/fsd/64/core/CjsFsd64Binary.js.map +1 -1
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js +8 -8
- package/dist/resource/formats/fsd/64/core/CjsFsd64Reader.js.map +1 -1
- package/dist/resource/formats/fsd/CjsFsdFormat.js +23 -23
- package/dist/resource/formats/fsd/CjsFsdFormat.js.map +1 -1
- package/dist/resource/formats/gif/CjsGifFormat.js +24 -15
- package/dist/resource/formats/gif/CjsGifFormat.js.map +1 -1
- package/dist/resource/formats/gltf/CjsGltfFormat.js +33 -98
- package/dist/resource/formats/gltf/CjsGltfFormat.js.map +1 -1
- package/dist/resource/formats/gltf/core/helpers.js +3 -12
- package/dist/resource/formats/gltf/core/helpers.js.map +1 -1
- package/dist/resource/formats/gr2/CjsGr2Format.js +27 -91
- package/dist/resource/formats/gr2/CjsGr2Format.js.map +1 -1
- package/dist/resource/formats/hlsl/CjsHlslFormat.js +22 -25
- package/dist/resource/formats/hlsl/CjsHlslFormat.js.map +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js +1 -1
- package/dist/resource/formats/hlsl/core/carbonDescriptionToRuntime.js.map +1 -1
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js +3 -3
- package/dist/resource/formats/hlsl/core/tr2/shader/HlslEffectStageInput.js.map +1 -1
- package/dist/resource/formats/ies/CjsIESFormat.js +29 -29
- package/dist/resource/formats/ies/CjsIESFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/CjsJpegFormat.js +24 -15
- package/dist/resource/formats/jpeg/CjsJpegFormat.js.map +1 -1
- package/dist/resource/formats/jpeg/core/helpers.js +3 -5
- package/dist/resource/formats/jpeg/core/helpers.js.map +1 -1
- package/dist/resource/formats/jpeg/core/jpeg.js +58 -58
- package/dist/resource/formats/jpeg/core/jpeg.js.map +1 -1
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js +3 -3
- package/dist/resource/formats/jsonl/CjsJsonlFormat.js.map +1 -1
- package/dist/resource/formats/mp3/CjsMp3Format.js +7 -14
- package/dist/resource/formats/mp3/CjsMp3Format.js.map +1 -1
- package/dist/resource/formats/mp3/core/helpers.js +3 -5
- package/dist/resource/formats/mp3/core/helpers.js.map +1 -1
- package/dist/resource/formats/mp4/CjsMp4Format.js +7 -13
- package/dist/resource/formats/mp4/CjsMp4Format.js.map +1 -1
- package/dist/resource/formats/mp4/core/helpers.js +3 -5
- package/dist/resource/formats/mp4/core/helpers.js.map +1 -1
- package/dist/resource/formats/obj/CjsObjFormat.js +92 -157
- package/dist/resource/formats/obj/CjsObjFormat.js.map +1 -1
- package/dist/resource/formats/obj/core/helpers.js +5 -113
- package/dist/resource/formats/obj/core/helpers.js.map +1 -1
- package/dist/resource/formats/ogg/CjsOggFormat.js +7 -14
- package/dist/resource/formats/ogg/CjsOggFormat.js.map +1 -1
- package/dist/resource/formats/pickle/CjsPickleFormat.js +7 -12
- package/dist/resource/formats/pickle/CjsPickleFormat.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol0Reader.js.map +1 -1
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js +7 -7
- package/dist/resource/formats/pickle/core/CjsPickleProtocol4Reader.js.map +1 -1
- package/dist/resource/formats/png/CjsPngFormat.js +40 -15
- package/dist/resource/formats/png/CjsPngFormat.js.map +1 -1
- package/dist/resource/formats/png/core/helpers.js +4 -6
- package/dist/resource/formats/png/core/helpers.js.map +1 -1
- package/dist/resource/formats/red/CjsRedFormat.js +22 -28
- package/dist/resource/formats/red/CjsRedFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js +3 -7
- package/dist/resource/formats/schemabound/CjsSchemaBoundFormat.js.map +1 -1
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js +5 -0
- package/dist/resource/formats/schemabound/core/schemaBoundValues.js.map +1 -1
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js +4 -9
- package/dist/resource/formats/sqlite/CjsSqliteFormat.js.map +1 -1
- package/dist/resource/formats/static/CjsStaticFormat.js +4 -4
- package/dist/resource/formats/static/CjsStaticFormat.js.map +1 -1
- package/dist/resource/formats/stl/CjsStlFormat.js +39 -104
- package/dist/resource/formats/stl/CjsStlFormat.js.map +1 -1
- package/dist/resource/formats/stl/core/helpers.js +5 -19
- package/dist/resource/formats/stl/core/helpers.js.map +1 -1
- package/dist/resource/formats/tga/CjsTgaFormat.js +26 -15
- package/dist/resource/formats/tga/CjsTgaFormat.js.map +1 -1
- package/dist/resource/formats/tga/core/helpers.js +3 -5
- package/dist/resource/formats/tga/core/helpers.js.map +1 -1
- package/dist/resource/formats/vta/CjsVtaFormat.js +8 -15
- package/dist/resource/formats/vta/CjsVtaFormat.js.map +1 -1
- package/dist/resource/formats/wav/CjsWavFormat.js +7 -14
- package/dist/resource/formats/wav/CjsWavFormat.js.map +1 -1
- package/dist/resource/formats/wav/core/helpers.js +3 -5
- package/dist/resource/formats/wav/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgl/CjsWebglFormat.js +103 -105
- package/dist/resource/formats/webgl/CjsWebglFormat.js.map +1 -1
- package/dist/resource/formats/webgl/core/{errors.js → WebglReadError.js} +1 -1
- package/dist/resource/formats/webgl/core/WebglReadError.js.map +1 -0
- package/dist/resource/formats/webgl/core/effectPackage.js +1 -1
- package/dist/resource/formats/webgl/core/effectPackage.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js +3 -3
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslEmitter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glsl/{DxbcGlslHelpers.js → DxbcGlslHelperRegistry.js} +2 -2
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelperRegistry.js.map +1 -0
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js +1 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslOperandFormatter.js.map +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js +1 -1
- package/dist/resource/formats/webgl/core/glslBackendBlock.js.map +1 -1
- package/dist/resource/formats/webgl/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js +28 -29
- package/dist/resource/formats/webgpu/CjsWebgpuFormat.js.map +1 -1
- package/dist/resource/formats/webgpu/core/{errors.js → WebgpuReadError.js} +1 -1
- package/dist/resource/formats/webgpu/core/WebgpuReadError.js.map +1 -0
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js +1 -1
- package/dist/resource/formats/webgpu/core/carbonWebgpu/validateContainer.js.map +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js +1 -1
- package/dist/resource/formats/webgpu/core/helpers.js.map +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js +1 -1
- package/dist/resource/formats/webgpu/core/ir/lowerDxbcToIr.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js +18 -6
- package/dist/resource/formats/webgpu/core/wgsl/buildWgslSet.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js +39 -13
- package/dist/resource/formats/webgpu/core/wgsl/lowerBindingLayout.js.map +1 -1
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js +16 -14
- package/dist/resource/formats/webgpu/core/wgsl/lowerCreateHistogramsComputeProgram.js.map +1 -1
- package/dist/resource/formats/webm/CjsWebmFormat.js +8 -13
- package/dist/resource/formats/webm/CjsWebmFormat.js.map +1 -1
- package/dist/resource/formats/webm/core/helpers.js +3 -5
- package/dist/resource/formats/webm/core/helpers.js.map +1 -1
- package/dist/resource/formats/webp/CjsWebpFormat.js +8 -12
- package/dist/resource/formats/webp/CjsWebpFormat.js.map +1 -1
- package/dist/resource/formats/wem/CjsWemFormat.js +9 -17
- package/dist/resource/formats/wem/CjsWemFormat.js.map +1 -1
- package/dist/resource/formats/wem/core/bitStream.js +35 -35
- package/dist/resource/formats/wem/core/bitStream.js.map +1 -1
- package/dist/resource/formats/wem/core/helpers.js +1 -3
- package/dist/resource/formats/wem/core/helpers.js.map +1 -1
- package/dist/resource/formats/yaml/CjsYamlFormat.js +28 -37
- package/dist/resource/formats/yaml/CjsYamlFormat.js.map +1 -1
- package/dist/resource/imageio/ImageIO.js +142 -0
- package/dist/resource/imageio/ImageIO.js.map +1 -0
- package/dist/resource/imageio/index.js +17 -0
- package/dist/resource/imageio/index.js.map +1 -0
- package/dist/resource/index.js +7 -0
- package/dist/resource/index.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2EffectResource.js +24 -2
- package/dist/resource/shader/reflection/Tr2EffectResource.js.map +1 -1
- package/dist/resource/shader/reflection/Tr2Pass.js +76 -5
- package/dist/resource/shader/reflection/Tr2Pass.js.map +1 -1
- package/dist/resource/texture/CjsTextureArrayConstructor.js +97 -0
- package/dist/resource/texture/CjsTextureArrayConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js +160 -0
- package/dist/resource/texture/CjsTexturePackConstructor.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js +72 -0
- package/dist/resource/texture/CjsTexturePipelineStepArray.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js +73 -0
- package/dist/resource/texture/CjsTexturePipelineStepConvert.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js +71 -0
- package/dist/resource/texture/CjsTexturePipelineStepPack.js.map +1 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js +123 -0
- package/dist/resource/texture/CjsTexturePipelineStepResize.js.map +1 -0
- package/dist/resource/texture/SolidColorTextureConstructor.js +11 -1
- package/dist/resource/texture/SolidColorTextureConstructor.js.map +1 -1
- package/dist/resource/texture/Tr2ImageRes.js +100 -68
- package/dist/resource/texture/Tr2ImageRes.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipeline.js +45 -25
- package/dist/resource/texture/Tr2TexturePipeline.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js +34 -1
- package/dist/resource/texture/Tr2TexturePipelineStepCompress.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js +30 -3
- package/dist/resource/texture/Tr2TexturePipelineStepGenerateMips.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js +81 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLimitSize.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js +36 -1
- package/dist/resource/texture/Tr2TexturePipelineStepLoad.js.map +1 -1
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js +146 -24
- package/dist/resource/texture/Tr2TexturePipelineStepPack.js.map +1 -1
- package/dist/resource/texture/TriTextureRes.js +151 -29
- package/dist/resource/texture/TriTextureRes.js.map +1 -1
- package/dist/resource/texture/index.js +7 -0
- package/dist/resource/texture/index.js.map +1 -1
- package/dist/resource/texture/registerTextureResources.js +83 -0
- package/dist/resource/texture/registerTextureResources.js.map +1 -0
- package/dist/resource/texture/solidColorTexture.js +10 -19
- package/dist/resource/texture/solidColorTexture.js.map +1 -1
- package/dist/sof/EveSOF.js +39 -7
- package/dist/sof/EveSOF.js.map +1 -1
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js +2 -2
- package/dist/trinity/core/Tr2GpuResourcePool/Tr2GpuResourcePool.js.map +1 -1
- package/dist/trinity/core/Tr2ImageIOHelpers.js +80 -17
- package/dist/trinity/core/Tr2ImageIOHelpers.js.map +1 -1
- package/dist/trinity/core/Tr2RenderUtils.js +1 -1
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js +49 -62
- package/dist/trinity/core/Tr2TextureArray/Tr2TextureArray.js.map +1 -1
- package/dist/trinity/core/Tr2TextureReference.js +114 -0
- package/dist/trinity/core/Tr2TextureReference.js.map +1 -0
- package/dist/trinity/core/device/Tr2DepthStencil.js +2 -2
- package/dist/trinity/core/device/Tr2DepthStencil.js.map +1 -1
- package/dist/trinity/core/device/Tr2RingBuffer/Tr2RingBuffer.js +1 -1
- package/dist/trinity/core/index.js +1 -0
- package/dist/trinity/core/index.js.map +1 -1
- package/dist/trinity/core/lighting/Tr2LightManager.js +5 -4
- package/dist/trinity/core/lighting/Tr2LightManager.js.map +1 -1
- package/dist/trinity/core/procedural/GradientTextureConstructor.js +5 -4
- package/dist/trinity/core/procedural/GradientTextureConstructor.js.map +1 -1
- package/dist/trinity/core/procedural/gradientTexture.js +10 -13
- package/dist/trinity/core/procedural/gradientTexture.js.map +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js +1 -1
- package/dist/trinity/core/volumetrics/Tr2VolumetricsRenderer.js.map +1 -1
- package/dist/trinity/eve/EveImpactOverlay.js +102 -50
- package/dist/trinity/eve/EveImpactOverlay.js.map +1 -1
- package/dist/trinity/eve/EveModularObjectModifier.js +9 -18
- package/dist/trinity/eve/EveModularObjectModifier.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js +175 -157
- package/dist/trinity/eve/attachment/turrets/EveTurretSet.js.map +1 -1
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js +100 -83
- package/dist/trinity/eve/attachment/turrets/EveTurretTarget.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js +26 -20
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js +368 -179
- package/dist/trinity/eve/child/EveChildInstancedMeshes/EveChildInstancedMeshes.js.map +1 -1
- package/dist/trinity/eve/child/EveChildMesh.js +242 -234
- package/dist/trinity/eve/child/EveChildMesh.js.map +1 -1
- package/dist/trinity/eve/child/EveChildTurret.js +57 -16
- package/dist/trinity/eve/child/EveChildTurret.js.map +1 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js +28 -1
- package/dist/trinity/eve/child/EveSpaceObjectChild.js.map +1 -1
- package/dist/trinity/eve/index.js +2 -2
- package/dist/trinity/eve/overlays/EveDamageOverlay.js +5 -1
- package/dist/trinity/eve/overlays/EveDamageOverlay.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceScene.js +234 -233
- package/dist/trinity/eve/scene/EveSpaceScene.js.map +1 -1
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js +2 -0
- package/dist/trinity/eve/scene/EveSpaceSceneRenderDriver.js.map +1 -1
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js +492 -437
- package/dist/trinity/eve/spaceObject/EveSpaceObject2.js.map +1 -1
- package/dist/trinity/generated/index.js +0 -1
- package/dist/trinity/generated/index.js.map +1 -1
- package/dist/trinity/generated/trinityCore/index.js +0 -1
- package/dist/trinity/generated/trinityCore/index.js.map +1 -1
- package/dist/trinity/index.js +3 -3
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js +10 -1
- package/dist/trinity/particle/emitter/Tr2GpuSharedEmitter.js.map +1 -1
- package/dist/trinity/shader/Tr2DataTextureManager.js +152 -66
- package/dist/trinity/shader/Tr2DataTextureManager.js.map +1 -1
- package/dist/trinity/shader/Tr2Material.js +1 -1
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js +5 -5
- package/dist/trinityal/Tr2HalHelperStructures/Tr2TextureSubresource.js.map +1 -1
- package/dist/trinityal/index.js +1 -1
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js +2 -2
- package/dist/trinityal/stub/Tr2RenderContextALStub/Tr2RenderContextALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2SwapChainALStub.js +45 -45
- package/dist/trinityal/stub/Tr2SwapChainALStub.js.map +1 -1
- package/dist/trinityal/stub/Tr2TextureALStub.js +170 -170
- package/dist/trinityal/stub/Tr2TextureALStub.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js +234 -164
- package/dist/trinityal/webgpu/CjsWebgpuDevice.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js +7 -0
- package/dist/trinityal/webgpu/CjsWebgpuRenderContextAL.js.map +1 -1
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js +78 -14
- package/dist/trinityal/webgpu/CjsWebgpuTextureAL.js.map +1 -1
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js +94 -0
- package/dist/trinityal/webgpu/core/CjsWebgpuUtils.js.map +1 -0
- package/dist/trinityal/webgpu/internal.js +1 -0
- package/dist/trinityal/webgpu/internal.js.map +1 -1
- package/docs/global/reference/classes/README.md +90 -0
- package/docs/resource/concepts/format-capabilities.md +3 -3
- package/docs/resource/formats/README.md +1 -1
- package/docs/resource/reference/classes/core.md +31 -1
- package/docs/resource/reference/classes/formats.md +7 -7
- package/docs/resource/reference/classes/resources.md +76 -16
- package/docs/trinity/reference/classes/generated.md +0 -10
- package/docs/trinity/reference/classes/trinity-core.md +1692 -1682
- package/docs/trinityal/reference/classes/README.md +0 -10
- package/docs/trinityal/webgpu/reference/classes/README.md +276 -266
- package/package.json +4 -3
- package/dist/global/consts/webgpu/index.js +0 -2
- package/dist/global/consts/webgpu/textureFormats.js +0 -180
- package/dist/global/consts/webgpu/textureFormats.js.map +0 -1
- package/dist/resource/formats/dxbc/core/container.js.map +0 -1
- package/dist/resource/formats/dxbc/core/errors.js.map +0 -1
- package/dist/resource/formats/dxbc/core/program.js.map +0 -1
- package/dist/resource/formats/dxbc/core/signature.js.map +0 -1
- package/dist/resource/formats/stl/core/targets.js.map +0 -1
- package/dist/resource/formats/webgl/core/errors.js.map +0 -1
- package/dist/resource/formats/webgl/core/glsl/DxbcGlslHelpers.js.map +0 -1
- package/dist/resource/formats/webgpu/core/errors.js.map +0 -1
- package/dist/resource/texture/texturePipelineBehavior.js +0 -332
- package/dist/resource/texture/texturePipelineBehavior.js.map +0 -1
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js +0 -40
- package/dist/trinity/generated/trinityCore/Tr2TextureReference.js.map +0 -1
- package/dist/trinityal/Tr2BitmapDimensions.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lowerDxbcToIr.js","sources":["../../../../../../../src/resource/formats/webgpu/core/ir/lowerDxbcToIr.js"],"sourcesContent":["import { clonePlain } from \"#utils/object\";\nimport CjsDxbcFormat from \"../../../dxbc/index.js\";\nimport { analyzeRegisterValues, operandRoles } from \"./analyzeRegisterValues.js\";\nimport { buildControlFlow } from \"./buildControlFlow.js\";\nimport { resolveRegisterFlow } from \"./resolveRegisterFlow.js\";\nimport { inferValueTypes, SCALAR_TYPES } from \"./inferValueTypes.js\";\n\nexport const SHADER_IR_FORMAT = \"CJS_SHADER_IR\";\nexport const SHADER_IR_VERSION = 1;\nconst PRECISE_MASK = /^x?y?z?w?$/u;\n\nconst BINDING_KINDS = Object.freeze({\n dcl_constant_buffer: \"uniform-buffer\",\n dcl_sampler: \"sampler\",\n dcl_resource: \"sampled-resource\",\n dcl_resource_raw: \"sampled-resource\",\n dcl_resource_structured: \"sampled-resource\",\n dcl_unordered_access_view_typed: \"storage-resource\",\n dcl_unordered_access_view_raw: \"storage-resource\",\n dcl_unordered_access_view_structured: \"storage-resource\"\n});\n\nconst BLOCK_BEFORE = new Set([ \"loop\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\" ]);\nconst BLOCK_AFTER = new Set([\n \"if\", \"loop\", \"switch\", \"break\", \"breakc\", \"continue\", \"continuec\",\n \"ret\", \"retc\", \"discard\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\"\n]);\n\nfunction readDecoded(input, options)\n{\n if (input instanceof Uint8Array || input instanceof ArrayBuffer || ArrayBuffer.isView(input))\n {\n const raw = CjsDxbcFormat.read(input, {\n emit: CjsDxbcFormat.OUTPUT_RAW,\n source: options.source || \"memory\",\n decodeInstructions: true\n });\n return {\n program: raw.program,\n instructions: raw.decoder?.instructions || [],\n signatures: {\n input: raw.inputSignature?.elements || [],\n output: raw.outputSignature?.elements || [],\n patch: raw.patchSignature?.elements || []\n }\n };\n }\n if (input?.program && input?.decoder)\n {\n return {\n program: input.program,\n instructions: input.decoder.instructions || [],\n signatures: {\n input: input.inputSignature?.elements || input.signatures?.input || [],\n output: input.outputSignature?.elements || input.signatures?.output || [],\n patch: input.patchSignature?.elements || input.signatures?.patch || []\n }\n };\n }\n if (input?.program && Array.isArray(input.instructions))\n {\n return { program: input.program, instructions: input.instructions, signatures: input.signatures || {} };\n }\n throw new TypeError(\"CjsWebgpuFormat.BuildShaderIr: expected DXBC bytes or decoded program/instructions\");\n}\n\nfunction normalizedRange(declaration)\n{\n if (declaration.bindingRange) return clonePlain(declaration.bindingRange);\n const registerIndex = declaration.registerIndex ?? null;\n return {\n bindingModel: \"sm5.0-register\",\n rangeId: null,\n lowerBound: registerIndex,\n upperBound: registerIndex,\n unbounded: false,\n registerCount: registerIndex === null ? 0 : 1,\n registerSpace: 0\n };\n}\n\nfunction buildBinding(instruction)\n{\n const resourceKind = BINDING_KINDS[instruction.opcodeName];\n if (!resourceKind) return null;\n const declaration = instruction.declaration || {};\n const range = normalizedRange(declaration);\n return {\n kind: \"binding\",\n id: `${resourceKind}:space${range.registerSpace}:range${range.rangeId ?? range.lowerBound}`,\n resourceKind,\n operandType: instruction.operands?.[0]?.typeName || null,\n declarationOffset: instruction.offset,\n registerIndex: declaration.registerIndex ?? range.lowerBound,\n range,\n accessPattern: declaration.accessPattern || null,\n resourceDimension: declaration.resourceDimensionName || null,\n structureStride: declaration.structureStride ?? null,\n returnType: clonePlain(declaration.returnType || null)\n };\n}\n\nfunction controlKind(opcodeName)\n{\n if ([ \"if\", \"else\", \"endif\" ].includes(opcodeName)) return \"selection\";\n if ([ \"loop\", \"endloop\", \"break\", \"breakc\", \"continue\", \"continuec\" ].includes(opcodeName)) return \"loop\";\n if ([ \"switch\", \"case\", \"default\", \"endswitch\" ].includes(opcodeName)) return \"switch\";\n if ([ \"ret\", \"retc\", \"discard\", \"abort\" ].includes(opcodeName)) return \"termination\";\n return null;\n}\n\nconst COMPONENT_ORDER = [ \"x\", \"y\", \"z\", \"w\" ];\nconst FLOAT_VIEW = new DataView(new ArrayBuffer(4));\n\nfunction immediateRecord(value)\n{\n const bits = (value?.uint32 ?? 0) >>> 0;\n FLOAT_VIEW.setUint32(0, bits);\n return { uint32: bits, float32: FLOAT_VIEW.getFloat32(0) };\n}\n\n/**\n * Recognizes indexable temps that are immutable constant tables: every write\n * is a straight-line pre-control-flow `mov x#[slot].mask, l(...)` immediate,\n * and at least one access uses relative addressing. Such registers lower to a\n * module-scope WGSL `const` array (the same shape as the DXBC icb), so their\n * dynamic reads never need mutable-register SSA. Any relative indexable-temp\n * usage that does not fit this shape fails closed here with a diagnostic.\n *\n * @param {object[]} declarationInstructions Decoded declaration instructions.\n * @param {object[]} executable Decoded executable instructions.\n * @returns {{tables: object[]|null, removed: Set<number>|null}} Tables and initializer indices.\n */\nfunction extractConstTables(declarationInstructions, executable)\n{\n const declared = new Map();\n const duplicateDeclarations = new Set();\n for (const declaration of declarationInstructions)\n {\n if (declaration.opcodeName !== \"dcl_indexable_temp\") continue;\n const data = declaration.declaration || {};\n if (declared.has(data.registerIndex)) duplicateDeclarations.add(data.registerIndex);\n declared.set(data.registerIndex, {\n slotCount: data.registerCount,\n componentCount: data.componentCount\n });\n }\n\n const touched = new Map();\n const entryFor = (registerIndex) =>\n {\n let entry = touched.get(registerIndex);\n if (!entry)\n {\n entry = { writes: [], hasRelative: false, invalid: null };\n touched.set(registerIndex, entry);\n }\n return entry;\n };\n const invalidate = (entry, reason) =>\n {\n if (!entry.invalid) entry.invalid = reason;\n };\n let firstControl = executable.findIndex((instruction) => controlKind(instruction.opcodeName) !== null);\n if (firstControl < 0) firstControl = executable.length;\n\n executable.forEach((instruction, instructionIndex) =>\n {\n operandRoles(instruction).forEach(({ operand, role }, operandIndex) =>\n {\n if (operand.typeName !== \"indexable_temp\") return;\n const indices = operand.indices || [];\n const registerIndex = indices[0]?.values?.[0];\n const entry = entryFor(registerIndex);\n if (indices.length !== 2 || indices[0]?.relative\n || indices[0]?.values?.length !== 1\n || !Number.isInteger(registerIndex) || registerIndex < 0\n || operand.registerIndex !== registerIndex)\n {\n return invalidate(entry, \"requires one consistent fixed register identity and [register][slot] addressing\");\n }\n if (indices[1]?.relative) entry.hasRelative = true;\n\n if (role === \"source\")\n {\n const lanes = operand.selected\n ? [ operand.selected ]\n : operand.swizzle\n ? Array.from(new Set(operand.swizzle))\n : COMPONENT_ORDER.slice();\n entry.reads = entry.reads || [];\n entry.reads.push({ instructionIndex, lanes });\n return;\n }\n\n // Destination use: only straight-line immediate table initializers\n // are representable; anything else is a mutable indexable temp.\n const source = instruction.operands?.[1];\n const slot = indices[1]?.values?.[0];\n if (instruction.opcodeName !== \"mov\" || instruction.saturate)\n {\n return invalidate(entry, \"is only writable by non-saturating mov initializers\");\n }\n if (instructionIndex >= firstControl)\n {\n return invalidate(entry, \"initializers must precede all control flow\");\n }\n if (indices[1]?.relative || indices[1]?.values?.length !== 1\n || !Number.isInteger(slot) || slot < 0)\n {\n return invalidate(entry, \"initializers require an immediate slot index\");\n }\n if (source?.typeName !== \"immediate32\" || (source.modifierName || \"none\") !== \"none\"\n || ![ 1, 4 ].includes(source.immediateValues?.length ?? 0))\n {\n return invalidate(entry, \"initializers require immediate32 sources\");\n }\n if ((operand.modifierName || \"none\") !== \"none\"\n || (operand.minPrecisionName || \"default\") !== \"default\"\n || (source.minPrecisionName || \"default\") !== \"default\"\n || instruction.extensions?.length)\n {\n return invalidate(entry, \"initializers require canonical default-precision mov operands\");\n }\n if (!operand.mask || operand.swizzle || operand.selected || source.mask\n || (source.swizzle && source.selected)\n || (source.selected && !COMPONENT_ORDER.includes(source.selected))\n || (source.swizzle && (source.swizzle.length !== 4\n || Array.from(source.swizzle).some((lane) => !COMPONENT_ORDER.includes(lane)))))\n {\n return invalidate(entry, \"initializers require canonical destination and source component selection\");\n }\n const valuesByLane = {};\n for (const lane of operand.mask)\n {\n const destinationLane = COMPONENT_ORDER.indexOf(lane);\n const sourceLane = source.selected || source.swizzle?.[destinationLane] || lane;\n const sourceLaneIndex = COMPONENT_ORDER.indexOf(sourceLane);\n const value = source.immediateValues.length === 1\n ? source.immediateValues[0]\n : source.immediateValues[sourceLaneIndex];\n if (!value)\n {\n return invalidate(entry, \"an initializer selects an unavailable immediate lane\");\n }\n valuesByLane[lane] = value;\n }\n entry.writes.push({ instructionIndex, slot, mask: operand.mask, valuesByLane });\n });\n });\n\n const tables = [];\n const removed = new Set();\n\n for (const [ registerIndex, entry ] of touched)\n {\n if (!entry.hasRelative) continue;\n const declaration = declared.get(registerIndex);\n const describe = (reason) => new Error(\n `Shader IR indexable temp x${registerIndex} relative addressing is not supported: ${reason}`);\n if (entry.invalid) throw describe(entry.invalid);\n if (duplicateDeclarations.has(registerIndex)) throw describe(\"it has duplicate declarations\");\n if (!declaration || !Number.isInteger(declaration.slotCount) || declaration.slotCount < 1)\n {\n throw describe(\"it has no usable declaration\");\n }\n if (!Number.isInteger(declaration.componentCount)\n || declaration.componentCount < 1 || declaration.componentCount > 4)\n {\n throw describe(\"it has an invalid component count\");\n }\n const lastWrite = Math.max(...entry.writes.map((write) => write.instructionIndex));\n const firstRead = Math.min(...(entry.reads || []).map((read) => read.instructionIndex));\n if (lastWrite >= firstRead)\n {\n throw describe(\"all initializers must precede every read\");\n }\n\n const laneMask = entry.writes[0]?.mask;\n if (Array.from(laneMask || \"\").some((lane) =>\n COMPONENT_ORDER.indexOf(lane) >= declaration.componentCount))\n {\n throw describe(\"an initializer writes outside the declared component range\");\n }\n const rows = Array.from({ length: declaration.slotCount }, () =>\n COMPONENT_ORDER.map(() => null));\n for (const write of entry.writes)\n {\n if (write.mask !== laneMask) throw describe(\"initializers must share one write mask\");\n if (write.slot < 0 || write.slot >= declaration.slotCount)\n {\n throw describe(\"an initializer writes outside the declared range\");\n }\n for (const lane of write.mask)\n {\n const laneIndex = COMPONENT_ORDER.indexOf(lane);\n if (rows[write.slot][laneIndex] !== null) throw describe(\"a slot lane is written twice\");\n rows[write.slot][laneIndex] = immediateRecord(write.valuesByLane[lane]);\n }\n removed.add(write.instructionIndex);\n }\n for (const [ slot, row ] of rows.entries())\n {\n for (const lane of laneMask || \"\")\n {\n if (row[COMPONENT_ORDER.indexOf(lane)] === null)\n {\n throw describe(`slot ${slot} is never fully written`);\n }\n }\n }\n for (const read of entry.reads || [])\n {\n if (read.lanes.some((lane) => !(laneMask || \"\").includes(lane)))\n {\n throw describe(\"a read selects lanes the table never writes\");\n }\n }\n\n tables.push({\n kind: \"const-table\",\n registerIndex,\n symbol: `xt${registerIndex}`,\n slotCount: declaration.slotCount,\n laneMask: laneMask || \"\",\n rows: rows.map((row) => row.map((value) => value ?? { uint32: 0, float32: 0 }))\n });\n }\n\n return tables.length ? { tables, removed } : { tables: null, removed: null };\n}\n\nfunction buildInstruction(instruction, index)\n{\n return {\n kind: \"instruction\",\n index,\n dxbcOffset: instruction.offset,\n opcode: instruction.opcode,\n opcodeName: instruction.opcodeName,\n controlKind: controlKind(instruction.opcodeName),\n testBoolean: instruction.testBoolean || null,\n saturate: !!instruction.saturate,\n preciseMask: instruction.preciseMask || \"\",\n ...(instruction.opcodeName === \"resinfo\"\n ? { resinfoReturnTypeName: instruction.resinfoReturnTypeName || \"float\" }\n : {}),\n ...(instruction.opcodeName === \"sync\"\n ? {\n syncFlags: Number.isInteger(instruction.syncFlags)\n ? instruction.syncFlags\n : null,\n syncFlagNames: Array.isArray(instruction.syncFlagNames)\n ? clonePlain(instruction.syncFlagNames)\n : null\n }\n : {}),\n ...(instruction.extensions?.length\n ? { extensions: clonePlain(instruction.extensions) }\n : {}),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {}),\n operands: clonePlain(instruction.operands || [])\n };\n}\n\nfunction buildBlocks(instructions)\n{\n if (instructions.length === 0) return [];\n const leaders = new Set([ 0 ]);\n for (let index = 0; index < instructions.length; index += 1)\n {\n if (BLOCK_BEFORE.has(instructions[index].opcodeName)) leaders.add(index);\n if (BLOCK_AFTER.has(instructions[index].opcodeName) && index + 1 < instructions.length) leaders.add(index + 1);\n }\n\n const starts = Array.from(leaders).sort((a, b) => a - b);\n return starts.map((start, blockIndex) =>\n {\n const end = (starts[blockIndex + 1] ?? instructions.length) - 1;\n const last = instructions[end];\n return {\n kind: \"basic-block\",\n id: `block${blockIndex}`,\n index: blockIndex,\n startInstruction: start,\n endInstruction: end,\n startDxbcOffset: instructions[start].dxbcOffset,\n endDxbcOffset: last.dxbcOffset,\n instructionIndices: Array.from({ length: end - start + 1 }, (_, offset) => start + offset),\n terminator: last.controlKind ? last.opcodeName : null\n };\n });\n}\n\nfunction validateProgram(program)\n{\n if (!program.stage || !Number.isInteger(program.shaderModel.major))\n {\n throw new Error(\"Invalid shader IR program identity\");\n }\n for (let index = 1; index < program.instructions.length; index += 1)\n {\n if (program.instructions[index].dxbcOffset <= program.instructions[index - 1].dxbcOffset)\n {\n throw new Error(\"Shader IR instruction offsets must be strictly increasing\");\n }\n }\n const covered = program.blocks.flatMap((block) => block.instructionIndices);\n if (covered.length !== program.instructions.length || covered.some((value, index) => value !== index))\n {\n throw new Error(\"Shader IR basic blocks must cover every executable instruction exactly once\");\n }\n const blockIds = new Set(program.blocks.map((block) => block.id));\n for (const block of program.blocks)\n {\n if (block.successors.some((edge) => !blockIds.has(edge.blockId)))\n {\n throw new Error(\"Shader IR control-flow edge references an unknown block\");\n }\n for (const edge of block.successors)\n {\n const successor = program.blocks.find((entry) => entry.id === edge.blockId);\n if (!successor.predecessors.some((entry) => entry.blockId === block.id && entry.kind === edge.kind))\n {\n throw new Error(\"Shader IR control-flow successor/predecessor edges must be symmetric\");\n }\n }\n }\n const bindingIds = new Set();\n for (const binding of program.bindings)\n {\n if (bindingIds.has(binding.id)) throw new Error(`Duplicate shader IR binding ${binding.id}`);\n bindingIds.add(binding.id);\n }\n const valueIds = new Set(program.values.map((value) => value.id));\n const valuesById = new Map(program.values.map((value) => [ value.id, value ]));\n if (valueIds.size !== program.values.length) throw new Error(\"Shader IR register value ids must be unique\");\n for (const block of program.blocks)\n {\n if (block.inputValueIds.some((id) => !valueIds.has(id)))\n {\n throw new Error(\"Shader IR block input references an unknown value\");\n }\n if (block.outputValues.some((output) => !valueIds.has(output.ref.valueId)))\n {\n throw new Error(\"Shader IR block output references an unknown value\");\n }\n if (block.mergeSite?.valueIds?.some((id) =>\n !valueIds.has(id)\n || valuesById.get(id).origin !== \"control-flow-merge\"\n || valuesById.get(id).blockId !== block.id))\n {\n throw new Error(\"Shader IR merge site references an invalid merge value\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.dataflow) throw new Error(\"Shader IR instruction is missing register dataflow\");\n const refs = [\n ...instruction.dataflow.reads.flatMap((read) => read.refs),\n ...instruction.dataflow.writes.flatMap((write) => [\n { valueId: write.valueId },\n ...Object.values(write.previous || {}),\n ...Object.values(write.result || {})\n ])\n ];\n if (refs.some((ref) => !valueIds.has(ref.valueId)))\n {\n throw new Error(\"Shader IR register dataflow references an unknown value\");\n }\n }\n for (const value of program.values)\n {\n if (value.origin === \"block-input\") throw new Error(\"Shader IR contains an unresolved block input\");\n if (value.origin === \"control-flow-merge\")\n {\n if (value.incoming.length < 2) throw new Error(\"Shader IR merge value must have at least two incoming values\");\n if (value.incoming.some((incoming) => !valueIds.has(incoming.valueId)))\n {\n throw new Error(\"Shader IR merge value references an unknown incoming value\");\n }\n if (value.incoming.some((incoming) =>\n incoming.component !== value.writeMask\n || valuesById.get(incoming.valueId).register !== value.register))\n {\n throw new Error(\"Shader IR merge value has an incompatible incoming register component\");\n }\n }\n if (!value.componentTypes || Object.values(value.componentTypes).some((type) => !SCALAR_TYPES.includes(type)))\n {\n throw new Error(\"Shader IR register value has an invalid component type\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.typeInfo) throw new Error(\"Shader IR instruction is missing type information\");\n if (typeof instruction.preciseMask !== \"string\" || !PRECISE_MASK.test(instruction.preciseMask))\n {\n throw new Error(`Shader IR instruction ${instruction.index} has an invalid precise component mask`);\n }\n if (instruction.typeInfo.bitcasts.some((bitcast) =>\n !SCALAR_TYPES.includes(bitcast.from) || !SCALAR_TYPES.includes(bitcast.to)))\n {\n throw new Error(\"Shader IR instruction has an invalid bitcast type\");\n }\n }\n}\n\n/**\n * Lowers decoded DXBC framing into the stable front-end shader IR.\n * Type inference and SSA value reconstruction are later passes.\n *\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView|object} input DXBC bytes or decoded result.\n * @param {object} [options] IR provenance options.\n * @returns {object} Frozen, validated shader IR program.\n */\nexport function lowerDxbcToIr(input, options = {})\n{\n const decoded = readDecoded(input, options);\n if (!decoded.program) throw new Error(\"DXBC input has no shader program\");\n\n const declarationInstructions = decoded.instructions.filter((instruction) => instruction.isDeclaration);\n let executable = decoded.instructions.filter((instruction) => !instruction.isDeclaration);\n const constTableExtraction = extractConstTables(declarationInstructions, executable);\n if (constTableExtraction.removed)\n {\n executable = executable.filter((_, index) => !constTableExtraction.removed.has(index));\n }\n const instructions = executable.map(buildInstruction);\n const icbInstruction = declarationInstructions.find((instruction) => instruction.customData?.immediateConstantBuffer);\n const immediateConstantBuffer = icbInstruction\n ? clonePlain(icbInstruction.customData.immediateConstantBuffer)\n : null;\n const program = {\n kind: \"shader-program\",\n format: SHADER_IR_FORMAT,\n formatVersion: SHADER_IR_VERSION,\n source: options.source || decoded.program.source || \"memory\",\n stage: decoded.program.programTypeName,\n programType: decoded.program.programType,\n shaderModel: {\n major: decoded.program.majorVersion,\n minor: decoded.program.minorVersion\n },\n signatures: {\n input: clonePlain(decoded.signatures?.input || []),\n output: clonePlain(decoded.signatures?.output || []),\n patch: clonePlain(decoded.signatures?.patch || [])\n },\n declarations: declarationInstructions.map((instruction) => ({\n kind: \"declaration\",\n dxbcOffset: instruction.offset,\n opcodeName: instruction.opcodeName,\n data: clonePlain(instruction.declaration),\n operands: clonePlain(instruction.operands || []),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {})\n })),\n bindings: declarationInstructions.map(buildBinding).filter(Boolean),\n immediateConstantBuffer,\n constTables: constTableExtraction.tables,\n instructions,\n blocks: buildBlocks(instructions)\n };\n buildControlFlow(program);\n analyzeRegisterValues(program);\n resolveRegisterFlow(program);\n inferValueTypes(program);\n validateProgram(program);\n return program;\n}\n"],"names":["SHADER_IR_FORMAT","SHADER_IR_VERSION","PRECISE_MASK","BINDING_KINDS","Object","freeze","dcl_constant_buffer","dcl_sampler","dcl_resource","dcl_resource_raw","dcl_resource_structured","dcl_unordered_access_view_typed","dcl_unordered_access_view_raw","dcl_unordered_access_view_structured","BLOCK_BEFORE","Set","BLOCK_AFTER","readDecoded","input","options","Uint8Array","ArrayBuffer","isView","raw","CjsDxbcFormat","read","emit","OUTPUT_RAW","source","decodeInstructions","program","instructions","decoder","signatures","inputSignature","elements","output","outputSignature","patch","patchSignature","Array","isArray","TypeError","normalizedRange","declaration","bindingRange","clonePlain","registerIndex","bindingModel","rangeId","lowerBound","upperBound","unbounded","registerCount","registerSpace","buildBinding","instruction","resourceKind","opcodeName","range","kind","id","operandType","operands","typeName","declarationOffset","offset","accessPattern","resourceDimension","resourceDimensionName","structureStride","returnType","controlKind","includes","COMPONENT_ORDER","FLOAT_VIEW","DataView","immediateRecord","value","bits","uint32","setUint32","float32","getFloat32","extractConstTables","declarationInstructions","executable","declared","Map","duplicateDeclarations","data","has","add","set","slotCount","componentCount","touched","entryFor","entry","get","writes","hasRelative","invalid","invalidate","reason","firstControl","findIndex","length","forEach","instructionIndex","operandRoles","operand","role","operandIndex","indices","values","relative","Number","isInteger","lanes","selected","swizzle","from","slice","reads","push","slot","saturate","modifierName","immediateValues","minPrecisionName","extensions","mask","some","lane","valuesByLane","destinationLane","indexOf","sourceLane","sourceLaneIndex","tables","removed","describe","Error","lastWrite","Math","max","map","write","firstRead","min","laneMask","rows","laneIndex","row","entries","symbol","buildInstruction","index","dxbcOffset","opcode","testBoolean","preciseMask","resinfoReturnTypeName","syncFlags","syncFlagNames","tailTokens","buildBlocks","leaders","starts","sort","a","b","start","blockIndex","end","last","startInstruction","endInstruction","startDxbcOffset","endDxbcOffset","instructionIndices","_","terminator","validateProgram","stage","shaderModel","major","covered","blocks","flatMap","block","blockIds","successors","edge","blockId","successor","find","predecessors","bindingIds","binding","bindings","valueIds","valuesById","size","inputValueIds","outputValues","ref","valueId","mergeSite","origin","dataflow","refs","previous","result","incoming","component","writeMask","register","componentTypes","type","SCALAR_TYPES","typeInfo","test","bitcasts","bitcast","to","lowerDxbcToIr","decoded","filter","isDeclaration","constTableExtraction","icbInstruction","customData","immediateConstantBuffer","format","formatVersion","programTypeName","programType","majorVersion","minor","minorVersion","declarations","Boolean","constTables","buildControlFlow","analyzeRegisterValues","resolveRegisterFlow","inferValueTypes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lowerDxbcToIr.js","sources":["../../../../../../../src/resource/formats/webgpu/core/ir/lowerDxbcToIr.js"],"sourcesContent":["import { clonePlain } from \"#utils/object\";\nimport CjsDxbcFormat from \"../../../dxbc/index.js\";\nimport { analyzeRegisterValues, operandRoles } from \"./analyzeRegisterValues.js\";\nimport { buildControlFlow } from \"./buildControlFlow.js\";\nimport { resolveRegisterFlow } from \"./resolveRegisterFlow.js\";\nimport { inferValueTypes, SCALAR_TYPES } from \"./inferValueTypes.js\";\n\nexport const SHADER_IR_FORMAT = \"CJS_SHADER_IR\";\nexport const SHADER_IR_VERSION = 1;\nconst PRECISE_MASK = /^x?y?z?w?$/u;\n\nconst BINDING_KINDS = Object.freeze({\n dcl_constant_buffer: \"uniform-buffer\",\n dcl_sampler: \"sampler\",\n dcl_resource: \"sampled-resource\",\n dcl_resource_raw: \"sampled-resource\",\n dcl_resource_structured: \"sampled-resource\",\n dcl_unordered_access_view_typed: \"storage-resource\",\n dcl_unordered_access_view_raw: \"storage-resource\",\n dcl_unordered_access_view_structured: \"storage-resource\"\n});\n\nconst BLOCK_BEFORE = new Set([ \"loop\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\" ]);\nconst BLOCK_AFTER = new Set([\n \"if\", \"loop\", \"switch\", \"break\", \"breakc\", \"continue\", \"continuec\",\n \"ret\", \"retc\", \"discard\", \"else\", \"endif\", \"endloop\", \"case\", \"default\", \"endswitch\"\n]);\n\nfunction readDecoded(input, options)\n{\n if (input instanceof Uint8Array || input instanceof ArrayBuffer || ArrayBuffer.isView(input))\n {\n const raw = CjsDxbcFormat.read(input, {\n emit: \"raw\",\n source: options.source || \"memory\",\n decodeInstructions: true\n });\n return {\n program: raw.program,\n instructions: raw.decoder?.instructions || [],\n signatures: {\n input: raw.inputSignature?.elements || [],\n output: raw.outputSignature?.elements || [],\n patch: raw.patchSignature?.elements || []\n }\n };\n }\n if (input?.program && input?.decoder)\n {\n return {\n program: input.program,\n instructions: input.decoder.instructions || [],\n signatures: {\n input: input.inputSignature?.elements || input.signatures?.input || [],\n output: input.outputSignature?.elements || input.signatures?.output || [],\n patch: input.patchSignature?.elements || input.signatures?.patch || []\n }\n };\n }\n if (input?.program && Array.isArray(input.instructions))\n {\n return { program: input.program, instructions: input.instructions, signatures: input.signatures || {} };\n }\n throw new TypeError(\"CjsWebgpuFormat.BuildShaderIr: expected DXBC bytes or decoded program/instructions\");\n}\n\nfunction normalizedRange(declaration)\n{\n if (declaration.bindingRange) return clonePlain(declaration.bindingRange);\n const registerIndex = declaration.registerIndex ?? null;\n return {\n bindingModel: \"sm5.0-register\",\n rangeId: null,\n lowerBound: registerIndex,\n upperBound: registerIndex,\n unbounded: false,\n registerCount: registerIndex === null ? 0 : 1,\n registerSpace: 0\n };\n}\n\nfunction buildBinding(instruction)\n{\n const resourceKind = BINDING_KINDS[instruction.opcodeName];\n if (!resourceKind) return null;\n const declaration = instruction.declaration || {};\n const range = normalizedRange(declaration);\n return {\n kind: \"binding\",\n id: `${resourceKind}:space${range.registerSpace}:range${range.rangeId ?? range.lowerBound}`,\n resourceKind,\n operandType: instruction.operands?.[0]?.typeName || null,\n declarationOffset: instruction.offset,\n registerIndex: declaration.registerIndex ?? range.lowerBound,\n range,\n accessPattern: declaration.accessPattern || null,\n resourceDimension: declaration.resourceDimensionName || null,\n structureStride: declaration.structureStride ?? null,\n returnType: clonePlain(declaration.returnType || null)\n };\n}\n\nfunction controlKind(opcodeName)\n{\n if ([ \"if\", \"else\", \"endif\" ].includes(opcodeName)) return \"selection\";\n if ([ \"loop\", \"endloop\", \"break\", \"breakc\", \"continue\", \"continuec\" ].includes(opcodeName)) return \"loop\";\n if ([ \"switch\", \"case\", \"default\", \"endswitch\" ].includes(opcodeName)) return \"switch\";\n if ([ \"ret\", \"retc\", \"discard\", \"abort\" ].includes(opcodeName)) return \"termination\";\n return null;\n}\n\nconst COMPONENT_ORDER = [ \"x\", \"y\", \"z\", \"w\" ];\nconst FLOAT_VIEW = new DataView(new ArrayBuffer(4));\n\nfunction immediateRecord(value)\n{\n const bits = (value?.uint32 ?? 0) >>> 0;\n FLOAT_VIEW.setUint32(0, bits);\n return { uint32: bits, float32: FLOAT_VIEW.getFloat32(0) };\n}\n\n/**\n * Recognizes indexable temps that are immutable constant tables: every write\n * is a straight-line pre-control-flow `mov x#[slot].mask, l(...)` immediate,\n * and at least one access uses relative addressing. Such registers lower to a\n * module-scope WGSL `const` array (the same shape as the DXBC icb), so their\n * dynamic reads never need mutable-register SSA. Any relative indexable-temp\n * usage that does not fit this shape fails closed here with a diagnostic.\n *\n * @param {object[]} declarationInstructions Decoded declaration instructions.\n * @param {object[]} executable Decoded executable instructions.\n * @returns {{tables: object[]|null, removed: Set<number>|null}} Tables and initializer indices.\n */\nfunction extractConstTables(declarationInstructions, executable)\n{\n const declared = new Map();\n const duplicateDeclarations = new Set();\n for (const declaration of declarationInstructions)\n {\n if (declaration.opcodeName !== \"dcl_indexable_temp\") continue;\n const data = declaration.declaration || {};\n if (declared.has(data.registerIndex)) duplicateDeclarations.add(data.registerIndex);\n declared.set(data.registerIndex, {\n slotCount: data.registerCount,\n componentCount: data.componentCount\n });\n }\n\n const touched = new Map();\n const entryFor = (registerIndex) =>\n {\n let entry = touched.get(registerIndex);\n if (!entry)\n {\n entry = { writes: [], hasRelative: false, invalid: null };\n touched.set(registerIndex, entry);\n }\n return entry;\n };\n const invalidate = (entry, reason) =>\n {\n if (!entry.invalid) entry.invalid = reason;\n };\n let firstControl = executable.findIndex((instruction) => controlKind(instruction.opcodeName) !== null);\n if (firstControl < 0) firstControl = executable.length;\n\n executable.forEach((instruction, instructionIndex) =>\n {\n operandRoles(instruction).forEach(({ operand, role }, operandIndex) =>\n {\n if (operand.typeName !== \"indexable_temp\") return;\n const indices = operand.indices || [];\n const registerIndex = indices[0]?.values?.[0];\n const entry = entryFor(registerIndex);\n if (indices.length !== 2 || indices[0]?.relative\n || indices[0]?.values?.length !== 1\n || !Number.isInteger(registerIndex) || registerIndex < 0\n || operand.registerIndex !== registerIndex)\n {\n return invalidate(entry, \"requires one consistent fixed register identity and [register][slot] addressing\");\n }\n if (indices[1]?.relative) entry.hasRelative = true;\n\n if (role === \"source\")\n {\n const lanes = operand.selected\n ? [ operand.selected ]\n : operand.swizzle\n ? Array.from(new Set(operand.swizzle))\n : COMPONENT_ORDER.slice();\n entry.reads = entry.reads || [];\n entry.reads.push({ instructionIndex, lanes });\n return;\n }\n\n // Destination use: only straight-line immediate table initializers\n // are representable; anything else is a mutable indexable temp.\n const source = instruction.operands?.[1];\n const slot = indices[1]?.values?.[0];\n if (instruction.opcodeName !== \"mov\" || instruction.saturate)\n {\n return invalidate(entry, \"is only writable by non-saturating mov initializers\");\n }\n if (instructionIndex >= firstControl)\n {\n return invalidate(entry, \"initializers must precede all control flow\");\n }\n if (indices[1]?.relative || indices[1]?.values?.length !== 1\n || !Number.isInteger(slot) || slot < 0)\n {\n return invalidate(entry, \"initializers require an immediate slot index\");\n }\n if (source?.typeName !== \"immediate32\" || (source.modifierName || \"none\") !== \"none\"\n || ![ 1, 4 ].includes(source.immediateValues?.length ?? 0))\n {\n return invalidate(entry, \"initializers require immediate32 sources\");\n }\n if ((operand.modifierName || \"none\") !== \"none\"\n || (operand.minPrecisionName || \"default\") !== \"default\"\n || (source.minPrecisionName || \"default\") !== \"default\"\n || instruction.extensions?.length)\n {\n return invalidate(entry, \"initializers require canonical default-precision mov operands\");\n }\n if (!operand.mask || operand.swizzle || operand.selected || source.mask\n || (source.swizzle && source.selected)\n || (source.selected && !COMPONENT_ORDER.includes(source.selected))\n || (source.swizzle && (source.swizzle.length !== 4\n || Array.from(source.swizzle).some((lane) => !COMPONENT_ORDER.includes(lane)))))\n {\n return invalidate(entry, \"initializers require canonical destination and source component selection\");\n }\n const valuesByLane = {};\n for (const lane of operand.mask)\n {\n const destinationLane = COMPONENT_ORDER.indexOf(lane);\n const sourceLane = source.selected || source.swizzle?.[destinationLane] || lane;\n const sourceLaneIndex = COMPONENT_ORDER.indexOf(sourceLane);\n const value = source.immediateValues.length === 1\n ? source.immediateValues[0]\n : source.immediateValues[sourceLaneIndex];\n if (!value)\n {\n return invalidate(entry, \"an initializer selects an unavailable immediate lane\");\n }\n valuesByLane[lane] = value;\n }\n entry.writes.push({ instructionIndex, slot, mask: operand.mask, valuesByLane });\n });\n });\n\n const tables = [];\n const removed = new Set();\n\n for (const [ registerIndex, entry ] of touched)\n {\n if (!entry.hasRelative) continue;\n const declaration = declared.get(registerIndex);\n const describe = (reason) => new Error(\n `Shader IR indexable temp x${registerIndex} relative addressing is not supported: ${reason}`);\n if (entry.invalid) throw describe(entry.invalid);\n if (duplicateDeclarations.has(registerIndex)) throw describe(\"it has duplicate declarations\");\n if (!declaration || !Number.isInteger(declaration.slotCount) || declaration.slotCount < 1)\n {\n throw describe(\"it has no usable declaration\");\n }\n if (!Number.isInteger(declaration.componentCount)\n || declaration.componentCount < 1 || declaration.componentCount > 4)\n {\n throw describe(\"it has an invalid component count\");\n }\n const lastWrite = Math.max(...entry.writes.map((write) => write.instructionIndex));\n const firstRead = Math.min(...(entry.reads || []).map((read) => read.instructionIndex));\n if (lastWrite >= firstRead)\n {\n throw describe(\"all initializers must precede every read\");\n }\n\n const laneMask = entry.writes[0]?.mask;\n if (Array.from(laneMask || \"\").some((lane) =>\n COMPONENT_ORDER.indexOf(lane) >= declaration.componentCount))\n {\n throw describe(\"an initializer writes outside the declared component range\");\n }\n const rows = Array.from({ length: declaration.slotCount }, () =>\n COMPONENT_ORDER.map(() => null));\n for (const write of entry.writes)\n {\n if (write.mask !== laneMask) throw describe(\"initializers must share one write mask\");\n if (write.slot < 0 || write.slot >= declaration.slotCount)\n {\n throw describe(\"an initializer writes outside the declared range\");\n }\n for (const lane of write.mask)\n {\n const laneIndex = COMPONENT_ORDER.indexOf(lane);\n if (rows[write.slot][laneIndex] !== null) throw describe(\"a slot lane is written twice\");\n rows[write.slot][laneIndex] = immediateRecord(write.valuesByLane[lane]);\n }\n removed.add(write.instructionIndex);\n }\n for (const [ slot, row ] of rows.entries())\n {\n for (const lane of laneMask || \"\")\n {\n if (row[COMPONENT_ORDER.indexOf(lane)] === null)\n {\n throw describe(`slot ${slot} is never fully written`);\n }\n }\n }\n for (const read of entry.reads || [])\n {\n if (read.lanes.some((lane) => !(laneMask || \"\").includes(lane)))\n {\n throw describe(\"a read selects lanes the table never writes\");\n }\n }\n\n tables.push({\n kind: \"const-table\",\n registerIndex,\n symbol: `xt${registerIndex}`,\n slotCount: declaration.slotCount,\n laneMask: laneMask || \"\",\n rows: rows.map((row) => row.map((value) => value ?? { uint32: 0, float32: 0 }))\n });\n }\n\n return tables.length ? { tables, removed } : { tables: null, removed: null };\n}\n\nfunction buildInstruction(instruction, index)\n{\n return {\n kind: \"instruction\",\n index,\n dxbcOffset: instruction.offset,\n opcode: instruction.opcode,\n opcodeName: instruction.opcodeName,\n controlKind: controlKind(instruction.opcodeName),\n testBoolean: instruction.testBoolean || null,\n saturate: !!instruction.saturate,\n preciseMask: instruction.preciseMask || \"\",\n ...(instruction.opcodeName === \"resinfo\"\n ? { resinfoReturnTypeName: instruction.resinfoReturnTypeName || \"float\" }\n : {}),\n ...(instruction.opcodeName === \"sync\"\n ? {\n syncFlags: Number.isInteger(instruction.syncFlags)\n ? instruction.syncFlags\n : null,\n syncFlagNames: Array.isArray(instruction.syncFlagNames)\n ? clonePlain(instruction.syncFlagNames)\n : null\n }\n : {}),\n ...(instruction.extensions?.length\n ? { extensions: clonePlain(instruction.extensions) }\n : {}),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {}),\n operands: clonePlain(instruction.operands || [])\n };\n}\n\nfunction buildBlocks(instructions)\n{\n if (instructions.length === 0) return [];\n const leaders = new Set([ 0 ]);\n for (let index = 0; index < instructions.length; index += 1)\n {\n if (BLOCK_BEFORE.has(instructions[index].opcodeName)) leaders.add(index);\n if (BLOCK_AFTER.has(instructions[index].opcodeName) && index + 1 < instructions.length) leaders.add(index + 1);\n }\n\n const starts = Array.from(leaders).sort((a, b) => a - b);\n return starts.map((start, blockIndex) =>\n {\n const end = (starts[blockIndex + 1] ?? instructions.length) - 1;\n const last = instructions[end];\n return {\n kind: \"basic-block\",\n id: `block${blockIndex}`,\n index: blockIndex,\n startInstruction: start,\n endInstruction: end,\n startDxbcOffset: instructions[start].dxbcOffset,\n endDxbcOffset: last.dxbcOffset,\n instructionIndices: Array.from({ length: end - start + 1 }, (_, offset) => start + offset),\n terminator: last.controlKind ? last.opcodeName : null\n };\n });\n}\n\nfunction validateProgram(program)\n{\n if (!program.stage || !Number.isInteger(program.shaderModel.major))\n {\n throw new Error(\"Invalid shader IR program identity\");\n }\n for (let index = 1; index < program.instructions.length; index += 1)\n {\n if (program.instructions[index].dxbcOffset <= program.instructions[index - 1].dxbcOffset)\n {\n throw new Error(\"Shader IR instruction offsets must be strictly increasing\");\n }\n }\n const covered = program.blocks.flatMap((block) => block.instructionIndices);\n if (covered.length !== program.instructions.length || covered.some((value, index) => value !== index))\n {\n throw new Error(\"Shader IR basic blocks must cover every executable instruction exactly once\");\n }\n const blockIds = new Set(program.blocks.map((block) => block.id));\n for (const block of program.blocks)\n {\n if (block.successors.some((edge) => !blockIds.has(edge.blockId)))\n {\n throw new Error(\"Shader IR control-flow edge references an unknown block\");\n }\n for (const edge of block.successors)\n {\n const successor = program.blocks.find((entry) => entry.id === edge.blockId);\n if (!successor.predecessors.some((entry) => entry.blockId === block.id && entry.kind === edge.kind))\n {\n throw new Error(\"Shader IR control-flow successor/predecessor edges must be symmetric\");\n }\n }\n }\n const bindingIds = new Set();\n for (const binding of program.bindings)\n {\n if (bindingIds.has(binding.id)) throw new Error(`Duplicate shader IR binding ${binding.id}`);\n bindingIds.add(binding.id);\n }\n const valueIds = new Set(program.values.map((value) => value.id));\n const valuesById = new Map(program.values.map((value) => [ value.id, value ]));\n if (valueIds.size !== program.values.length) throw new Error(\"Shader IR register value ids must be unique\");\n for (const block of program.blocks)\n {\n if (block.inputValueIds.some((id) => !valueIds.has(id)))\n {\n throw new Error(\"Shader IR block input references an unknown value\");\n }\n if (block.outputValues.some((output) => !valueIds.has(output.ref.valueId)))\n {\n throw new Error(\"Shader IR block output references an unknown value\");\n }\n if (block.mergeSite?.valueIds?.some((id) =>\n !valueIds.has(id)\n || valuesById.get(id).origin !== \"control-flow-merge\"\n || valuesById.get(id).blockId !== block.id))\n {\n throw new Error(\"Shader IR merge site references an invalid merge value\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.dataflow) throw new Error(\"Shader IR instruction is missing register dataflow\");\n const refs = [\n ...instruction.dataflow.reads.flatMap((read) => read.refs),\n ...instruction.dataflow.writes.flatMap((write) => [\n { valueId: write.valueId },\n ...Object.values(write.previous || {}),\n ...Object.values(write.result || {})\n ])\n ];\n if (refs.some((ref) => !valueIds.has(ref.valueId)))\n {\n throw new Error(\"Shader IR register dataflow references an unknown value\");\n }\n }\n for (const value of program.values)\n {\n if (value.origin === \"block-input\") throw new Error(\"Shader IR contains an unresolved block input\");\n if (value.origin === \"control-flow-merge\")\n {\n if (value.incoming.length < 2) throw new Error(\"Shader IR merge value must have at least two incoming values\");\n if (value.incoming.some((incoming) => !valueIds.has(incoming.valueId)))\n {\n throw new Error(\"Shader IR merge value references an unknown incoming value\");\n }\n if (value.incoming.some((incoming) =>\n incoming.component !== value.writeMask\n || valuesById.get(incoming.valueId).register !== value.register))\n {\n throw new Error(\"Shader IR merge value has an incompatible incoming register component\");\n }\n }\n if (!value.componentTypes || Object.values(value.componentTypes).some((type) => !SCALAR_TYPES.includes(type)))\n {\n throw new Error(\"Shader IR register value has an invalid component type\");\n }\n }\n for (const instruction of program.instructions)\n {\n if (!instruction.typeInfo) throw new Error(\"Shader IR instruction is missing type information\");\n if (typeof instruction.preciseMask !== \"string\" || !PRECISE_MASK.test(instruction.preciseMask))\n {\n throw new Error(`Shader IR instruction ${instruction.index} has an invalid precise component mask`);\n }\n if (instruction.typeInfo.bitcasts.some((bitcast) =>\n !SCALAR_TYPES.includes(bitcast.from) || !SCALAR_TYPES.includes(bitcast.to)))\n {\n throw new Error(\"Shader IR instruction has an invalid bitcast type\");\n }\n }\n}\n\n/**\n * Lowers decoded DXBC framing into the stable front-end shader IR.\n * Type inference and SSA value reconstruction are later passes.\n *\n * @param {Uint8Array|ArrayBuffer|ArrayBufferView|object} input DXBC bytes or decoded result.\n * @param {object} [options] IR provenance options.\n * @returns {object} Frozen, validated shader IR program.\n */\nexport function lowerDxbcToIr(input, options = {})\n{\n const decoded = readDecoded(input, options);\n if (!decoded.program) throw new Error(\"DXBC input has no shader program\");\n\n const declarationInstructions = decoded.instructions.filter((instruction) => instruction.isDeclaration);\n let executable = decoded.instructions.filter((instruction) => !instruction.isDeclaration);\n const constTableExtraction = extractConstTables(declarationInstructions, executable);\n if (constTableExtraction.removed)\n {\n executable = executable.filter((_, index) => !constTableExtraction.removed.has(index));\n }\n const instructions = executable.map(buildInstruction);\n const icbInstruction = declarationInstructions.find((instruction) => instruction.customData?.immediateConstantBuffer);\n const immediateConstantBuffer = icbInstruction\n ? clonePlain(icbInstruction.customData.immediateConstantBuffer)\n : null;\n const program = {\n kind: \"shader-program\",\n format: SHADER_IR_FORMAT,\n formatVersion: SHADER_IR_VERSION,\n source: options.source || decoded.program.source || \"memory\",\n stage: decoded.program.programTypeName,\n programType: decoded.program.programType,\n shaderModel: {\n major: decoded.program.majorVersion,\n minor: decoded.program.minorVersion\n },\n signatures: {\n input: clonePlain(decoded.signatures?.input || []),\n output: clonePlain(decoded.signatures?.output || []),\n patch: clonePlain(decoded.signatures?.patch || [])\n },\n declarations: declarationInstructions.map((instruction) => ({\n kind: \"declaration\",\n dxbcOffset: instruction.offset,\n opcodeName: instruction.opcodeName,\n data: clonePlain(instruction.declaration),\n operands: clonePlain(instruction.operands || []),\n ...(instruction.tailTokens?.length\n ? { tailTokens: clonePlain(instruction.tailTokens) }\n : {})\n })),\n bindings: declarationInstructions.map(buildBinding).filter(Boolean),\n immediateConstantBuffer,\n constTables: constTableExtraction.tables,\n instructions,\n blocks: buildBlocks(instructions)\n };\n buildControlFlow(program);\n analyzeRegisterValues(program);\n resolveRegisterFlow(program);\n inferValueTypes(program);\n validateProgram(program);\n return program;\n}\n"],"names":["SHADER_IR_FORMAT","SHADER_IR_VERSION","PRECISE_MASK","BINDING_KINDS","Object","freeze","dcl_constant_buffer","dcl_sampler","dcl_resource","dcl_resource_raw","dcl_resource_structured","dcl_unordered_access_view_typed","dcl_unordered_access_view_raw","dcl_unordered_access_view_structured","BLOCK_BEFORE","Set","BLOCK_AFTER","readDecoded","input","options","Uint8Array","ArrayBuffer","isView","raw","CjsDxbcFormat","read","emit","source","decodeInstructions","program","instructions","decoder","signatures","inputSignature","elements","output","outputSignature","patch","patchSignature","Array","isArray","TypeError","normalizedRange","declaration","bindingRange","clonePlain","registerIndex","bindingModel","rangeId","lowerBound","upperBound","unbounded","registerCount","registerSpace","buildBinding","instruction","resourceKind","opcodeName","range","kind","id","operandType","operands","typeName","declarationOffset","offset","accessPattern","resourceDimension","resourceDimensionName","structureStride","returnType","controlKind","includes","COMPONENT_ORDER","FLOAT_VIEW","DataView","immediateRecord","value","bits","uint32","setUint32","float32","getFloat32","extractConstTables","declarationInstructions","executable","declared","Map","duplicateDeclarations","data","has","add","set","slotCount","componentCount","touched","entryFor","entry","get","writes","hasRelative","invalid","invalidate","reason","firstControl","findIndex","length","forEach","instructionIndex","operandRoles","operand","role","operandIndex","indices","values","relative","Number","isInteger","lanes","selected","swizzle","from","slice","reads","push","slot","saturate","modifierName","immediateValues","minPrecisionName","extensions","mask","some","lane","valuesByLane","destinationLane","indexOf","sourceLane","sourceLaneIndex","tables","removed","describe","Error","lastWrite","Math","max","map","write","firstRead","min","laneMask","rows","laneIndex","row","entries","symbol","buildInstruction","index","dxbcOffset","opcode","testBoolean","preciseMask","resinfoReturnTypeName","syncFlags","syncFlagNames","tailTokens","buildBlocks","leaders","starts","sort","a","b","start","blockIndex","end","last","startInstruction","endInstruction","startDxbcOffset","endDxbcOffset","instructionIndices","_","terminator","validateProgram","stage","shaderModel","major","covered","blocks","flatMap","block","blockIds","successors","edge","blockId","successor","find","predecessors","bindingIds","binding","bindings","valueIds","valuesById","size","inputValueIds","outputValues","ref","valueId","mergeSite","origin","dataflow","refs","previous","result","incoming","component","writeMask","register","componentTypes","type","SCALAR_TYPES","typeInfo","test","bitcasts","bitcast","to","lowerDxbcToIr","decoded","filter","isDeclaration","constTableExtraction","icbInstruction","customData","immediateConstantBuffer","format","formatVersion","programTypeName","programType","majorVersion","minor","minorVersion","declarations","Boolean","constTables","buildControlFlow","analyzeRegisterValues","resolveRegisterFlow","inferValueTypes"],"mappings":"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"}
|
|
@@ -174,6 +174,18 @@ function buildLayouts(entries) {
|
|
|
174
174
|
pass.identities.set(identity, binding);
|
|
175
175
|
continue;
|
|
176
176
|
}
|
|
177
|
+
// A texture one stage only loads and another samples is one
|
|
178
|
+
// binding, and sampling needs it filterable: it stays "float".
|
|
179
|
+
if (existing.texture && binding.texture && existing.texture.sampleType !== binding.texture.sampleType) {
|
|
180
|
+
existing.texture = {
|
|
181
|
+
...existing.texture,
|
|
182
|
+
sampleType: "float"
|
|
183
|
+
};
|
|
184
|
+
binding.texture = {
|
|
185
|
+
...binding.texture,
|
|
186
|
+
sampleType: "float"
|
|
187
|
+
};
|
|
188
|
+
}
|
|
177
189
|
if (bindingFingerprint(existing) !== bindingFingerprint(binding)) {
|
|
178
190
|
throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);
|
|
179
191
|
}
|
|
@@ -267,12 +279,12 @@ function buildResourceTransforms(entries, layouts) {
|
|
|
267
279
|
return plan.resourceTransforms;
|
|
268
280
|
}
|
|
269
281
|
|
|
270
|
-
/**
|
|
271
|
-
* Builds the portable JSON document stored in a Carbon WebGPU `WGSL` chunk.
|
|
272
|
-
* Existing numeric bindings are validated and never reassigned.
|
|
273
|
-
*
|
|
274
|
-
* @param {Array<object>} input Wrapped emitted shader descriptors.
|
|
275
|
-
* @returns {object} Frozen CJS_WGSL_SET document.
|
|
282
|
+
/**
|
|
283
|
+
* Builds the portable JSON document stored in a Carbon WebGPU `WGSL` chunk.
|
|
284
|
+
* Existing numeric bindings are validated and never reassigned.
|
|
285
|
+
*
|
|
286
|
+
* @param {Array<object>} input Wrapped emitted shader descriptors.
|
|
287
|
+
* @returns {object} Frozen CJS_WGSL_SET document.
|
|
276
288
|
*/
|
|
277
289
|
function buildWgslSet(input) {
|
|
278
290
|
if (!Array.isArray(input) || !input.length) throw new TypeError("BuildWgslSet expects a non-empty shader entry array");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildWgslSet.js","sources":["../../../../../../../src/resource/formats/webgpu/core/wgsl/buildWgslSet.js"],"sourcesContent":["import { clonePlain } from \"#utils/object\";\nimport { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\nimport { compareUtf8 } from \"../../../../format/compareUtf8.js\";\n\nexport const WGSL_SET_VERSION = 3;\n\nconst KEY_PATTERN = /^(.*)\\.pass([0-9]+)\\.(vertex|pixel|compute)$/;\nconst KEY_STAGE = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\nconst STAGE_TYPES = Object.freeze({ vertex: 0, pixel: 1, compute: 2 });\nconst STAGE_NAME_ORDER = Object.freeze([ \"vertex\", \"pixel\", \"compute\" ]);\n\nconst VISIBILITY_ORDER = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\n\nfunction normalizeEntry(entry, index)\n{\n const shader = entry?.shader;\n if (shader?.format !== \"CJS_WGSL_SHADER\" || shader.formatVersion !== 1\n || typeof shader.code !== \"string\" || !shader.code\n || typeof shader.entryPoint !== \"string\" || !shader.entryPoint\n || !Array.isArray(shader.sourceMap)\n || shader.program?.format !== \"CJS_TYPED_SHADER\")\n {\n throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);\n }\n const key = typeof entry.key === \"string\" ? entry.key : \"\";\n const match = KEY_PATTERN.exec(key);\n if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || \"<empty>\"}`);\n const techniqueName = match[1];\n const passIndex = Number(match[2]);\n const stageName = match[3];\n if (shader.stage !== KEY_STAGE[stageName])\n {\n throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);\n }\n let threadGroupSize = null;\n if (stageName === \"compute\")\n {\n threadGroupSize = shader.threadGroupSize;\n if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3\n || threadGroupSize.some((value) => !Number.isSafeInteger(value) || value < 1))\n {\n throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);\n }\n }\n else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null)\n {\n throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);\n }\n return {\n shader,\n stage: shader.stage,\n techniqueName,\n passIndex,\n stageName,\n stageType: STAGE_TYPES[stageName],\n ...(threadGroupSize ? { threadGroupSize: clonePlain(threadGroupSize) } : {}),\n key\n };\n}\n\nfunction portableBinding(binding, visibility)\n{\n if (!Number.isInteger(binding.group) || binding.group < 0\n || !Number.isInteger(binding.binding) || binding.binding < 0\n || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0\n || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0\n || typeof binding.resourceKind !== \"string\" || !binding.resourceKind\n || typeof binding.generatedSymbol !== \"string\" || !binding.generatedSymbol\n || typeof binding.type !== \"string\" || !binding.type)\n {\n throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || \"unknown\"} has an invalid portable identity`);\n }\n const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n if (binding.scopeIdentity !== undefined\n && (typeof binding.scopeIdentity !== \"string\" || !binding.scopeIdentity))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || \"<empty>\"}`);\n }\n const scopeIdentity = binding.scopeIdentity === undefined\n ? `${identity}@${visibility}`\n : binding.scopeIdentity;\n if (binding.identity !== undefined && binding.identity !== identity)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);\n }\n const hasTransform = binding.transformId !== undefined\n || binding.arrayLayerCount !== undefined;\n if (hasTransform\n && (binding.resourceKind !== \"sampled-resource\"\n || typeof binding.transformId !== \"string\" || !binding.transformId\n || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2\n || binding.type !== \"texture_2d_array<f32>\"\n || binding.texture?.viewDimension !== \"2d-array\"))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);\n }\n if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`)\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);\n }\n const descriptorKeys = [ \"buffer\", \"texture\", \"sampler\" ].filter((key) => binding[key]);\n const expectedDescriptors = {\n \"uniform-buffer\": [ \"buffer\" ],\n \"sampled-resource\": [ \"buffer\", \"texture\" ],\n \"storage-resource\": [ \"buffer\" ],\n sampler: [ \"sampler\" ]\n }[binding.resourceKind];\n if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0]))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);\n }\n return {\n identity,\n scopeIdentity,\n resourceKind: binding.resourceKind,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n visibility: [ visibility ],\n type: binding.type,\n ...(hasTransform\n ? {\n transformId: binding.transformId,\n arrayLayerCount: binding.arrayLayerCount\n }\n : {}),\n ...(Number.isInteger(binding.structureStride) ? { structureStride: binding.structureStride } : {}),\n ...(binding.buffer ? { buffer: clonePlain(binding.buffer) } : {}),\n ...(binding.texture ? { texture: clonePlain(binding.texture) } : {}),\n ...(binding.sampler ? { sampler: clonePlain(binding.sampler) } : {})\n };\n}\n\nfunction bindingIdentity(binding)\n{\n return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\n}\n\nfunction bindingFingerprint(binding)\n{\n return JSON.stringify({\n resourceKind: binding.resourceKind,\n identity: binding.identity,\n scopeIdentity: binding.scopeIdentity,\n generatedSymbol: binding.generatedSymbol,\n registerSpace: binding.registerSpace,\n registerIndex: binding.registerIndex,\n group: binding.group,\n binding: binding.binding,\n type: binding.type,\n transformId: binding.transformId ?? null,\n arrayLayerCount: binding.arrayLayerCount ?? null,\n structureStride: binding.structureStride ?? null,\n buffer: binding.buffer || null,\n texture: binding.texture || null,\n sampler: binding.sampler || null\n });\n}\n\nfunction buildLayouts(entries)\n{\n const passes = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!passes.has(passKey))\n {\n passes.set(passKey, { identities: new Map(), baseScopes: new Map(), slots: new Map() });\n }\n const pass = passes.get(passKey);\n const symbols = new Map();\n const d3dIdentities = new Set();\n for (const source of entry.shader.program.bindings || [])\n {\n const binding = portableBinding(source, entry.stage);\n const identity = bindingIdentity(binding);\n if (d3dIdentities.has(binding.identity))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);\n }\n d3dIdentities.add(binding.identity);\n if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());\n const baseScopes = pass.baseScopes.get(binding.identity);\n if ((identity === binding.identity && Array.from(baseScopes).some((scope) => scope !== binding.identity))\n || (identity !== binding.identity && baseScopes.has(binding.identity)))\n {\n throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);\n }\n baseScopes.add(identity);\n if (symbols.has(binding.generatedSymbol))\n {\n throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);\n }\n symbols.set(binding.generatedSymbol, identity);\n const slot = `${binding.group}:${binding.binding}`;\n const existingSlot = pass.slots.get(slot);\n if (existingSlot && existingSlot !== identity)\n {\n throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);\n }\n pass.slots.set(slot, identity);\n const existing = pass.identities.get(identity);\n if (!existing)\n {\n pass.identities.set(identity, binding);\n continue;\n }\n if (bindingFingerprint(existing) !== bindingFingerprint(binding))\n {\n throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);\n }\n existing.visibility = Array.from(new Set([ ...existing.visibility, ...binding.visibility ]))\n .sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));\n }\n }\n return Array.from(passes, ([ key, pass ]) =>\n {\n for (const [ identity, scopes ] of pass.baseScopes)\n {\n if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2)\n {\n throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);\n }\n }\n const groups = new Map();\n for (const binding of pass.identities.values())\n {\n if (!groups.has(binding.group)) groups.set(binding.group, []);\n groups.get(binding.group).push(binding);\n }\n return {\n key,\n techniqueName: key.slice(0, key.lastIndexOf(\".pass\")),\n passIndex: Number(/\\.pass([0-9]+)$/.exec(key)?.[1]),\n bindGroups: Array.from(groups, ([ group, bindings ]) => ({\n group,\n bindings: bindings.sort((left, right) => left.binding - right.binding)\n })).sort((left, right) => left.group - right.group)\n };\n }).sort((left, right) =>\n compareUtf8(left.techniqueName, right.techniqueName)\n || left.passIndex - right.passIndex);\n}\n\nfunction validatePassTopologies(entries)\n{\n const stagesByPass = new Map();\n for (const entry of entries)\n {\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\n if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);\n stagesByPass.get(passKey).push(entry.stageName);\n }\n for (const [ passKey, stages ] of stagesByPass)\n {\n if (stages.includes(\"compute\") && (stages.length !== 1 || stages[0] !== \"compute\"))\n {\n throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);\n }\n }\n}\n\nfunction buildResourceTransforms(entries, layouts)\n{\n const raw = entries.flatMap((entry) => entry.shader.program.resourceTransforms || []);\n const transformedBindings = layouts.flatMap((layout) =>\n layout.bindGroups.flatMap((group) =>\n group.bindings.filter((binding) => binding.transformId)\n .map((binding) => ({ layoutKey: layout.key, binding }))));\n if (!raw.length)\n {\n if (transformedBindings.length)\n {\n throw new Error(\"WGSL set has transformed bindings without resource recipes\");\n }\n return [];\n }\n const plan = normalizeResourceTransformPlan({\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\n formatVersion: 1,\n resourceTransforms: raw\n });\n const ids = new Set(plan.resourceTransforms.map((transform) => transform.id));\n for (const { binding } of transformedBindings)\n {\n if (!ids.has(binding.transformId))\n {\n throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);\n }\n }\n for (const transform of plan.resourceTransforms)\n {\n const stageKey = `${transform.layoutKey}.pixel`;\n if (!entries.some((entry) => entry.key === stageKey))\n {\n throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);\n }\n const links = transformedBindings.filter(({ layoutKey, binding }) =>\n layoutKey === transform.layoutKey\n && binding.transformId === transform.id);\n if (links.length !== 1)\n {\n throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);\n }\n const binding = links[0].binding;\n if (binding.identity !== transform.output.identity\n || binding.scopeIdentity !== transform.output.scopeIdentity\n || binding.texture?.viewDimension !== transform.output.viewDimension\n || binding.arrayLayerCount !== transform.output.layerCount)\n {\n throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);\n }\n const transformLayout = layouts.find((layout) =>\n layout.key === transform.layoutKey);\n const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap((group) =>\n group.bindings.map((entry) => entry.scopeIdentity)));\n for (const input of transform.inputs.slice(1))\n {\n if (physicalScopes.has(input.scopeIdentity))\n {\n throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);\n }\n }\n }\n return plan.resourceTransforms;\n}\n\n/**\n * Builds the portable JSON document stored in a Carbon WebGPU `WGSL` chunk.\n * Existing numeric bindings are validated and never reassigned.\n *\n * @param {Array<object>} input Wrapped emitted shader descriptors.\n * @returns {object} Frozen CJS_WGSL_SET document.\n */\nexport function buildWgslSet(input)\n{\n if (!Array.isArray(input) || !input.length) throw new TypeError(\"BuildWgslSet expects a non-empty shader entry array\");\n const entries = input.map(normalizeEntry);\n const keys = new Set();\n const shaders = entries.map((entry) =>\n {\n if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);\n keys.add(entry.key);\n return {\n key: entry.key,\n techniqueName: entry.techniqueName,\n passIndex: entry.passIndex,\n stageName: entry.stageName,\n stage: entry.stage,\n stageType: entry.stageType,\n entryPoint: entry.shader.entryPoint,\n code: entry.shader.code,\n sourceMap: clonePlain(entry.shader.sourceMap || []),\n ...(entry.threadGroupSize ? { threadGroupSize: clonePlain(entry.threadGroupSize) } : {})\n };\n }).sort((left, right) =>\n compareUtf8(left.techniqueName, right.techniqueName)\n || left.passIndex - right.passIndex\n || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));\n validatePassTopologies(entries);\n const layouts = buildLayouts(entries);\n const resourceTransforms = buildResourceTransforms(entries, layouts);\n return {\n format: \"CJS_WGSL_SET\",\n formatVersion: WGSL_SET_VERSION,\n shaders,\n layouts,\n ...(resourceTransforms.length ? { resourceTransforms } : {})\n };\n}\n"],"names":["WGSL_SET_VERSION","KEY_PATTERN","KEY_STAGE","Object","freeze","vertex","pixel","compute","STAGE_TYPES","STAGE_NAME_ORDER","VISIBILITY_ORDER","normalizeEntry","entry","index","shader","format","formatVersion","code","entryPoint","Array","isArray","sourceMap","program","TypeError","key","match","exec","Error","techniqueName","passIndex","Number","stageName","stage","threadGroupSize","length","some","value","isSafeInteger","undefined","stageType","clonePlain","portableBinding","binding","visibility","isInteger","group","registerSpace","registerIndex","resourceKind","generatedSymbol","type","id","identity","scopeIdentity","hasTransform","transformId","arrayLayerCount","texture","viewDimension","descriptorKeys","filter","expectedDescriptors","sampler","includes","structureStride","buffer","bindingIdentity","bindingFingerprint","JSON","stringify","buildLayouts","entries","passes","Map","passKey","has","set","identities","baseScopes","slots","pass","get","symbols","d3dIdentities","Set","source","bindings","add","from","scope","slot","existingSlot","existing","sort","left","right","indexOf","scopes","groups","values","push","slice","lastIndexOf","bindGroups","compareUtf8","validatePassTopologies","stagesByPass","stages","buildResourceTransforms","layouts","raw","flatMap","resourceTransforms","transformedBindings","layout","map","layoutKey","plan","normalizeResourceTransformPlan","ids","transform","stageKey","links","output","layerCount","transformLayout","find","physicalScopes","input","inputs","buildWgslSet","keys","shaders"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buildWgslSet.js","sources":["../../../../../../../src/resource/formats/webgpu/core/wgsl/buildWgslSet.js"],"sourcesContent":["import { clonePlain } from \"#utils/object\";\r\nimport { normalizeResourceTransformPlan } from \"./buildResourceTransformPlan.js\";\r\nimport { compareUtf8 } from \"../../../../format/compareUtf8.js\";\r\n\r\nexport const WGSL_SET_VERSION = 3;\r\n\r\nconst KEY_PATTERN = /^(.*)\\.pass([0-9]+)\\.(vertex|pixel|compute)$/;\r\nconst KEY_STAGE = Object.freeze({ vertex: \"vertex\", pixel: \"fragment\", compute: \"compute\" });\r\nconst STAGE_TYPES = Object.freeze({ vertex: 0, pixel: 1, compute: 2 });\r\nconst STAGE_NAME_ORDER = Object.freeze([ \"vertex\", \"pixel\", \"compute\" ]);\r\n\r\nconst VISIBILITY_ORDER = Object.freeze([ \"vertex\", \"fragment\", \"compute\" ]);\r\n\r\nfunction normalizeEntry(entry, index)\r\n{\r\n const shader = entry?.shader;\r\n if (shader?.format !== \"CJS_WGSL_SHADER\" || shader.formatVersion !== 1\r\n || typeof shader.code !== \"string\" || !shader.code\r\n || typeof shader.entryPoint !== \"string\" || !shader.entryPoint\r\n || !Array.isArray(shader.sourceMap)\r\n || shader.program?.format !== \"CJS_TYPED_SHADER\")\r\n {\r\n throw new TypeError(`WGSL set entry ${index} requires a CJS_WGSL_SHADER descriptor`);\r\n }\r\n const key = typeof entry.key === \"string\" ? entry.key : \"\";\r\n const match = KEY_PATTERN.exec(key);\r\n if (!match || !match[1]) throw new Error(`WGSL set entry ${index} has malformed key ${key || \"<empty>\"}`);\r\n const techniqueName = match[1];\r\n const passIndex = Number(match[2]);\r\n const stageName = match[3];\r\n if (shader.stage !== KEY_STAGE[stageName])\r\n {\r\n throw new Error(`WGSL set key ${key} does not match shader stage ${shader.stage}`);\r\n }\r\n let threadGroupSize = null;\r\n if (stageName === \"compute\")\r\n {\r\n threadGroupSize = shader.threadGroupSize;\r\n if (!Array.isArray(threadGroupSize) || threadGroupSize.length !== 3\r\n || threadGroupSize.some((value) => !Number.isSafeInteger(value) || value < 1))\r\n {\r\n throw new Error(`WGSL compute shader ${key} requires a positive three-dimensional threadGroupSize`);\r\n }\r\n }\r\n else if (shader.threadGroupSize !== undefined && shader.threadGroupSize !== null)\r\n {\r\n throw new Error(`WGSL render shader ${key} cannot declare threadGroupSize`);\r\n }\r\n return {\r\n shader,\r\n stage: shader.stage,\r\n techniqueName,\r\n passIndex,\r\n stageName,\r\n stageType: STAGE_TYPES[stageName],\r\n ...(threadGroupSize ? { threadGroupSize: clonePlain(threadGroupSize) } : {}),\r\n key\r\n };\r\n}\r\n\r\nfunction portableBinding(binding, visibility)\r\n{\r\n if (!Number.isInteger(binding.group) || binding.group < 0\r\n || !Number.isInteger(binding.binding) || binding.binding < 0\r\n || !Number.isInteger(binding.registerSpace) || binding.registerSpace < 0\r\n || !Number.isInteger(binding.registerIndex) || binding.registerIndex < 0\r\n || typeof binding.resourceKind !== \"string\" || !binding.resourceKind\r\n || typeof binding.generatedSymbol !== \"string\" || !binding.generatedSymbol\r\n || typeof binding.type !== \"string\" || !binding.type)\r\n {\r\n throw new Error(`WGSL binding ${binding.id || binding.generatedSymbol || \"unknown\"} has an invalid portable identity`);\r\n }\r\n const identity = `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\r\n if (binding.scopeIdentity !== undefined\r\n && (typeof binding.scopeIdentity !== \"string\" || !binding.scopeIdentity))\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${binding.scopeIdentity || \"<empty>\"}`);\r\n }\r\n const scopeIdentity = binding.scopeIdentity === undefined\r\n ? `${identity}@${visibility}`\r\n : binding.scopeIdentity;\r\n if (binding.identity !== undefined && binding.identity !== identity)\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} has inconsistent D3D identity ${binding.identity}`);\r\n }\r\n const hasTransform = binding.transformId !== undefined\r\n || binding.arrayLayerCount !== undefined;\r\n if (hasTransform\r\n && (binding.resourceKind !== \"sampled-resource\"\r\n || typeof binding.transformId !== \"string\" || !binding.transformId\r\n || !Number.isInteger(binding.arrayLayerCount) || binding.arrayLayerCount < 2\r\n || binding.type !== \"texture_2d_array<f32>\"\r\n || binding.texture?.viewDimension !== \"2d-array\"))\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid resource transform metadata`);\r\n }\r\n if (scopeIdentity !== identity && scopeIdentity !== `${identity}@${visibility}`)\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} has invalid scope identity ${scopeIdentity}`);\r\n }\r\n const descriptorKeys = [ \"buffer\", \"texture\", \"sampler\" ].filter((key) => binding[key]);\r\n const expectedDescriptors = {\r\n \"uniform-buffer\": [ \"buffer\" ],\r\n \"sampled-resource\": [ \"buffer\", \"texture\" ],\r\n \"storage-resource\": [ \"buffer\" ],\r\n sampler: [ \"sampler\" ]\r\n }[binding.resourceKind];\r\n if (!expectedDescriptors || descriptorKeys.length !== 1 || !expectedDescriptors.includes(descriptorKeys[0]))\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} has an invalid ${binding.resourceKind} layout descriptor`);\r\n }\r\n return {\r\n identity,\r\n scopeIdentity,\r\n resourceKind: binding.resourceKind,\r\n generatedSymbol: binding.generatedSymbol,\r\n registerSpace: binding.registerSpace,\r\n registerIndex: binding.registerIndex,\r\n group: binding.group,\r\n binding: binding.binding,\r\n visibility: [ visibility ],\r\n type: binding.type,\r\n ...(hasTransform\r\n ? {\r\n transformId: binding.transformId,\r\n arrayLayerCount: binding.arrayLayerCount\r\n }\r\n : {}),\r\n ...(Number.isInteger(binding.structureStride) ? { structureStride: binding.structureStride } : {}),\r\n ...(binding.buffer ? { buffer: clonePlain(binding.buffer) } : {}),\r\n ...(binding.texture ? { texture: clonePlain(binding.texture) } : {}),\r\n ...(binding.sampler ? { sampler: clonePlain(binding.sampler) } : {})\r\n };\r\n}\r\n\r\nfunction bindingIdentity(binding)\r\n{\r\n return binding.scopeIdentity || `${binding.resourceKind}:${binding.registerSpace}:${binding.registerIndex}`;\r\n}\r\n\r\nfunction bindingFingerprint(binding)\r\n{\r\n return JSON.stringify({\r\n resourceKind: binding.resourceKind,\r\n identity: binding.identity,\r\n scopeIdentity: binding.scopeIdentity,\r\n generatedSymbol: binding.generatedSymbol,\r\n registerSpace: binding.registerSpace,\r\n registerIndex: binding.registerIndex,\r\n group: binding.group,\r\n binding: binding.binding,\r\n type: binding.type,\r\n transformId: binding.transformId ?? null,\r\n arrayLayerCount: binding.arrayLayerCount ?? null,\r\n structureStride: binding.structureStride ?? null,\r\n buffer: binding.buffer || null,\r\n texture: binding.texture || null,\r\n sampler: binding.sampler || null\r\n });\r\n}\r\n\r\nfunction buildLayouts(entries)\r\n{\r\n const passes = new Map();\r\n for (const entry of entries)\r\n {\r\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\r\n if (!passes.has(passKey))\r\n {\r\n passes.set(passKey, { identities: new Map(), baseScopes: new Map(), slots: new Map() });\r\n }\r\n const pass = passes.get(passKey);\r\n const symbols = new Map();\r\n const d3dIdentities = new Set();\r\n for (const source of entry.shader.program.bindings || [])\r\n {\r\n const binding = portableBinding(source, entry.stage);\r\n const identity = bindingIdentity(binding);\r\n if (d3dIdentities.has(binding.identity))\r\n {\r\n throw new Error(`WGSL shader ${entry.key} contains duplicate D3D identity ${binding.identity}`);\r\n }\r\n d3dIdentities.add(binding.identity);\r\n if (!pass.baseScopes.has(binding.identity)) pass.baseScopes.set(binding.identity, new Set());\r\n const baseScopes = pass.baseScopes.get(binding.identity);\r\n if ((identity === binding.identity && Array.from(baseScopes).some((scope) => scope !== binding.identity))\r\n || (identity !== binding.identity && baseScopes.has(binding.identity)))\r\n {\r\n throw new Error(`WGSL set ${passKey} mixes shared and stage-scoped forms for ${binding.identity}`);\r\n }\r\n baseScopes.add(identity);\r\n if (symbols.has(binding.generatedSymbol))\r\n {\r\n throw new Error(`WGSL shader ${entry.key} contains duplicate generated symbol ${binding.generatedSymbol}`);\r\n }\r\n symbols.set(binding.generatedSymbol, identity);\r\n const slot = `${binding.group}:${binding.binding}`;\r\n const existingSlot = pass.slots.get(slot);\r\n if (existingSlot && existingSlot !== identity)\r\n {\r\n throw new Error(`WGSL set ${passKey} assigns ${slot} to both ${existingSlot} and ${identity}`);\r\n }\r\n pass.slots.set(slot, identity);\r\n const existing = pass.identities.get(identity);\r\n if (!existing)\r\n {\r\n pass.identities.set(identity, binding);\r\n continue;\r\n }\r\n // A texture one stage only loads and another samples is one\r\n // binding, and sampling needs it filterable: it stays \"float\".\r\n if (existing.texture && binding.texture && existing.texture.sampleType !== binding.texture.sampleType)\r\n {\r\n existing.texture = { ...existing.texture, sampleType: \"float\" };\r\n binding.texture = { ...binding.texture, sampleType: \"float\" };\r\n }\r\n if (bindingFingerprint(existing) !== bindingFingerprint(binding))\r\n {\r\n throw new Error(`WGSL set ${passKey} has conflicting layouts for ${identity}`);\r\n }\r\n existing.visibility = Array.from(new Set([ ...existing.visibility, ...binding.visibility ]))\r\n .sort((left, right) => VISIBILITY_ORDER.indexOf(left) - VISIBILITY_ORDER.indexOf(right));\r\n }\r\n }\r\n return Array.from(passes, ([ key, pass ]) =>\r\n {\r\n for (const [ identity, scopes ] of pass.baseScopes)\r\n {\r\n if (scopes.has(identity) && pass.identities.get(identity)?.visibility.length < 2)\r\n {\r\n throw new Error(`WGSL set ${key} shared identity ${identity} does not cover multiple stages`);\r\n }\r\n }\r\n const groups = new Map();\r\n for (const binding of pass.identities.values())\r\n {\r\n if (!groups.has(binding.group)) groups.set(binding.group, []);\r\n groups.get(binding.group).push(binding);\r\n }\r\n return {\r\n key,\r\n techniqueName: key.slice(0, key.lastIndexOf(\".pass\")),\r\n passIndex: Number(/\\.pass([0-9]+)$/.exec(key)?.[1]),\r\n bindGroups: Array.from(groups, ([ group, bindings ]) => ({\r\n group,\r\n bindings: bindings.sort((left, right) => left.binding - right.binding)\r\n })).sort((left, right) => left.group - right.group)\r\n };\r\n }).sort((left, right) =>\r\n compareUtf8(left.techniqueName, right.techniqueName)\r\n || left.passIndex - right.passIndex);\r\n}\r\n\r\nfunction validatePassTopologies(entries)\r\n{\r\n const stagesByPass = new Map();\r\n for (const entry of entries)\r\n {\r\n const passKey = `${entry.techniqueName}.pass${entry.passIndex}`;\r\n if (!stagesByPass.has(passKey)) stagesByPass.set(passKey, []);\r\n stagesByPass.get(passKey).push(entry.stageName);\r\n }\r\n for (const [ passKey, stages ] of stagesByPass)\r\n {\r\n if (stages.includes(\"compute\") && (stages.length !== 1 || stages[0] !== \"compute\"))\r\n {\r\n throw new Error(`WGSL set ${passKey} cannot mix compute and render shader stages`);\r\n }\r\n }\r\n}\r\n\r\nfunction buildResourceTransforms(entries, layouts)\r\n{\r\n const raw = entries.flatMap((entry) => entry.shader.program.resourceTransforms || []);\r\n const transformedBindings = layouts.flatMap((layout) =>\r\n layout.bindGroups.flatMap((group) =>\r\n group.bindings.filter((binding) => binding.transformId)\r\n .map((binding) => ({ layoutKey: layout.key, binding }))));\r\n if (!raw.length)\r\n {\r\n if (transformedBindings.length)\r\n {\r\n throw new Error(\"WGSL set has transformed bindings without resource recipes\");\r\n }\r\n return [];\r\n }\r\n const plan = normalizeResourceTransformPlan({\r\n format: \"CJS_WGSL_RESOURCE_TRANSFORM_PLAN\",\r\n formatVersion: 1,\r\n resourceTransforms: raw\r\n });\r\n const ids = new Set(plan.resourceTransforms.map((transform) => transform.id));\r\n for (const { binding } of transformedBindings)\r\n {\r\n if (!ids.has(binding.transformId))\r\n {\r\n throw new Error(`WGSL binding ${binding.generatedSymbol} references missing transform ${binding.transformId}`);\r\n }\r\n }\r\n for (const transform of plan.resourceTransforms)\r\n {\r\n const stageKey = `${transform.layoutKey}.pixel`;\r\n if (!entries.some((entry) => entry.key === stageKey))\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} has no fragment shader ${stageKey}`);\r\n }\r\n const links = transformedBindings.filter(({ layoutKey, binding }) =>\r\n layoutKey === transform.layoutKey\r\n && binding.transformId === transform.id);\r\n if (links.length !== 1)\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} must link exactly one physical binding`);\r\n }\r\n const binding = links[0].binding;\r\n if (binding.identity !== transform.output.identity\r\n || binding.scopeIdentity !== transform.output.scopeIdentity\r\n || binding.texture?.viewDimension !== transform.output.viewDimension\r\n || binding.arrayLayerCount !== transform.output.layerCount)\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} does not match its physical binding`);\r\n }\r\n const transformLayout = layouts.find((layout) =>\r\n layout.key === transform.layoutKey);\r\n const physicalScopes = new Set((transformLayout?.bindGroups || []).flatMap((group) =>\r\n group.bindings.map((entry) => entry.scopeIdentity)));\r\n for (const input of transform.inputs.slice(1))\r\n {\r\n if (physicalScopes.has(input.scopeIdentity))\r\n {\r\n throw new Error(`WGSL resource transform ${transform.id} retains removed input ${input.scopeIdentity}`);\r\n }\r\n }\r\n }\r\n return plan.resourceTransforms;\r\n}\r\n\r\n/**\r\n * Builds the portable JSON document stored in a Carbon WebGPU `WGSL` chunk.\r\n * Existing numeric bindings are validated and never reassigned.\r\n *\r\n * @param {Array<object>} input Wrapped emitted shader descriptors.\r\n * @returns {object} Frozen CJS_WGSL_SET document.\r\n */\r\nexport function buildWgslSet(input)\r\n{\r\n if (!Array.isArray(input) || !input.length) throw new TypeError(\"BuildWgslSet expects a non-empty shader entry array\");\r\n const entries = input.map(normalizeEntry);\r\n const keys = new Set();\r\n const shaders = entries.map((entry) =>\r\n {\r\n if (keys.has(entry.key)) throw new Error(`WGSL set contains duplicate shader key ${entry.key}`);\r\n keys.add(entry.key);\r\n return {\r\n key: entry.key,\r\n techniqueName: entry.techniqueName,\r\n passIndex: entry.passIndex,\r\n stageName: entry.stageName,\r\n stage: entry.stage,\r\n stageType: entry.stageType,\r\n entryPoint: entry.shader.entryPoint,\r\n code: entry.shader.code,\r\n sourceMap: clonePlain(entry.shader.sourceMap || []),\r\n ...(entry.threadGroupSize ? { threadGroupSize: clonePlain(entry.threadGroupSize) } : {})\r\n };\r\n }).sort((left, right) =>\r\n compareUtf8(left.techniqueName, right.techniqueName)\r\n || left.passIndex - right.passIndex\r\n || STAGE_NAME_ORDER.indexOf(left.stageName) - STAGE_NAME_ORDER.indexOf(right.stageName));\r\n validatePassTopologies(entries);\r\n const layouts = buildLayouts(entries);\r\n const resourceTransforms = buildResourceTransforms(entries, layouts);\r\n return {\r\n format: \"CJS_WGSL_SET\",\r\n formatVersion: WGSL_SET_VERSION,\r\n shaders,\r\n layouts,\r\n ...(resourceTransforms.length ? { resourceTransforms } : {})\r\n };\r\n}\r\n"],"names":["WGSL_SET_VERSION","KEY_PATTERN","KEY_STAGE","Object","freeze","vertex","pixel","compute","STAGE_TYPES","STAGE_NAME_ORDER","VISIBILITY_ORDER","normalizeEntry","entry","index","shader","format","formatVersion","code","entryPoint","Array","isArray","sourceMap","program","TypeError","key","match","exec","Error","techniqueName","passIndex","Number","stageName","stage","threadGroupSize","length","some","value","isSafeInteger","undefined","stageType","clonePlain","portableBinding","binding","visibility","isInteger","group","registerSpace","registerIndex","resourceKind","generatedSymbol","type","id","identity","scopeIdentity","hasTransform","transformId","arrayLayerCount","texture","viewDimension","descriptorKeys","filter","expectedDescriptors","sampler","includes","structureStride","buffer","bindingIdentity","bindingFingerprint","JSON","stringify","buildLayouts","entries","passes","Map","passKey","has","set","identities","baseScopes","slots","pass","get","symbols","d3dIdentities","Set","source","bindings","add","from","scope","slot","existingSlot","existing","sampleType","sort","left","right","indexOf","scopes","groups","values","push","slice","lastIndexOf","bindGroups","compareUtf8","validatePassTopologies","stagesByPass","stages","buildResourceTransforms","layouts","raw","flatMap","resourceTransforms","transformedBindings","layout","map","layoutKey","plan","normalizeResourceTransformPlan","ids","transform","stageKey","links","output","layerCount","transformLayout","find","physicalScopes","input","inputs","buildWgslSet","keys","shaders"],"mappings":"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"}
|
|
@@ -90,7 +90,33 @@ const TEXTURE_DIMENSIONS = Object.freeze({
|
|
|
90
90
|
viewDimension: "2d-array"
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
/** Instructions that read a texture without filtering: a texel load and a size query. */
|
|
95
|
+
const UNFILTERED_TEXTURE_OPCODES = new Set(["ld", "ld_ms", "resinfo"]);
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether this program only ever loads the texture at a register, never
|
|
99
|
+
* samples it. Such a texture binds as `unfilterable-float`, which is what lets
|
|
100
|
+
* a 32-bit float texture bind at all: WebGPU cannot filter one without the
|
|
101
|
+
* optional `float32-filterable` feature. The impact effects read
|
|
102
|
+
* `ImpactShieldDataMap` (RGBA32F, Tr2DataTextureManager) only with `ld`.
|
|
103
|
+
* A register this program never touches stays `float`.
|
|
104
|
+
*
|
|
105
|
+
* @param {object} program Decoded shader program.
|
|
106
|
+
* @param {number} registerIndex The texture register.
|
|
107
|
+
* @returns {boolean} True when every use is a load or a size query.
|
|
108
|
+
*/
|
|
109
|
+
function isOnlyLoaded(program, registerIndex) {
|
|
110
|
+
let used = false;
|
|
111
|
+
for (const instruction of program.instructions) {
|
|
112
|
+
const touches = instruction.operands?.some(operand => operand?.typeName === "resource" && operand.registerIndex === registerIndex);
|
|
113
|
+
if (!touches || instruction.isDeclaration) continue;
|
|
114
|
+
if (!UNFILTERED_TEXTURE_OPCODES.has(instruction.opcodeName)) return false;
|
|
115
|
+
used = true;
|
|
116
|
+
}
|
|
117
|
+
return used;
|
|
118
|
+
}
|
|
119
|
+
function textureLayout(program, binding) {
|
|
94
120
|
const dimension = TEXTURE_DIMENSIONS[binding.resourceDimension];
|
|
95
121
|
if (!dimension) {
|
|
96
122
|
throw new Error(`WGSL sampled resource ${binding.id} has unsupported dimension ${binding.resourceDimension}`);
|
|
@@ -103,7 +129,7 @@ function textureLayout(binding) {
|
|
|
103
129
|
declaration: "var",
|
|
104
130
|
type: dimension.type,
|
|
105
131
|
texture: {
|
|
106
|
-
sampleType: "float",
|
|
132
|
+
sampleType: isOnlyLoaded(program, bindingRegister(binding)) ? "unfilterable-float" : "float",
|
|
107
133
|
viewDimension: dimension.viewDimension,
|
|
108
134
|
multisampled: false
|
|
109
135
|
}
|
|
@@ -155,7 +181,7 @@ function typedBufferLayout(program, binding) {
|
|
|
155
181
|
}
|
|
156
182
|
function sampledResourceLayout(program, binding) {
|
|
157
183
|
if (binding.resourceDimension === "buffer") return typedBufferLayout(program, binding);
|
|
158
|
-
return binding.structureStride === null || binding.structureStride === undefined ? textureLayout(binding) : structuredBufferLayout(binding);
|
|
184
|
+
return binding.structureStride === null || binding.structureStride === undefined ? textureLayout(program, binding) : structuredBufferLayout(binding);
|
|
159
185
|
}
|
|
160
186
|
function uavBufferLayout(program, binding, policy) {
|
|
161
187
|
// Writable storage is admitted for fragment and compute shaders. Vertex
|
|
@@ -381,16 +407,16 @@ function normalizeLayoutPolicy(value) {
|
|
|
381
407
|
};
|
|
382
408
|
}
|
|
383
409
|
|
|
384
|
-
/**
|
|
385
|
-
* Converts D3D register declarations to one deterministic WebGPU bind group.
|
|
386
|
-
* Register spaces participate in ordering and identity; SM 5.1 range ids are
|
|
387
|
-
* deliberately not treated as globally unique bindings.
|
|
388
|
-
*
|
|
389
|
-
* @param {object} program Frozen CJS shader IR.
|
|
390
|
-
* @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.
|
|
391
|
-
* @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.
|
|
392
|
-
* @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.
|
|
393
|
-
* @returns {object[]} Frozen WebGPU binding records.
|
|
410
|
+
/**
|
|
411
|
+
* Converts D3D register declarations to one deterministic WebGPU bind group.
|
|
412
|
+
* Register spaces participate in ordering and identity; SM 5.1 range ids are
|
|
413
|
+
* deliberately not treated as globally unique bindings.
|
|
414
|
+
*
|
|
415
|
+
* @param {object} program Frozen CJS shader IR.
|
|
416
|
+
* @param {object|null} [bindingPlan] Optional pass-global canonical binding plan.
|
|
417
|
+
* @param {object|null} [layoutPolicy] Exact-profile-only typed-layout policy.
|
|
418
|
+
* @param {object|null} [resourceTransformPlan] Validated physical-resource overlay.
|
|
419
|
+
* @returns {object[]} Frozen WebGPU binding records.
|
|
394
420
|
*/
|
|
395
421
|
function lowerBindingLayout(program, bindingPlan = null, layoutPolicy = null, resourceTransformPlan = null) {
|
|
396
422
|
if (program?.format !== "CJS_SHADER_IR" || program.formatVersion !== 1) {
|