@woosh/meep-engine 3.12.0 → 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/package.json +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
- 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/shader_highlight_outline.js +150 -150
- 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 -1
- 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 -1
- 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 +3 -1
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
- 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/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
- 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 +100 -98
- 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 +215 -212
- 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 +135 -120
- 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 +77 -75
- 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 +375 -371
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
- 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 +325 -319
- 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 +3 -1
- 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/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 +125 -121
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
- 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 +72 -69
- 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/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 +187 -184
- 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 +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- 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 +145 -142
- 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 -82
- 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 +143 -140
- 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 -84
- 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 -191
- 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/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 +2 -2
- 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/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 +3 -4
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
- 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/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 +121 -119
- 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 +2 -4
- 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 +269 -266
- 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 +273 -270
- 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 +70 -68
- 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/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/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 +114 -109
- 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 +118 -115
- 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 +69 -65
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
- 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 +139 -136
- 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 +131 -129
- 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 +101 -99
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
- 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 -144
- package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +14 -17
- 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/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
- 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 +4 -2
- 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 +7 -8
- 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 +233 -231
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +8 -3
- 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
|
@@ -1,231 +1,233 @@
|
|
|
1
|
-
import { atomic_u32, f32, u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
-
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
-
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
-
import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
|
|
5
|
-
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
6
|
-
import {
|
|
7
|
-
VIZ_BUFFER_INVALID_MESH_VALUE
|
|
8
|
-
} from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
|
|
9
|
-
import { MATERIAL_METADATA_STRUCT } from "../../material/MATERIAL_METADATA_STRUCT.js";
|
|
10
|
-
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
11
|
-
import { RENDER_GLOBAL_MIP_BIAS } from "../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
|
|
12
|
-
import { chunk_barycentric_full } from "../../shader/chunk/geometry/triangle/chunk_barycentric_full.js";
|
|
13
|
-
import { chunk_barycentric_interpolate_uv } from "../../shader/chunk/geometry/triangle/chunk_barycentric_interpolate_uv.js";
|
|
14
|
-
import { chunk_decode_meshlet_element } from "../../shader/chunk/geometry/meshlet/chunk_decode_meshlet_element.js";
|
|
15
|
-
import {
|
|
16
|
-
chunk_read_meshlet_triangle_vertices
|
|
17
|
-
} from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_vertices.js";
|
|
18
|
-
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
19
|
-
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
20
|
-
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
21
|
-
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
22
|
-
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
23
|
-
import { chunk_vt_request_key } from "./chunk_vt_request_key.js";
|
|
24
|
-
import { VT_STACK_ID_INVALID } from "./VT_CONSTANTS.js";
|
|
25
|
-
import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Uniform parameters of the feedback pass.
|
|
29
|
-
*
|
|
30
|
-
* `stride` — the pass samples one pixel per stride×stride block;
|
|
31
|
-
* `jitter` — which pixel of the block this frame (cycled by the manager so
|
|
32
|
-
* coverage integrates to every pixel over stride² frames);
|
|
33
|
-
* `mip_bias` — added to the requested LOD; carries the residency
|
|
34
|
-
* (over-subscription) bias so pressure degrades to blur instead of thrash.
|
|
35
|
-
*/
|
|
36
|
-
export const VT_FEEDBACK_PARAMS_STRUCT = WebGPUStruct.from({
|
|
37
|
-
stride: u32,
|
|
38
|
-
jitter: vec2u,
|
|
39
|
-
mip_bias: f32,
|
|
40
|
-
}, "VTFeedbackParams").pack();
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Matches the fragment_gbuffer derivative bias so feedback requests the mips
|
|
44
|
-
* the material pass actually samples.
|
|
45
|
-
* @type {number}
|
|
46
|
-
*/
|
|
47
|
-
const MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
|
|
48
|
-
|
|
49
|
-
export const VT_FEEDBACK_WORKGROUP_SIZE = 8;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Builds the feedback compute shader: one thread per sampled pixel, reading
|
|
53
|
-
* the visibility buffer and reproducing the material pass's UV + analytic
|
|
54
|
-
* gradient math (vertex pulling + perspective-correct barycentric
|
|
55
|
-
* derivatives), then inserting the touched (stack, mip, page) key into a
|
|
56
|
-
* global hash set of unique requests.
|
|
57
|
-
*
|
|
58
|
-
* This is the "no second geometry pass" property: the viz buffer already
|
|
59
|
-
* identifies the triangle per pixel, so usage detection is a bounded-cost
|
|
60
|
-
* screen-space compute pass regardless of scene complexity, shared by every
|
|
61
|
-
* virtual texture in the frame.
|
|
62
|
-
*
|
|
63
|
-
* The hash set is insert-only and cleared each frame; the CPU reads the raw
|
|
64
|
-
* table back and treats presence as "touched this frame" — both residency
|
|
65
|
-
* touches (LRU) and misses (load requests) fall out of the same data.
|
|
66
|
-
*
|
|
67
|
-
* @param {Object} config
|
|
68
|
-
* @param {CodeChunk} config.chunk_vt_lookup from {@link build_chunk_vt_lookup}
|
|
69
|
-
* @param {number} config.hash_capacity power of two
|
|
70
|
-
* @returns {ComputeShader}
|
|
71
|
-
*/
|
|
72
|
-
export function build_shader_vt_feedback({ chunk_vt_lookup, hash_capacity }) {
|
|
73
|
-
|
|
74
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
.
|
|
81
|
-
.
|
|
82
|
-
.
|
|
83
|
-
.addStorageBuffer("
|
|
84
|
-
.addStorageBuffer("
|
|
85
|
-
.addStorageBuffer("
|
|
86
|
-
.addStorageBuffer("
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
let
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
let
|
|
170
|
-
|
|
171
|
-
let
|
|
172
|
-
|
|
173
|
-
let
|
|
174
|
-
|
|
175
|
-
let
|
|
176
|
-
|
|
177
|
-
let
|
|
178
|
-
|
|
179
|
-
let
|
|
180
|
-
|
|
181
|
-
let
|
|
182
|
-
|
|
183
|
-
let
|
|
184
|
-
|
|
185
|
-
let
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
let
|
|
208
|
-
|
|
209
|
-
let
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
1
|
+
import { atomic_u32, f32, u32, vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
+
import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
|
|
5
|
+
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
6
|
+
import {
|
|
7
|
+
VIZ_BUFFER_INVALID_MESH_VALUE
|
|
8
|
+
} from "../../rasterize/native/viz/VIZ_BUFFER_INVALID_MESH_VALUE.js";
|
|
9
|
+
import { MATERIAL_METADATA_STRUCT } from "../../material/MATERIAL_METADATA_STRUCT.js";
|
|
10
|
+
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
11
|
+
import { RENDER_GLOBAL_MIP_BIAS } from "../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
|
|
12
|
+
import { chunk_barycentric_full } from "../../shader/chunk/geometry/triangle/chunk_barycentric_full.js";
|
|
13
|
+
import { chunk_barycentric_interpolate_uv } from "../../shader/chunk/geometry/triangle/chunk_barycentric_interpolate_uv.js";
|
|
14
|
+
import { chunk_decode_meshlet_element } from "../../shader/chunk/geometry/meshlet/chunk_decode_meshlet_element.js";
|
|
15
|
+
import {
|
|
16
|
+
chunk_read_meshlet_triangle_vertices
|
|
17
|
+
} from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_vertices.js";
|
|
18
|
+
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
19
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
20
|
+
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
21
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
22
|
+
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
23
|
+
import { chunk_vt_request_key } from "./chunk_vt_request_key.js";
|
|
24
|
+
import { VT_STACK_ID_INVALID } from "./VT_CONSTANTS.js";
|
|
25
|
+
import { VT_STACK_INFO_STRUCT } from "./VT_STACK_INFO_STRUCT.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Uniform parameters of the feedback pass.
|
|
29
|
+
*
|
|
30
|
+
* `stride` — the pass samples one pixel per stride×stride block;
|
|
31
|
+
* `jitter` — which pixel of the block this frame (cycled by the manager so
|
|
32
|
+
* coverage integrates to every pixel over stride² frames);
|
|
33
|
+
* `mip_bias` — added to the requested LOD; carries the residency
|
|
34
|
+
* (over-subscription) bias so pressure degrades to blur instead of thrash.
|
|
35
|
+
*/
|
|
36
|
+
export const VT_FEEDBACK_PARAMS_STRUCT = WebGPUStruct.from({
|
|
37
|
+
stride: u32,
|
|
38
|
+
jitter: vec2u,
|
|
39
|
+
mip_bias: f32,
|
|
40
|
+
}, "VTFeedbackParams").pack();
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Matches the fragment_gbuffer derivative bias so feedback requests the mips
|
|
44
|
+
* the material pass actually samples.
|
|
45
|
+
* @type {number}
|
|
46
|
+
*/
|
|
47
|
+
const MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
|
|
48
|
+
|
|
49
|
+
export const VT_FEEDBACK_WORKGROUP_SIZE = 8;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Builds the feedback compute shader: one thread per sampled pixel, reading
|
|
53
|
+
* the visibility buffer and reproducing the material pass's UV + analytic
|
|
54
|
+
* gradient math (vertex pulling + perspective-correct barycentric
|
|
55
|
+
* derivatives), then inserting the touched (stack, mip, page) key into a
|
|
56
|
+
* global hash set of unique requests.
|
|
57
|
+
*
|
|
58
|
+
* This is the "no second geometry pass" property: the viz buffer already
|
|
59
|
+
* identifies the triangle per pixel, so usage detection is a bounded-cost
|
|
60
|
+
* screen-space compute pass regardless of scene complexity, shared by every
|
|
61
|
+
* virtual texture in the frame.
|
|
62
|
+
*
|
|
63
|
+
* The hash set is insert-only and cleared each frame; the CPU reads the raw
|
|
64
|
+
* table back and treats presence as "touched this frame" — both residency
|
|
65
|
+
* touches (LRU) and misses (load requests) fall out of the same data.
|
|
66
|
+
*
|
|
67
|
+
* @param {Object} config
|
|
68
|
+
* @param {CodeChunk} config.chunk_vt_lookup from {@link build_chunk_vt_lookup}
|
|
69
|
+
* @param {number} config.hash_capacity power of two
|
|
70
|
+
* @returns {ComputeShader}
|
|
71
|
+
*/
|
|
72
|
+
export function build_shader_vt_feedback({ chunk_vt_lookup, hash_capacity }) {
|
|
73
|
+
|
|
74
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
75
|
+
|
|
76
|
+
// per-dispatch, 16 bytes, read-only: immediate data rather than a uniform buffer
|
|
77
|
+
resources.setImmediate("vt_params", VT_FEEDBACK_PARAMS_STRUCT);
|
|
78
|
+
|
|
79
|
+
resources.createGroup()
|
|
80
|
+
.addTexture("viz_buffer_triangle", "uint")
|
|
81
|
+
.addTexture("viz_buffer_mesh", "uint")
|
|
82
|
+
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
83
|
+
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
84
|
+
.addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
|
|
85
|
+
.addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE)
|
|
86
|
+
.addStorageBuffer("material_metadata", WebGPUArray.from(MATERIAL_METADATA_STRUCT))
|
|
87
|
+
.addStorageBuffer("vt_stacks", WebGPUArray.from(VT_STACK_INFO_STRUCT))
|
|
88
|
+
.addStorageBuffer("vt_requests", WebGPUArray.from(atomic_u32), true);
|
|
89
|
+
|
|
90
|
+
const body = CodeChunk.from(
|
|
91
|
+
//language=WGSL
|
|
92
|
+
`
|
|
93
|
+
const VT_HASH_CAPACITY_MASK: u32 = ${hash_capacity - 1}u;
|
|
94
|
+
const VT_HASH_MAX_PROBES: u32 = 32u;
|
|
95
|
+
|
|
96
|
+
const MIP_BIAS: f32 = ${MIP_DERIVATIVE_BIAS.toFixed(8)};
|
|
97
|
+
|
|
98
|
+
// Insert-only open-addressing hash set. Values are stored as key+1 so a
|
|
99
|
+
// zero-cleared buffer means "all empty" (same conventions as
|
|
100
|
+
// common/hash_table, which is the CPU-build/GPU-read counterpart of this
|
|
101
|
+
// GPU-insert/CPU-read set; see also the SHARC hash map for the bucketed
|
|
102
|
+
// key->index variant).
|
|
103
|
+
//
|
|
104
|
+
// Forward-progress note: this loop never waits on another invocation's
|
|
105
|
+
// progress. The atomicCompareExchangeWeak retry only re-tests a *local*
|
|
106
|
+
// spurious failure, every iteration consumes the shared probe budget, and
|
|
107
|
+
// the loop is hard-bounded at VT_HASH_MAX_PROBES regardless of what other
|
|
108
|
+
// threads do. On exhaustion the fallback is to DROP the request — benign,
|
|
109
|
+
// feedback re-emits it next frame. Contrast with the decoupled-lookback
|
|
110
|
+
// spin in common/prefix_sum/v1/shader_prefix_scan_csdldf.js, where the
|
|
111
|
+
// awaited value is required for correctness and the bounded spin
|
|
112
|
+
// (MAX_SPIN_COUNT) must therefore pair with a local recompute fallback.
|
|
113
|
+
fn vt_request_insert(key: u32) {
|
|
114
|
+
let stored = key + 1u;
|
|
115
|
+
|
|
116
|
+
var h = hash_lowbias32(key) & VT_HASH_CAPACITY_MASK;
|
|
117
|
+
|
|
118
|
+
for (var i = 0u; i < VT_HASH_MAX_PROBES; i++) {
|
|
119
|
+
let existing = atomicLoad(&vt_requests[h]);
|
|
120
|
+
|
|
121
|
+
if (existing == stored) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (existing == 0u) {
|
|
126
|
+
let r = atomicCompareExchangeWeak(&vt_requests[h], 0u, stored);
|
|
127
|
+
|
|
128
|
+
if (r.exchanged || r.old_value == stored) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (r.old_value == 0u) {
|
|
133
|
+
// spurious weak failure — retry the same slot
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
h = (h + 1u) & VT_HASH_CAPACITY_MASK;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@compute @workgroup_size(${VT_FEEDBACK_WORKGROUP_SIZE}, ${VT_FEEDBACK_WORKGROUP_SIZE}, 1)
|
|
143
|
+
fn main(
|
|
144
|
+
@builtin(global_invocation_id) gid: vec3<u32>,
|
|
145
|
+
) {
|
|
146
|
+
let pixel = gid.xy * vt_params.stride + vt_params.jitter;
|
|
147
|
+
|
|
148
|
+
if (pixel.x >= view.width || pixel.y >= view.height) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let mesh_index = textureLoad(viz_buffer_mesh, vec2<i32>(pixel), 0).r;
|
|
153
|
+
|
|
154
|
+
if (mesh_index == ${VIZ_BUFFER_INVALID_MESH_VALUE}u) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
let mesh = scene_read_mesh(&scene_database, mesh_index);
|
|
159
|
+
|
|
160
|
+
let stack_id = material_metadata[mesh.material].vt_stack;
|
|
161
|
+
|
|
162
|
+
if (stack_id == ${VT_STACK_ID_INVALID}u) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
let info = vt_stacks[stack_id];
|
|
167
|
+
|
|
168
|
+
// ── UV + gradients, mirroring fragment_gbuffer ──────────────────
|
|
169
|
+
let encoded_meshlet_triangle = textureLoad(viz_buffer_triangle, vec2<i32>(pixel), 0).r;
|
|
170
|
+
|
|
171
|
+
let decoded = decode_meshlet_element(encoded_meshlet_triangle);
|
|
172
|
+
let meshlet_id = decoded[0];
|
|
173
|
+
let meshlet_triangle_id = decoded[1];
|
|
174
|
+
|
|
175
|
+
let node = scene_read_node(&scene_database, mesh.node);
|
|
176
|
+
|
|
177
|
+
let triangle = read_meshlet_triangle_vertices(meshlet_id, meshlet_triangle_id);
|
|
178
|
+
|
|
179
|
+
let mesh_transform = node.global;
|
|
180
|
+
|
|
181
|
+
let p0 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.a.position, 1.0));
|
|
182
|
+
let p1 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.b.position, 1.0));
|
|
183
|
+
let p2 = view.projection_matrix * (mesh_transform * vec4<f32>(triangle.c.position, 1.0));
|
|
184
|
+
|
|
185
|
+
let pixel_center = vec2<f32>(pixel) + 0.5;
|
|
186
|
+
|
|
187
|
+
let barycentric = barycentric_full(p0, p1, p2, pixel_center);
|
|
188
|
+
|
|
189
|
+
var uv0 = triangle.a.uv;
|
|
190
|
+
var uv1 = triangle.b.uv;
|
|
191
|
+
var uv2 = triangle.c.uv;
|
|
192
|
+
|
|
193
|
+
if ((info.flags & VT_STACK_FLAG_UV_SET_1) != 0u) {
|
|
194
|
+
uv0 = triangle.a.uv1;
|
|
195
|
+
uv1 = triangle.b.uv1;
|
|
196
|
+
uv2 = triangle.c.uv1;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
var uv_info = barycentric_interpolate_uv(barycentric, uv0, uv1, uv2);
|
|
200
|
+
|
|
201
|
+
let uv_derivative_bias = MIP_BIAS / view.upscale_ratio;
|
|
202
|
+
|
|
203
|
+
uv_info.ddx *= uv_derivative_bias.x;
|
|
204
|
+
uv_info.ddy *= uv_derivative_bias.y;
|
|
205
|
+
|
|
206
|
+
// ── request ─────────────────────────────────────────────────────
|
|
207
|
+
let uv_wrapped = vt_stack_wrap_uv(uv_info.uv, info.flags);
|
|
208
|
+
|
|
209
|
+
let mip = vt_mip_select(info, uv_info.ddx, uv_info.ddy, vt_params.mip_bias);
|
|
210
|
+
|
|
211
|
+
let page = vt_page_coord(info, uv_wrapped, mip);
|
|
212
|
+
|
|
213
|
+
vt_request_insert(vt_request_key_pack(stack_id, mip, page));
|
|
214
|
+
}
|
|
215
|
+
`,
|
|
216
|
+
[
|
|
217
|
+
chunk_vt_lookup,
|
|
218
|
+
chunk_vt_request_key,
|
|
219
|
+
chunk_hash_lowbias32,
|
|
220
|
+
chunk_scene_database_access,
|
|
221
|
+
chunk_decode_meshlet_element,
|
|
222
|
+
chunk_read_meshlet_triangle_vertices,
|
|
223
|
+
chunk_barycentric_full,
|
|
224
|
+
chunk_barycentric_interpolate_uv,
|
|
225
|
+
]
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
return ComputeShader.from({
|
|
229
|
+
label: 'vt/feedback',
|
|
230
|
+
body,
|
|
231
|
+
resources,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"AAyBA;;;;;;;GAOG;AACH,4DAFa;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,
|
|
1
|
+
{"version":3,"file":"graph_build_volumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/graph_build_volumetrics.js"],"names":[],"mappings":"AAyBA;;;;;;;GAOG;AACH,4DAFa;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAC,CA8DjE;AAqTD;;;;;;;;;;;;;;;;;;GAkBG;AACH;;;;;EAwKC"}
|
|
@@ -43,14 +43,12 @@ export function graph_integrate_sky({ graph }) {
|
|
|
43
43
|
|
|
44
44
|
const encoder = context.encoder;
|
|
45
45
|
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
const settings = encoder.allocateTransientValueBuffer(settings_type, {
|
|
46
|
+
const settings = {
|
|
49
47
|
steps: 40,
|
|
50
48
|
// taken off the target being drawn into, so the generator cannot be told a size
|
|
51
49
|
// the texture does not have
|
|
52
50
|
resolution: [output.width, output.height],
|
|
53
|
-
}
|
|
51
|
+
};
|
|
54
52
|
|
|
55
53
|
shader_transmittance_lut.draw({
|
|
56
54
|
encoder: encoder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_wgsl_source.d.ts","sourceRoot":"","sources":["../../../../src/shade/wgsl/validate_wgsl_source.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate_wgsl_source.d.ts","sourceRoot":"","sources":["../../../../src/shade/wgsl/validate_wgsl_source.js"],"names":[],"mappings":"AAmKA;;;;;;GAMG;AACH,6CAJW,MAAM,UACN,OAAO,iBAAiB,EAAE,UAAU,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAwJ7D"}
|
|
@@ -37,7 +37,10 @@ const WGSL_BUILTIN_NAMES = new Set([
|
|
|
37
37
|
'vec2f', 'vec3f', 'vec4f', 'vec2h', 'vec3h', 'vec4h',
|
|
38
38
|
'mat2x2', 'mat2x3', 'mat2x4', 'mat3x2', 'mat3x3', 'mat3x4', 'mat4x2', 'mat4x3', 'mat4x4',
|
|
39
39
|
'mat2x2f', 'mat2x3f', 'mat2x4f', 'mat3x2f', 'mat3x3f', 'mat3x4f', 'mat4x2f', 'mat4x3f', 'mat4x4f',
|
|
40
|
+
'mat2x2h', 'mat2x3h', 'mat2x4h', 'mat3x2h', 'mat3x3h', 'mat3x4h', 'mat4x2h', 'mat4x3h', 'mat4x4h',
|
|
40
41
|
'array', 'bitcast',
|
|
42
|
+
// array
|
|
43
|
+
'arrayLength',
|
|
41
44
|
// numeric
|
|
42
45
|
'abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'clamp',
|
|
43
46
|
'cos', 'cosh', 'countLeadingZeros', 'countOneBits', 'countTrailingZeros', 'cross',
|
|
@@ -71,9 +74,11 @@ const WGSL_BUILTIN_NAMES = new Set([
|
|
|
71
74
|
'subgroupAdd', 'subgroupExclusiveAdd', 'subgroupInclusiveAdd', 'subgroupAll',
|
|
72
75
|
'subgroupAnd', 'subgroupAny', 'subgroupBallot', 'subgroupBroadcast',
|
|
73
76
|
'subgroupBroadcastFirst', 'subgroupElect', 'subgroupMax', 'subgroupMin', 'subgroupMul',
|
|
74
|
-
'
|
|
75
|
-
'
|
|
76
|
-
'quadSwapY',
|
|
77
|
+
'subgroupExclusiveMul', 'subgroupInclusiveMul', 'subgroupOr', 'subgroupShuffle',
|
|
78
|
+
'subgroupShuffleDown', 'subgroupShuffleUp', 'subgroupShuffleXor', 'subgroupXor',
|
|
79
|
+
'quadBroadcast', 'quadSwapDiagonal', 'quadSwapX', 'quadSwapY',
|
|
80
|
+
// buffer views
|
|
81
|
+
'bufferView', 'bufferArrayView', 'bufferLength',
|
|
77
82
|
]);
|
|
78
83
|
|
|
79
84
|
const SWIZZLE_COMPONENTS = /^[xyzwrgba]+$/;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wrap a pass encoder so that the work encoded into it is recorded.
|
|
3
|
-
*
|
|
4
|
-
* **A `Proxy` rather than a hand-written forwarder.** A pass encoder has around twenty methods and
|
|
5
|
-
* WebGPU keeps adding them; a forwarding class that misses one does not fail loudly, it silently
|
|
6
|
-
* drops a call that the renderer needed, and only while profiling — the worst possible shape for a
|
|
7
|
-
* bug. Everything not named below is forwarded untouched, including anything added later.
|
|
8
|
-
*
|
|
9
|
-
* The cost is a `Proxy` on the hot encoding path, which is why this exists only while a capture is
|
|
10
|
-
* running at {@link GPUProfileLevel.WORKLOAD} or above. Bound methods are cached per encoder so the
|
|
11
|
-
* `get` trap does not allocate a new closure on every `setBindGroup`.
|
|
12
|
-
*
|
|
13
|
-
* @param {GPUComputePassEncoder|GPURenderPassEncoder} encoder
|
|
14
|
-
* @param {GPUProfileWork} work accumulated into
|
|
15
|
-
* @returns {GPUComputePassEncoder|GPURenderPassEncoder}
|
|
16
|
-
*
|
|
17
|
-
* @author Alex Goldring
|
|
18
|
-
* @copyright Company Named Limited (c) 2026
|
|
19
|
-
*/
|
|
20
|
-
export function make_profiling_pass_encoder(encoder: GPUComputePassEncoder | GPURenderPassEncoder, work: GPUProfileWork): GPUComputePassEncoder | GPURenderPassEncoder;
|
|
21
|
-
//# sourceMappingURL=make_profiling_pass_encoder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"make_profiling_pass_encoder.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/device/timing/profile/make_profiling_pass_encoder.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qDAPW,4CAA0C,yBAExC,4CAA0C,CAiGtD"}
|