@woosh/meep-engine 3.11.3 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -18
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +2 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +801 -994
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
- package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.js +261 -289
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
- package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -2
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -2
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +135 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/Renderer.d.ts +0 -6
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +0 -29
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +4 -2
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +3 -2
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +4 -2
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +24 -10
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +3 -2
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -2
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +16 -22
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +11 -5
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +43 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
- package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +5 -2
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +3 -11
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +6 -4
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +9 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +10 -10
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +4 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -83
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +4 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -85
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -192
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +5 -3
- package/src/shade/renderer/particles/prototypeParticleSystem.js +5 -7
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +27 -13
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +4 -4
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +18 -7
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +47 -21
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +19 -17
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +5 -8
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +4 -2
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -2
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +3 -2
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
- package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +6 -2
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -2
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +5 -2
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +5 -3
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +4 -3
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +4 -3
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +3 -7
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -145
- package/src/shade/renderer/shader/ComputeShader.d.ts +26 -5
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +347 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +6 -4
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +11 -12
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +3 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +14 -19
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +8 -3
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
- package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
|
@@ -1,226 +1,225 @@
|
|
|
1
|
-
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
5
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
-
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
7
|
-
import { NSS_LAYER_CONFIG_STRUCT } from "./NSS_LAYER_CONFIG_STRUCT.js";
|
|
8
|
-
import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* One 3x3 (or 1x1) convolution layer of the NSS network — int8 weights,
|
|
12
|
-
* f32 biases, per-channel TOSA RESCALE applied before activation.
|
|
13
|
-
*
|
|
14
|
-
* Pipeline per output channel:
|
|
15
|
-
* acc = sum(input * unpack4x8snorm(weight)) (over ic, ky, kx)
|
|
16
|
-
* acc += bias (when has_bias)
|
|
17
|
-
* acc *= rescale (per-channel, from ARM's RESCALE multipliers/shifts)
|
|
18
|
-
* acc = saturate to [-1, 1] (mirrors int8 saturation)
|
|
19
|
-
* acc = activation(acc) (ReLU clamps to [0, 1]; identity passes through)
|
|
20
|
-
* textureStore(...)
|
|
21
|
-
*
|
|
22
|
-
* The TOSA RESCALE half is what keeps intermediate activations bounded —
|
|
23
|
-
* without it the encoder's 64-channel layers blow up by 4-5 orders of
|
|
24
|
-
* magnitude and downstream layers degenerate.
|
|
25
|
-
*
|
|
26
|
-
* Weights live in a shared packed-int8 storage buffer (`array<u32>`,
|
|
27
|
-
* 4 int8 weights per u32 along the in_channels dimension). Biases and
|
|
28
|
-
* rescales live in separate f32 storage buffers. `output_layer_offset`
|
|
29
|
-
* lets multiple parallel output heads share one destination texture.
|
|
30
|
-
*
|
|
31
|
-
* Edge handling: clamp-to-edge.
|
|
32
|
-
*/
|
|
33
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
34
|
-
resources.createGroup()
|
|
35
|
-
.addTexture("tInput", "float", "3d")
|
|
36
|
-
.addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
|
|
37
|
-
.addStorageBuffer("weights", WebGPUArray.from(u32))
|
|
38
|
-
.addStorageBuffer("biases", WebGPUArray.from(f32))
|
|
39
|
-
.addStorageBuffer("rescales", WebGPUArray.from(f32))
|
|
40
|
-
// Per-head transfer LUTs (TOSA TABLE op). 256 int8 entries packed
|
|
41
|
-
// 4-per-u32. Only output heads (layers with `has_lut == 1`) read
|
|
42
|
-
// from this; body layers ignore the binding and use the inline
|
|
43
|
-
// ReLU activation_kind path.
|
|
44
|
-
.addStorageBuffer("luts", WebGPUArray.from(u32))
|
|
45
|
-
.addUniform("layer_config", NSS_LAYER_CONFIG_STRUCT)
|
|
46
|
-
// Shared per-frame settings — currently only network_acc_scale is read,
|
|
47
|
-
// but binding the whole struct keeps it consistent with the other passes.
|
|
48
|
-
.addUniform("settings", NSS_SETTINGS_STRUCT)
|
|
49
|
-
;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const body = CodeChunk.from(
|
|
53
|
-
//language=WGSL
|
|
54
|
-
`
|
|
55
|
-
fn nss_activation(x: vec4<f32>, kind: u32) -> vec4<f32> {
|
|
56
|
-
if (kind == 1u) {
|
|
57
|
-
// ReLU on top of the rescaled+saturated input. The input is
|
|
58
|
-
// already in [-1, 1], so this gives [0, 1].
|
|
59
|
-
return max(vec4<f32>(0.0), x);
|
|
60
|
-
} else if (kind == 2u) {
|
|
61
|
-
// Leaky ReLU, alpha = 0.1
|
|
62
|
-
return select(x, 0.1 * x, x < vec4<f32>(0.0));
|
|
63
|
-
}
|
|
64
|
-
// identity — used by the output heads
|
|
65
|
-
return x;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
fn nss_load_input_pixel(coord: vec2<i32>, group_z: u32) -> vec4<f32> {
|
|
69
|
-
let dim = textureDimensions(tInput);
|
|
70
|
-
let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(dim.xy) - vec2<i32>(1, 1));
|
|
71
|
-
return textureLoad(tInput, vec3<i32>(clamped, i32(group_z)), 0);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Look up one entry in a layer's per-head LUT (TOSA TABLE op).
|
|
75
|
-
//
|
|
76
|
-
// value_fp is the un-rescaled fp accumulator scaled by the per-channel
|
|
77
|
-
// rescale_factor (= 127 * mult / 2^shift) - i.e. the int8 RESCALE
|
|
78
|
-
// result without the output_zp bias yet applied. output_zp is the
|
|
79
|
-
// per-head signed int8 bias from TOSA RESCALE; adding it before
|
|
80
|
-
// clamp+shift puts the LUT INDEX in the trained transition zone (each
|
|
81
|
-
// head's LUT has almost all of its dynamic range concentrated in a
|
|
82
|
-
// window centred on uint8 = output_zp + 128 - without applying it,
|
|
83
|
-
// the index lands in the flat tail and the network output collapses
|
|
84
|
-
// to a constant).
|
|
85
|
-
//
|
|
86
|
-
// LUT indexing: int8 input shifted to [0, 255]; LUT is 256 int8s
|
|
87
|
-
// packed 4-per-u32. ARM uses this to encode the trained activation
|
|
88
|
-
// function for the heads (sigmoid for ThetaAlpha, tanh-like S-curves
|
|
89
|
-
// for the KPN columns and FB).
|
|
90
|
-
//
|
|
91
|
-
// Output dequantisation matches ARM's Dequantize: clamp the int8 to
|
|
92
|
-
// [-127, 127] (folding -128 into -127 to dodge an off-by-one when the
|
|
93
|
-
// LUT table happens to store it), then map to fp via (x + 127) / 255
|
|
94
|
-
// - giving fp in [0, 1] (NOT [-1, 1] as a naive /127 would suggest).
|
|
95
|
-
fn nss_apply_lut(value_fp: f32, lut_off_u32: u32, output_zp: i32) -> f32 {
|
|
96
|
-
let int8_unbiased = i32(round(value_fp * 127.0));
|
|
97
|
-
let int8_in = clamp(int8_unbiased + output_zp, -128, 127);
|
|
98
|
-
let idx = u32(int8_in + 128); // shift to [0, 255]
|
|
99
|
-
let u32_idx = idx / 4u;
|
|
100
|
-
let lane = idx % 4u;
|
|
101
|
-
// unpack4xI8 returns vec4<i32> with sign-extended int8 values.
|
|
102
|
-
let four = unpack4xI8(luts[lut_off_u32 + u32_idx]);
|
|
103
|
-
let int8_out = max(four[lane], -127);
|
|
104
|
-
return f32(int8_out + 127) / 255.0;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
108
|
-
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
109
|
-
let out_dim = textureDimensions(tOutput);
|
|
110
|
-
let layer_out_groups = layer_config.out_channels / 4u;
|
|
111
|
-
|
|
112
|
-
if (any(gid.xy >= out_dim.xy) || gid.z >= layer_out_groups) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
let in_channels = layer_config.in_channels;
|
|
117
|
-
let k = layer_config.kernel_size;
|
|
118
|
-
let weights_off = layer_config.weights_offset;
|
|
119
|
-
let bias_off = layer_config.bias_offset;
|
|
120
|
-
let rescale_off = layer_config.rescale_offset;
|
|
121
|
-
let lut_off = layer_config.lut_offset;
|
|
122
|
-
let activation = layer_config.activation_kind;
|
|
123
|
-
let has_bias = layer_config.has_bias;
|
|
124
|
-
let has_lut = layer_config.has_lut;
|
|
125
|
-
let out_layer_off = layer_config.output_layer_offset;
|
|
126
|
-
let output_zp = layer_config.output_zp;
|
|
127
|
-
|
|
128
|
-
let in_groups = in_channels / 4u;
|
|
129
|
-
|
|
130
|
-
let pixel = vec2<i32>(gid.xy);
|
|
131
|
-
let out_group = gid.z;
|
|
132
|
-
let out_base_channel = out_group * 4u;
|
|
133
|
-
|
|
134
|
-
// Bias seeds the accumulator (already dequantized at conversion time).
|
|
135
|
-
var acc = vec4<f32>(0.0);
|
|
136
|
-
if (has_bias != 0u) {
|
|
137
|
-
let b0 = biases[bias_off + out_base_channel + 0u];
|
|
138
|
-
let b1 = biases[bias_off + out_base_channel + 1u];
|
|
139
|
-
let b2 = biases[bias_off + out_base_channel + 2u];
|
|
140
|
-
let b3 = biases[bias_off + out_base_channel + 3u];
|
|
141
|
-
acc = vec4<f32>(b0, b1, b2, b3);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
let half_k = i32(k) / 2;
|
|
145
|
-
|
|
146
|
-
// Weights: (out_channels, ky, kx, in_channels) row-major, packed int8
|
|
147
|
-
// along the innermost dim.
|
|
148
|
-
let row_stride_u32 = in_channels / 4u;
|
|
149
|
-
let kxy_stride_u32 = k * row_stride_u32;
|
|
150
|
-
let oc_stride_u32 = k * kxy_stride_u32;
|
|
151
|
-
|
|
152
|
-
for (var ky = 0u; ky < k; ky = ky + 1u) {
|
|
153
|
-
for (var kx = 0u; kx < k; kx = kx + 1u) {
|
|
154
|
-
let tap = pixel + vec2<i32>(i32(kx) - half_k, i32(ky) - half_k);
|
|
155
|
-
|
|
156
|
-
for (var ig = 0u; ig < in_groups; ig = ig + 1u) {
|
|
157
|
-
let v = nss_load_input_pixel(tap, ig);
|
|
158
|
-
|
|
159
|
-
// 4 output lanes: 1 u32 = 4 int8 weights for this lane's
|
|
160
|
-
// (ky, kx, ic_group of 4 ic lanes).
|
|
161
|
-
let base_off = weights_off
|
|
162
|
-
+ ky * kxy_stride_u32
|
|
163
|
-
+ kx * row_stride_u32
|
|
164
|
-
+ ig;
|
|
165
|
-
|
|
166
|
-
let w0 = unpack4x8snorm(weights[base_off + (out_base_channel + 0u) * oc_stride_u32]);
|
|
167
|
-
let w1 = unpack4x8snorm(weights[base_off + (out_base_channel + 1u) * oc_stride_u32]);
|
|
168
|
-
let w2 = unpack4x8snorm(weights[base_off + (out_base_channel + 2u) * oc_stride_u32]);
|
|
169
|
-
let w3 = unpack4x8snorm(weights[base_off + (out_base_channel + 3u) * oc_stride_u32]);
|
|
170
|
-
|
|
171
|
-
acc.x += dot(v, w0);
|
|
172
|
-
acc.y += dot(v, w1);
|
|
173
|
-
acc.z += dot(v, w2);
|
|
174
|
-
acc.w += dot(v, w3);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Per-channel TOSA RESCALE (= 127 * mult / 2^shift, baked at
|
|
180
|
-
// conversion time). Then saturate to [-1, 1] (the int8 saturation
|
|
181
|
-
// that ARM's RESCALE applies implicitly).
|
|
182
|
-
//
|
|
183
|
-
// network_acc_scale (default 1.0) is a global multiplier on the
|
|
184
|
-
// accumulator — debug knob to compensate for the fp/int scale mismatch
|
|
185
|
-
// between our pipeline and ARM's training distribution. With it at 1
|
|
186
|
-
// the head LUTs return their centre values (≈0.498) on most pixels
|
|
187
|
-
// because the conv accumulators land too close to 0 to push the LUT
|
|
188
|
-
// out of its transition zone.
|
|
189
|
-
let r0 = rescales[rescale_off + out_base_channel + 0u];
|
|
190
|
-
let r1 = rescales[rescale_off + out_base_channel + 1u];
|
|
191
|
-
let r2 = rescales[rescale_off + out_base_channel + 2u];
|
|
192
|
-
let r3 = rescales[rescale_off + out_base_channel + 3u];
|
|
193
|
-
|
|
194
|
-
let rescaled = clamp(
|
|
195
|
-
acc * vec4<f32>(r0, r1, r2, r3) * settings.network_acc_scale,
|
|
196
|
-
vec4<f32>(-1.0),
|
|
197
|
-
vec4<f32>( 1.0),
|
|
198
|
-
);
|
|
199
|
-
|
|
200
|
-
var out_v: vec4<f32>;
|
|
201
|
-
if (has_lut != 0u) {
|
|
202
|
-
// Output heads: per-head transfer LUT replaces the activation.
|
|
203
|
-
out_v = vec4<f32>(
|
|
204
|
-
nss_apply_lut(rescaled.x, lut_off, output_zp),
|
|
205
|
-
nss_apply_lut(rescaled.y, lut_off, output_zp),
|
|
206
|
-
nss_apply_lut(rescaled.z, lut_off, output_zp),
|
|
207
|
-
nss_apply_lut(rescaled.w, lut_off, output_zp),
|
|
208
|
-
);
|
|
209
|
-
} else {
|
|
210
|
-
out_v = nss_activation(rescaled, activation);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
textureStore(tOutput, vec3<i32>(pixel, i32(out_layer_off + out_group)), out_v);
|
|
214
|
-
}
|
|
215
|
-
`, [
|
|
216
|
-
NSS_LAYER_CONFIG_STRUCT.declaration_chunk,
|
|
217
|
-
NSS_SETTINGS_STRUCT.declaration_chunk,
|
|
218
|
-
]
|
|
219
|
-
);
|
|
220
|
-
|
|
221
|
-
export const shader_nss_conv_layer = ComputeShader.from({
|
|
222
|
-
label: "NSS / conv layer",
|
|
223
|
-
body,
|
|
224
|
-
resources,
|
|
225
|
-
|
|
226
|
-
});
|
|
1
|
+
import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
5
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
6
|
+
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
7
|
+
import { NSS_LAYER_CONFIG_STRUCT } from "./NSS_LAYER_CONFIG_STRUCT.js";
|
|
8
|
+
import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* One 3x3 (or 1x1) convolution layer of the NSS network — int8 weights,
|
|
12
|
+
* f32 biases, per-channel TOSA RESCALE applied before activation.
|
|
13
|
+
*
|
|
14
|
+
* Pipeline per output channel:
|
|
15
|
+
* acc = sum(input * unpack4x8snorm(weight)) (over ic, ky, kx)
|
|
16
|
+
* acc += bias (when has_bias)
|
|
17
|
+
* acc *= rescale (per-channel, from ARM's RESCALE multipliers/shifts)
|
|
18
|
+
* acc = saturate to [-1, 1] (mirrors int8 saturation)
|
|
19
|
+
* acc = activation(acc) (ReLU clamps to [0, 1]; identity passes through)
|
|
20
|
+
* textureStore(...)
|
|
21
|
+
*
|
|
22
|
+
* The TOSA RESCALE half is what keeps intermediate activations bounded —
|
|
23
|
+
* without it the encoder's 64-channel layers blow up by 4-5 orders of
|
|
24
|
+
* magnitude and downstream layers degenerate.
|
|
25
|
+
*
|
|
26
|
+
* Weights live in a shared packed-int8 storage buffer (`array<u32>`,
|
|
27
|
+
* 4 int8 weights per u32 along the in_channels dimension). Biases and
|
|
28
|
+
* rescales live in separate f32 storage buffers. `output_layer_offset`
|
|
29
|
+
* lets multiple parallel output heads share one destination texture.
|
|
30
|
+
*
|
|
31
|
+
* Edge handling: clamp-to-edge.
|
|
32
|
+
*/
|
|
33
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
34
|
+
resources.createGroup()
|
|
35
|
+
.addTexture("tInput", "float", "3d")
|
|
36
|
+
.addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
|
|
37
|
+
.addStorageBuffer("weights", WebGPUArray.from(u32))
|
|
38
|
+
.addStorageBuffer("biases", WebGPUArray.from(f32))
|
|
39
|
+
.addStorageBuffer("rescales", WebGPUArray.from(f32))
|
|
40
|
+
// Per-head transfer LUTs (TOSA TABLE op). 256 int8 entries packed
|
|
41
|
+
// 4-per-u32. Only output heads (layers with `has_lut == 1`) read
|
|
42
|
+
// from this; body layers ignore the binding and use the inline
|
|
43
|
+
// ReLU activation_kind path.
|
|
44
|
+
.addStorageBuffer("luts", WebGPUArray.from(u32))
|
|
45
|
+
.addUniform("layer_config", NSS_LAYER_CONFIG_STRUCT)
|
|
46
|
+
// Shared per-frame settings — currently only network_acc_scale is read,
|
|
47
|
+
// but binding the whole struct keeps it consistent with the other passes.
|
|
48
|
+
.addUniform("settings", NSS_SETTINGS_STRUCT)
|
|
49
|
+
;
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const body = CodeChunk.from(
|
|
53
|
+
//language=WGSL
|
|
54
|
+
`
|
|
55
|
+
fn nss_activation(x: vec4<f32>, kind: u32) -> vec4<f32> {
|
|
56
|
+
if (kind == 1u) {
|
|
57
|
+
// ReLU on top of the rescaled+saturated input. The input is
|
|
58
|
+
// already in [-1, 1], so this gives [0, 1].
|
|
59
|
+
return max(vec4<f32>(0.0), x);
|
|
60
|
+
} else if (kind == 2u) {
|
|
61
|
+
// Leaky ReLU, alpha = 0.1
|
|
62
|
+
return select(x, 0.1 * x, x < vec4<f32>(0.0));
|
|
63
|
+
}
|
|
64
|
+
// identity — used by the output heads
|
|
65
|
+
return x;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
fn nss_load_input_pixel(coord: vec2<i32>, group_z: u32) -> vec4<f32> {
|
|
69
|
+
let dim = textureDimensions(tInput);
|
|
70
|
+
let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(dim.xy) - vec2<i32>(1, 1));
|
|
71
|
+
return textureLoad(tInput, vec3<i32>(clamped, i32(group_z)), 0);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Look up one entry in a layer's per-head LUT (TOSA TABLE op).
|
|
75
|
+
//
|
|
76
|
+
// value_fp is the un-rescaled fp accumulator scaled by the per-channel
|
|
77
|
+
// rescale_factor (= 127 * mult / 2^shift) - i.e. the int8 RESCALE
|
|
78
|
+
// result without the output_zp bias yet applied. output_zp is the
|
|
79
|
+
// per-head signed int8 bias from TOSA RESCALE; adding it before
|
|
80
|
+
// clamp+shift puts the LUT INDEX in the trained transition zone (each
|
|
81
|
+
// head's LUT has almost all of its dynamic range concentrated in a
|
|
82
|
+
// window centred on uint8 = output_zp + 128 - without applying it,
|
|
83
|
+
// the index lands in the flat tail and the network output collapses
|
|
84
|
+
// to a constant).
|
|
85
|
+
//
|
|
86
|
+
// LUT indexing: int8 input shifted to [0, 255]; LUT is 256 int8s
|
|
87
|
+
// packed 4-per-u32. ARM uses this to encode the trained activation
|
|
88
|
+
// function for the heads (sigmoid for ThetaAlpha, tanh-like S-curves
|
|
89
|
+
// for the KPN columns and FB).
|
|
90
|
+
//
|
|
91
|
+
// Output dequantisation matches ARM's Dequantize: clamp the int8 to
|
|
92
|
+
// [-127, 127] (folding -128 into -127 to dodge an off-by-one when the
|
|
93
|
+
// LUT table happens to store it), then map to fp via (x + 127) / 255
|
|
94
|
+
// - giving fp in [0, 1] (NOT [-1, 1] as a naive /127 would suggest).
|
|
95
|
+
fn nss_apply_lut(value_fp: f32, lut_off_u32: u32, output_zp: i32) -> f32 {
|
|
96
|
+
let int8_unbiased = i32(round(value_fp * 127.0));
|
|
97
|
+
let int8_in = clamp(int8_unbiased + output_zp, -128, 127);
|
|
98
|
+
let idx = u32(int8_in + 128); // shift to [0, 255]
|
|
99
|
+
let u32_idx = idx / 4u;
|
|
100
|
+
let lane = idx % 4u;
|
|
101
|
+
// unpack4xI8 returns vec4<i32> with sign-extended int8 values.
|
|
102
|
+
let four = unpack4xI8(luts[lut_off_u32 + u32_idx]);
|
|
103
|
+
let int8_out = max(four[lane], -127);
|
|
104
|
+
return f32(int8_out + 127) / 255.0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
108
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
109
|
+
let out_dim = textureDimensions(tOutput);
|
|
110
|
+
let layer_out_groups = layer_config.out_channels / 4u;
|
|
111
|
+
|
|
112
|
+
if (any(gid.xy >= out_dim.xy) || gid.z >= layer_out_groups) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
let in_channels = layer_config.in_channels;
|
|
117
|
+
let k = layer_config.kernel_size;
|
|
118
|
+
let weights_off = layer_config.weights_offset;
|
|
119
|
+
let bias_off = layer_config.bias_offset;
|
|
120
|
+
let rescale_off = layer_config.rescale_offset;
|
|
121
|
+
let lut_off = layer_config.lut_offset;
|
|
122
|
+
let activation = layer_config.activation_kind;
|
|
123
|
+
let has_bias = layer_config.has_bias;
|
|
124
|
+
let has_lut = layer_config.has_lut;
|
|
125
|
+
let out_layer_off = layer_config.output_layer_offset;
|
|
126
|
+
let output_zp = layer_config.output_zp;
|
|
127
|
+
|
|
128
|
+
let in_groups = in_channels / 4u;
|
|
129
|
+
|
|
130
|
+
let pixel = vec2<i32>(gid.xy);
|
|
131
|
+
let out_group = gid.z;
|
|
132
|
+
let out_base_channel = out_group * 4u;
|
|
133
|
+
|
|
134
|
+
// Bias seeds the accumulator (already dequantized at conversion time).
|
|
135
|
+
var acc = vec4<f32>(0.0);
|
|
136
|
+
if (has_bias != 0u) {
|
|
137
|
+
let b0 = biases[bias_off + out_base_channel + 0u];
|
|
138
|
+
let b1 = biases[bias_off + out_base_channel + 1u];
|
|
139
|
+
let b2 = biases[bias_off + out_base_channel + 2u];
|
|
140
|
+
let b3 = biases[bias_off + out_base_channel + 3u];
|
|
141
|
+
acc = vec4<f32>(b0, b1, b2, b3);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
let half_k = i32(k) / 2;
|
|
145
|
+
|
|
146
|
+
// Weights: (out_channels, ky, kx, in_channels) row-major, packed int8
|
|
147
|
+
// along the innermost dim.
|
|
148
|
+
let row_stride_u32 = in_channels / 4u;
|
|
149
|
+
let kxy_stride_u32 = k * row_stride_u32;
|
|
150
|
+
let oc_stride_u32 = k * kxy_stride_u32;
|
|
151
|
+
|
|
152
|
+
for (var ky = 0u; ky < k; ky = ky + 1u) {
|
|
153
|
+
for (var kx = 0u; kx < k; kx = kx + 1u) {
|
|
154
|
+
let tap = pixel + vec2<i32>(i32(kx) - half_k, i32(ky) - half_k);
|
|
155
|
+
|
|
156
|
+
for (var ig = 0u; ig < in_groups; ig = ig + 1u) {
|
|
157
|
+
let v = nss_load_input_pixel(tap, ig);
|
|
158
|
+
|
|
159
|
+
// 4 output lanes: 1 u32 = 4 int8 weights for this lane's
|
|
160
|
+
// (ky, kx, ic_group of 4 ic lanes).
|
|
161
|
+
let base_off = weights_off
|
|
162
|
+
+ ky * kxy_stride_u32
|
|
163
|
+
+ kx * row_stride_u32
|
|
164
|
+
+ ig;
|
|
165
|
+
|
|
166
|
+
let w0 = unpack4x8snorm(weights[base_off + (out_base_channel + 0u) * oc_stride_u32]);
|
|
167
|
+
let w1 = unpack4x8snorm(weights[base_off + (out_base_channel + 1u) * oc_stride_u32]);
|
|
168
|
+
let w2 = unpack4x8snorm(weights[base_off + (out_base_channel + 2u) * oc_stride_u32]);
|
|
169
|
+
let w3 = unpack4x8snorm(weights[base_off + (out_base_channel + 3u) * oc_stride_u32]);
|
|
170
|
+
|
|
171
|
+
acc.x += dot(v, w0);
|
|
172
|
+
acc.y += dot(v, w1);
|
|
173
|
+
acc.z += dot(v, w2);
|
|
174
|
+
acc.w += dot(v, w3);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Per-channel TOSA RESCALE (= 127 * mult / 2^shift, baked at
|
|
180
|
+
// conversion time). Then saturate to [-1, 1] (the int8 saturation
|
|
181
|
+
// that ARM's RESCALE applies implicitly).
|
|
182
|
+
//
|
|
183
|
+
// network_acc_scale (default 1.0) is a global multiplier on the
|
|
184
|
+
// accumulator — debug knob to compensate for the fp/int scale mismatch
|
|
185
|
+
// between our pipeline and ARM's training distribution. With it at 1
|
|
186
|
+
// the head LUTs return their centre values (≈0.498) on most pixels
|
|
187
|
+
// because the conv accumulators land too close to 0 to push the LUT
|
|
188
|
+
// out of its transition zone.
|
|
189
|
+
let r0 = rescales[rescale_off + out_base_channel + 0u];
|
|
190
|
+
let r1 = rescales[rescale_off + out_base_channel + 1u];
|
|
191
|
+
let r2 = rescales[rescale_off + out_base_channel + 2u];
|
|
192
|
+
let r3 = rescales[rescale_off + out_base_channel + 3u];
|
|
193
|
+
|
|
194
|
+
let rescaled = clamp(
|
|
195
|
+
acc * vec4<f32>(r0, r1, r2, r3) * settings.network_acc_scale,
|
|
196
|
+
vec4<f32>(-1.0),
|
|
197
|
+
vec4<f32>( 1.0),
|
|
198
|
+
);
|
|
199
|
+
|
|
200
|
+
var out_v: vec4<f32>;
|
|
201
|
+
if (has_lut != 0u) {
|
|
202
|
+
// Output heads: per-head transfer LUT replaces the activation.
|
|
203
|
+
out_v = vec4<f32>(
|
|
204
|
+
nss_apply_lut(rescaled.x, lut_off, output_zp),
|
|
205
|
+
nss_apply_lut(rescaled.y, lut_off, output_zp),
|
|
206
|
+
nss_apply_lut(rescaled.z, lut_off, output_zp),
|
|
207
|
+
nss_apply_lut(rescaled.w, lut_off, output_zp),
|
|
208
|
+
);
|
|
209
|
+
} else {
|
|
210
|
+
out_v = nss_activation(rescaled, activation);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
textureStore(tOutput, vec3<i32>(pixel, i32(out_layer_off + out_group)), out_v);
|
|
214
|
+
}
|
|
215
|
+
`, [
|
|
216
|
+
NSS_LAYER_CONFIG_STRUCT.declaration_chunk,
|
|
217
|
+
NSS_SETTINGS_STRUCT.declaration_chunk,
|
|
218
|
+
]
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
export const shader_nss_conv_layer = ComputeShader.from({
|
|
222
|
+
label: "NSS / conv layer",
|
|
223
|
+
body,
|
|
224
|
+
resources,
|
|
225
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_nss_extract_feedback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js"],"names":[],"mappings":"AA4CA,
|
|
1
|
+
{"version":3,"file":"shader_nss_extract_feedback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js"],"names":[],"mappings":"AA4CA,wDAIG;8BA/C2B,+BAA+B"}
|
|
@@ -1,50 +1,49 @@
|
|
|
1
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
3
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
-
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Copies the feedback channel-group (z = 0 — head slot 0 in ARM's
|
|
8
|
-
* quantized model output ordering, see NSS_NETWORK_SCHEMA) of the
|
|
9
|
-
* network's 3D output tensor into a standalone 2D rgba16f texture, so
|
|
10
|
-
* the next frame's preprocess pass can sample it as a regular 2D
|
|
11
|
-
* texture (with bilinear filtering for the warp).
|
|
12
|
-
*
|
|
13
|
-
* Trivial pass — included as a separate shader rather than folded into
|
|
14
|
-
* postprocess because postprocess runs at output-res while feedback is
|
|
15
|
-
* needed at render-res.
|
|
16
|
-
*/
|
|
17
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
18
|
-
resources.createGroup()
|
|
19
|
-
.addTexture("tNetworkOut", "float", "3d")
|
|
20
|
-
.addStorageTexture("tFeedback", "rgba16float", "2d", "write-only")
|
|
21
|
-
;
|
|
22
|
-
|
|
23
|
-
const body = CodeChunk.from(
|
|
24
|
-
//language=WGSL
|
|
25
|
-
`
|
|
26
|
-
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
27
|
-
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
28
|
-
let dim = textureDimensions(tFeedback);
|
|
29
|
-
|
|
30
|
-
if (any(gid.xy >= dim)) {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
let st = vec2<i32>(gid.xy);
|
|
35
|
-
|
|
36
|
-
// Slot 0 of the network output is the feedback tensor (ARM's
|
|
37
|
-
// quantized-model OutputIndices.Feedback = 0).
|
|
38
|
-
let fb = textureLoad(tNetworkOut, vec3<i32>(st, 0), 0);
|
|
39
|
-
|
|
40
|
-
textureStore(tFeedback, st, fb);
|
|
41
|
-
}
|
|
42
|
-
`
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
export const shader_nss_extract_feedback = ComputeShader.from({
|
|
46
|
-
label: "NSS / extract feedback",
|
|
47
|
-
body,
|
|
48
|
-
resources,
|
|
49
|
-
|
|
50
|
-
});
|
|
1
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
3
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
4
|
+
import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Copies the feedback channel-group (z = 0 — head slot 0 in ARM's
|
|
8
|
+
* quantized model output ordering, see NSS_NETWORK_SCHEMA) of the
|
|
9
|
+
* network's 3D output tensor into a standalone 2D rgba16f texture, so
|
|
10
|
+
* the next frame's preprocess pass can sample it as a regular 2D
|
|
11
|
+
* texture (with bilinear filtering for the warp).
|
|
12
|
+
*
|
|
13
|
+
* Trivial pass — included as a separate shader rather than folded into
|
|
14
|
+
* postprocess because postprocess runs at output-res while feedback is
|
|
15
|
+
* needed at render-res.
|
|
16
|
+
*/
|
|
17
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
18
|
+
resources.createGroup()
|
|
19
|
+
.addTexture("tNetworkOut", "float", "3d")
|
|
20
|
+
.addStorageTexture("tFeedback", "rgba16float", "2d", "write-only")
|
|
21
|
+
;
|
|
22
|
+
|
|
23
|
+
const body = CodeChunk.from(
|
|
24
|
+
//language=WGSL
|
|
25
|
+
`
|
|
26
|
+
@compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
|
|
27
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
28
|
+
let dim = textureDimensions(tFeedback);
|
|
29
|
+
|
|
30
|
+
if (any(gid.xy >= dim)) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let st = vec2<i32>(gid.xy);
|
|
35
|
+
|
|
36
|
+
// Slot 0 of the network output is the feedback tensor (ARM's
|
|
37
|
+
// quantized-model OutputIndices.Feedback = 0).
|
|
38
|
+
let fb = textureLoad(tNetworkOut, vec3<i32>(st, 0), 0);
|
|
39
|
+
|
|
40
|
+
textureStore(tFeedback, st, fb);
|
|
41
|
+
}
|
|
42
|
+
`
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
export const shader_nss_extract_feedback = ComputeShader.from({
|
|
46
|
+
label: "NSS / extract feedback",
|
|
47
|
+
body,
|
|
48
|
+
resources,
|
|
49
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_nss_postprocess.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_postprocess.js"],"names":[],"mappings":"AA8RA,
|
|
1
|
+
{"version":3,"file":"shader_nss_postprocess.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_postprocess.js"],"names":[],"mappings":"AA8RA,mDAIG;8BAjS2B,+BAA+B"}
|