@woosh/meep-engine 3.59.0 → 3.60.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/shade/playground/probe_clipmap/index.html +12 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +5 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +4 -6
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +63 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +228 -16
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +27 -4
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +526 -23
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +21 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +65 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +376 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +7 -3
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +70 -6
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +80 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +113 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +47 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +80 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +902 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +67 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +145 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +105 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +3 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +13 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +764 -48
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +410 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +41 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +57 -33
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +11 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +13 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +9 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +8 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +28 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +1 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +1 -74
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +161 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +219 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +1 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +40 -12
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +373 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +15 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +28 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +66 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js +86 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +439 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +3 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +12 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +21 -18
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +254 -73
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +149 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +181 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +179 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +412 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +4 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +36 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +218 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +24 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +15 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +21 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +257 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +18 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +157 -51
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +24 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +90 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +205 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +16 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +55 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +60 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +4 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +21 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +21 -14
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +100 -30
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +26 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +12 -12
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_DIGIT_SETTINGS_STRUCT.js +21 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts +5 -2
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/SORT_PASS_SETTINGS_STRUCT.js +31 -23
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/SORT_SIZE_STRUCT.js +22 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts +9 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_constants.js +18 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts +8 -3
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_digit.js +41 -32
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_histogram_tile.js +71 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts +47 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_scatter_tile.js +210 -0
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts +5 -4
- package/src/shade/renderer/gpu_primitive/sort/defs.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/defs.js +5 -4
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +56 -15
- 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 +410 -61
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts +4 -1
- 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 +16 -42
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram_indirect.js +60 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_prepare.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts +3 -8
- 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 +28 -160
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter_indirect.js +74 -0
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts +3 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/verify_radix_sort.js +387 -188
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +90 -72
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +5 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +9 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +14 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +15 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +4 -3
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +6 -5
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts +17 -2
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +25 -57
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_exact.js +70 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts +10 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture_stochastic.js +59 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_texture_load.js +49 -0
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_ray_hit_to_opacity.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material.js +2 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts +7 -0
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +15 -6
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +7 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +26 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts +7 -7
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +262 -294
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/MULTISCALE_MEAN_STRUCT.js +21 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/filter/chunk_multiscale_mean.js +87 -0
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/noise/r/chunk_r2_canonical.js +1 -1
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_reserve_workgroup.js +42 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +19 -0
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/CPUBitmapData.js +27 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +39 -18
- package/src/view/elements/progress/segmented/GhostTrail.d.ts +56 -0
- package/src/view/elements/progress/segmented/GhostTrail.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/GhostTrail.js +98 -0
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts +3 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/RESOURCE_BAR_SEGMENTS.js +3 -1
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts +11 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SEGMENT_TIERS_DEFAULT.js +15 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts +3 -0
- package/src/view/elements/progress/segmented/SegmentDefinition.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentDefinition.js +3 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts +38 -0
- package/src/view/elements/progress/segmented/SegmentTier.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/SegmentTier.js +50 -0
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +155 -10
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +427 -101
- package/src/view/elements/progress/segmented/playground/index.html +78 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts +2 -0
- package/src/view/elements/progress/segmented/playground/main.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/playground/main.js +173 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts +48 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_cell_layout.js +75 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts +18 -0
- package/src/view/elements/progress/segmented/segment_notch_place.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_notch_place.js +28 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts +32 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.d.ts.map +1 -0
- package/src/view/elements/progress/segmented/segment_tick_positions.js +103 -0
- package/src/view/elements/progress/segmented/segmented-resource-bar.css +142 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +0 -35
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +0 -238
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +0 -99
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +0 -139
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +0 -65
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +0 -393
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +0 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +0 -29
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +0 -108
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +0 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +0 -113
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +0 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +0 -85
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +0 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +0 -273
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +0 -151
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +0 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +0 -133
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +0 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +0 -135
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The arithmetic of the mesh provider's walks and records (`MESH_BRICK.js`), per invocation and pure,
|
|
3
|
+
* shared by its passes:
|
|
4
|
+
*
|
|
5
|
+
* ```wgsl
|
|
6
|
+
* fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 // nodes of an iteration past the frontier
|
|
7
|
+
* fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 // a child's place among them
|
|
8
|
+
* fn mesh_brick_records(entries: u32) -> u32 // records that hold that many entries
|
|
9
|
+
* fn mesh_brick_record(index: u32) -> u32 // a record's first word
|
|
10
|
+
* fn mesh_brick_accumulator(build: u32) -> u32 // a build slot's first accumulator word
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* An iteration of a level appends the children it finds to the next level's list at places `start`
|
|
14
|
+
* to `end`, as their reservations came; the frontier keeps the places below
|
|
15
|
+
* {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
|
|
16
|
+
* whichever is later of `start` and the frontier. An iteration appends two children a lane at most,
|
|
17
|
+
* so it hands on at most twice {@link MESH_BRICK_BATCH}.
|
|
18
|
+
*
|
|
19
|
+
* @type {CodeChunk}
|
|
20
|
+
*/
|
|
21
|
+
export const chunk_mesh_brick_walk: CodeChunk;
|
|
22
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
23
|
+
//# sourceMappingURL=chunk_mesh_brick_walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_mesh_brick_walk.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,oCAFU,SAAS,CAkChB;0BAjEuB,0CAA0C"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import {
|
|
3
|
+
MESH_BRICK_ACCUMULATOR_FLAGS,
|
|
4
|
+
MESH_BRICK_ACCUMULATOR_OBJECTS,
|
|
5
|
+
MESH_BRICK_ACCUMULATOR_WORDS,
|
|
6
|
+
MESH_BRICK_BATCH,
|
|
7
|
+
MESH_BRICK_FLAG_TOUCHED,
|
|
8
|
+
MESH_BRICK_FLAG_UNFINISHED,
|
|
9
|
+
MESH_BRICK_FRONTIER,
|
|
10
|
+
MESH_BRICK_RECORD_HEADER_WORDS,
|
|
11
|
+
MESH_BRICK_RECORD_WORDS
|
|
12
|
+
} from "./MESH_BRICK.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The arithmetic of the mesh provider's walks and records (`MESH_BRICK.js`), per invocation and pure,
|
|
16
|
+
* shared by its passes:
|
|
17
|
+
*
|
|
18
|
+
* ```wgsl
|
|
19
|
+
* fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 // nodes of an iteration past the frontier
|
|
20
|
+
* fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 // a child's place among them
|
|
21
|
+
* fn mesh_brick_records(entries: u32) -> u32 // records that hold that many entries
|
|
22
|
+
* fn mesh_brick_record(index: u32) -> u32 // a record's first word
|
|
23
|
+
* fn mesh_brick_accumulator(build: u32) -> u32 // a build slot's first accumulator word
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* An iteration of a level appends the children it finds to the next level's list at places `start`
|
|
27
|
+
* to `end`, as their reservations came; the frontier keeps the places below
|
|
28
|
+
* {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
|
|
29
|
+
* whichever is later of `start` and the frontier. An iteration appends two children a lane at most,
|
|
30
|
+
* so it hands on at most twice {@link MESH_BRICK_BATCH}.
|
|
31
|
+
*
|
|
32
|
+
* @type {CodeChunk}
|
|
33
|
+
*/
|
|
34
|
+
export const chunk_mesh_brick_walk = CodeChunk.from(
|
|
35
|
+
//language=WGSL
|
|
36
|
+
`
|
|
37
|
+
const MESH_BRICK_BATCH = ${MESH_BRICK_BATCH}u;
|
|
38
|
+
const MESH_BRICK_FRONTIER = ${MESH_BRICK_FRONTIER}u;
|
|
39
|
+
const MESH_BRICK_RECORD_HEADER_WORDS = ${MESH_BRICK_RECORD_HEADER_WORDS}u;
|
|
40
|
+
const MESH_BRICK_RECORD_WORDS = ${MESH_BRICK_RECORD_WORDS}u;
|
|
41
|
+
const MESH_BRICK_ACCUMULATOR_OBJECTS = ${MESH_BRICK_ACCUMULATOR_OBJECTS}u;
|
|
42
|
+
const MESH_BRICK_ACCUMULATOR_FLAGS = ${MESH_BRICK_ACCUMULATOR_FLAGS}u;
|
|
43
|
+
const MESH_BRICK_ACCUMULATOR_WORDS = ${MESH_BRICK_ACCUMULATOR_WORDS}u;
|
|
44
|
+
const MESH_BRICK_FLAG_TOUCHED = ${MESH_BRICK_FLAG_TOUCHED}u;
|
|
45
|
+
const MESH_BRICK_FLAG_UNFINISHED = ${MESH_BRICK_FLAG_UNFINISHED}u;
|
|
46
|
+
|
|
47
|
+
fn mesh_brick_walk_spilled(start: u32, end: u32) -> u32 {
|
|
48
|
+
return select(0u, end - max(MESH_BRICK_FRONTIER, start), end > MESH_BRICK_FRONTIER);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
fn mesh_brick_walk_spill_index(slot: u32, start: u32) -> u32 {
|
|
52
|
+
return slot - max(MESH_BRICK_FRONTIER, start);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fn mesh_brick_records(entries: u32) -> u32 {
|
|
56
|
+
return (entries + MESH_BRICK_BATCH - 1u) / MESH_BRICK_BATCH;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fn mesh_brick_record(index: u32) -> u32 {
|
|
60
|
+
return index * MESH_BRICK_RECORD_WORDS;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fn mesh_brick_accumulator(build: u32) -> u32 {
|
|
64
|
+
return build * MESH_BRICK_ACCUMULATOR_WORDS;
|
|
65
|
+
}
|
|
66
|
+
`);
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @type {WebGPUStruct}
|
|
3
|
+
*/
|
|
4
|
+
export const MESH_BRICK_BATCH_SETTINGS: WebGPUStruct;
|
|
5
|
+
/**
|
|
6
|
+
* The mesh provider's batches (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
|
|
7
|
+
* a batch record the walks wrote, dispatched by its command (`shader_mesh_brick_command`).
|
|
8
|
+
*
|
|
9
|
+
* Its up to {@link MESH_BRICK_BATCH} rows, sorted ascending (a bitonic network, a lane a pair), become
|
|
10
|
+
* instances in workgroup memory, a lane each (`mesh_brick_instance`), and its cell's 512 texels are
|
|
11
|
+
* sampled over them in that order, eight a lane
|
|
12
|
+
* (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's byte goes into
|
|
13
|
+
* the cell's accumulators by an atomic maximum of 255 less it, and each 2³ object cell's nearest texel
|
|
14
|
+
* bids its key by another (`brick_object_key`): the least byte and the nearest row over every batch
|
|
15
|
+
* of the cell, whatever order the batches ran in. The staging is the resolve's to write.
|
|
16
|
+
*
|
|
17
|
+
* The order is what keeps a cell of up to {@link MESH_BRICK_BATCH} rows, one batch, the same however the walk
|
|
18
|
+
* found its rows: the box test is exact only where an instance's field is not negative outside its box,
|
|
19
|
+
* and where it is, which instances it passes over depends on the order it meets them in.
|
|
20
|
+
*
|
|
21
|
+
* Per lane, 21 steps of the sort at most, then eight texels, each at most {@link MESH_BRICK_BATCH} box tests and
|
|
22
|
+
* as many taps.
|
|
23
|
+
*
|
|
24
|
+
* @type {ComputeShader}
|
|
25
|
+
*/
|
|
26
|
+
export const shader_mesh_brick_batch: ComputeShader;
|
|
27
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
28
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
29
|
+
//# sourceMappingURL=shader_mesh_brick_batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_mesh_brick_batch.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js"],"names":[],"mappings":"AAyBA;;GAEG;AACH,wCAFU,YAAY,CAOO;AAuJ7B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,sCAFU,aAAa,CAMpB;6BAnM0B,yCAAyC;8BAJxC,qCAAqC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MESH_SDF_ATLAS_RESOURCE,
|
|
3
|
+
MESH_SDF_HEADERS_RESOURCE,
|
|
4
|
+
MESH_SDF_INDIRECTION_RESOURCE,
|
|
5
|
+
MESH_SDF_SAMPLER_RESOURCE
|
|
6
|
+
} from "../../../../geometry/sdf/MESH_SDF_RESOURCES.js";
|
|
7
|
+
import { chunk_sort_bitonic_comparator } from "../../../../gpu_primitive/sort/chunk_sort_bitonic_comparator.js";
|
|
8
|
+
import { CLIPMAP_LEVEL_ARRAY } from "../../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
9
|
+
import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
10
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
11
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
12
|
+
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
13
|
+
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
14
|
+
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
15
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
16
|
+
import { BRICK_CELL_WORKGROUP_SIZE, BRICK_OBJECT_CELLS_PER_AXIS } from "../BRICK_CLIPMAP.js";
|
|
17
|
+
import { chunk_brick_object } from "../chunk_brick_object.js";
|
|
18
|
+
import { chunk_brick_provider } from "../chunk_brick_provider.js";
|
|
19
|
+
import { BRICK_RING_RESOURCE, BRICK_TAKE_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
|
|
20
|
+
import { chunk_mesh_brick_instance } from "./chunk_mesh_brick_instance.js";
|
|
21
|
+
import { chunk_mesh_brick_texel } from "./chunk_mesh_brick_texel.js";
|
|
22
|
+
import { chunk_mesh_brick_walk } from "./chunk_mesh_brick_walk.js";
|
|
23
|
+
import { MESH_BRICK_COUNTER_BATCH_GROUPS } from "./MESH_BRICK.js";
|
|
24
|
+
import { MESH_BRICK_INSTANCE_STRUCT } from "./MESH_BRICK_INSTANCE_STRUCT.js";
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @type {WebGPUStruct}
|
|
28
|
+
*/
|
|
29
|
+
export const MESH_BRICK_BATCH_SETTINGS = WebGPUStruct.from({
|
|
30
|
+
/** keys `brick_ring` holds, a power of two */
|
|
31
|
+
ring_capacity: u32,
|
|
32
|
+
/** cells a cascade's window has a side */
|
|
33
|
+
resolution: u32,
|
|
34
|
+
}, "MeshBrickBatchSettings");
|
|
35
|
+
|
|
36
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
37
|
+
|
|
38
|
+
resources.setImmediate("settings", MESH_BRICK_BATCH_SETTINGS);
|
|
39
|
+
|
|
40
|
+
resources.createGroup()
|
|
41
|
+
.add(BRICK_TAKE_RESOURCE)
|
|
42
|
+
.add(BRICK_RING_RESOURCE)
|
|
43
|
+
.addUniform("brick_levels", CLIPMAP_LEVEL_ARRAY)
|
|
44
|
+
.addStorageBuffer("mesh_brick_counters", WebGPUArray.from(atomic_u32), true)
|
|
45
|
+
.addStorageBuffer("mesh_brick_batches", WebGPUArray.u32)
|
|
46
|
+
.addStorageBuffer("mesh_brick_accumulators", WebGPUArray.from(atomic_u32), true);
|
|
47
|
+
|
|
48
|
+
resources.createGroup()
|
|
49
|
+
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
50
|
+
.add(MESH_SDF_HEADERS_RESOURCE)
|
|
51
|
+
.add(MESH_SDF_INDIRECTION_RESOURCE)
|
|
52
|
+
.add(MESH_SDF_ATLAS_RESOURCE)
|
|
53
|
+
.add(MESH_SDF_SAMPLER_RESOURCE);
|
|
54
|
+
|
|
55
|
+
const body = CodeChunk.from(
|
|
56
|
+
//language=WGSL
|
|
57
|
+
`
|
|
58
|
+
var<workgroup> instances: array<${MESH_BRICK_INSTANCE_STRUCT.wgsl_ref}, MESH_BRICK_BATCH>;
|
|
59
|
+
|
|
60
|
+
/** the batch's rows, ascending */
|
|
61
|
+
var<workgroup> batch_rows: array<u32, MESH_BRICK_BATCH>;
|
|
62
|
+
|
|
63
|
+
/** per object cell: its nearest texel's key over the batch, and its lanes done */
|
|
64
|
+
var<workgroup> object_best: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
65
|
+
var<workgroup> object_lanes: array<atomic<u32>, ${BRICK_OBJECT_CELLS_PER_AXIS ** 3}>;
|
|
66
|
+
|
|
67
|
+
/** lane 0's: the batches, and this one's build slot and rows */
|
|
68
|
+
var<workgroup> batch_header: vec3<u32>;
|
|
69
|
+
|
|
70
|
+
fn mesh_brick_instance_at(i: u32) -> ${MESH_BRICK_INSTANCE_STRUCT.wgsl_ref} {
|
|
71
|
+
return instances[i];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
|
|
75
|
+
fn main(
|
|
76
|
+
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
77
|
+
@builtin(local_invocation_index) lane: u32,
|
|
78
|
+
) {
|
|
79
|
+
let index = folded_workgroup_index(workgroup_id);
|
|
80
|
+
|
|
81
|
+
if (lane == 0u) {
|
|
82
|
+
let batches = atomicLoad(&mesh_brick_counters[${MESH_BRICK_COUNTER_BATCH_GROUPS}u]);
|
|
83
|
+
var build = 0u;
|
|
84
|
+
var rows = 0u;
|
|
85
|
+
|
|
86
|
+
if (index < batches) {
|
|
87
|
+
build = mesh_brick_batches[mesh_brick_record(index)];
|
|
88
|
+
rows = mesh_brick_batches[mesh_brick_record(index) + 1u];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
batch_header = vec3<u32>(batches, build, rows);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
let header = workgroupUniformLoad(&batch_header);
|
|
95
|
+
|
|
96
|
+
// a folded dispatch's tail leaves whole
|
|
97
|
+
if (index >= header.x) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
let build = header.y;
|
|
102
|
+
let count = header.z;
|
|
103
|
+
let at = brick_provider_cell(brick_provider_key(build, settings.ring_capacity), settings.resolution);
|
|
104
|
+
|
|
105
|
+
// the rows in ascending order, the slots past them last: a texel meets them in the same order however the walk
|
|
106
|
+
// found them, and its box test with them
|
|
107
|
+
batch_rows[lane] = select(0xffffffffu, mesh_brick_batches[mesh_brick_record(index) + MESH_BRICK_RECORD_HEADER_WORDS + lane], lane < count);
|
|
108
|
+
|
|
109
|
+
workgroupBarrier();
|
|
110
|
+
|
|
111
|
+
let size = sort_bitonic_size(count);
|
|
112
|
+
|
|
113
|
+
for (var block = 2u; block <= size; block <<= 1u) {
|
|
114
|
+
for (var stride = block >> 1u; stride > 0u; stride >>= 1u) {
|
|
115
|
+
if (lane < (size >> 1u)) {
|
|
116
|
+
let slots = sort_bitonic_comparator(lane, block, stride);
|
|
117
|
+
let low = batch_rows[slots.x];
|
|
118
|
+
let high = batch_rows[slots.y];
|
|
119
|
+
|
|
120
|
+
if (high < low) {
|
|
121
|
+
batch_rows[slots.x] = high;
|
|
122
|
+
batch_rows[slots.y] = low;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
workgroupBarrier();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (lane < count) {
|
|
131
|
+
instances[lane] = mesh_brick_instance(batch_rows[lane], at.voxel);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
workgroupBarrier();
|
|
135
|
+
|
|
136
|
+
// eight texels a lane, x fastest, at y = lane mod 8 and z = lane / 8
|
|
137
|
+
let y = lane % 8u;
|
|
138
|
+
let z = lane / 8u;
|
|
139
|
+
let accumulator = mesh_brick_accumulator(build);
|
|
140
|
+
|
|
141
|
+
var best = vec4<u32>(0u);
|
|
142
|
+
|
|
143
|
+
for (var x = 0u; x < 8u; x++) {
|
|
144
|
+
let texel = mesh_brick_texel(at.corner + vec3<f32>(f32(x), f32(y), f32(z)) * at.voxel, count, at.band);
|
|
145
|
+
let byte = brick_encode(texel.distance, at.band);
|
|
146
|
+
|
|
147
|
+
// the cell's least byte over its batches, as the most of 255 less each; +R raises nothing
|
|
148
|
+
if (byte < 255u) {
|
|
149
|
+
atomicMax(&mesh_brick_accumulators[accumulator + x + 8u * (y + 8u * z)], 255u - byte);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let o = x / 2u;
|
|
153
|
+
|
|
154
|
+
best[o] = max(best[o], brick_object_key(byte, texel.row));
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// per object cell, its four lanes fold in their texels, and the last bids the batch's nearest
|
|
158
|
+
for (var o = 0u; o < ${BRICK_OBJECT_CELLS_PER_AXIS}u; o++) {
|
|
159
|
+
let object = o + ${BRICK_OBJECT_CELLS_PER_AXIS}u * ((y / 2u) + ${BRICK_OBJECT_CELLS_PER_AXIS}u * (z / 2u));
|
|
160
|
+
|
|
161
|
+
atomicMax(&object_best[object], best[o]);
|
|
162
|
+
|
|
163
|
+
if (atomicAdd(&object_lanes[object], 1u) != 3u) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
let nearest = atomicLoad(&object_best[object]);
|
|
168
|
+
|
|
169
|
+
if (brick_object_key_byte(nearest) < 255u) {
|
|
170
|
+
atomicMax(&mesh_brick_accumulators[accumulator + MESH_BRICK_ACCUMULATOR_OBJECTS + object], nearest);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
`, [
|
|
175
|
+
chunk_brick_clipmap,
|
|
176
|
+
chunk_brick_provider,
|
|
177
|
+
chunk_folded_workgroup_index,
|
|
178
|
+
chunk_mesh_brick_walk,
|
|
179
|
+
chunk_mesh_brick_instance,
|
|
180
|
+
chunk_mesh_brick_texel,
|
|
181
|
+
chunk_brick_object,
|
|
182
|
+
chunk_sort_bitonic_comparator,
|
|
183
|
+
]);
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The mesh provider's batches (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): a workgroup
|
|
187
|
+
* a batch record the walks wrote, dispatched by its command (`shader_mesh_brick_command`).
|
|
188
|
+
*
|
|
189
|
+
* Its up to {@link MESH_BRICK_BATCH} rows, sorted ascending (a bitonic network, a lane a pair), become
|
|
190
|
+
* instances in workgroup memory, a lane each (`mesh_brick_instance`), and its cell's 512 texels are
|
|
191
|
+
* sampled over them in that order, eight a lane
|
|
192
|
+
* (`mesh_brick_texel`: the least distance and its row, the box test first). Each texel's byte goes into
|
|
193
|
+
* the cell's accumulators by an atomic maximum of 255 less it, and each 2³ object cell's nearest texel
|
|
194
|
+
* bids its key by another (`brick_object_key`): the least byte and the nearest row over every batch
|
|
195
|
+
* of the cell, whatever order the batches ran in. The staging is the resolve's to write.
|
|
196
|
+
*
|
|
197
|
+
* The order is what keeps a cell of up to {@link MESH_BRICK_BATCH} rows, one batch, the same however the walk
|
|
198
|
+
* found its rows: the box test is exact only where an instance's field is not negative outside its box,
|
|
199
|
+
* and where it is, which instances it passes over depends on the order it meets them in.
|
|
200
|
+
*
|
|
201
|
+
* Per lane, 21 steps of the sort at most, then eight texels, each at most {@link MESH_BRICK_BATCH} box tests and
|
|
202
|
+
* as many taps.
|
|
203
|
+
*
|
|
204
|
+
* @type {ComputeShader}
|
|
205
|
+
*/
|
|
206
|
+
export const shader_mesh_brick_batch = ComputeShader.from({
|
|
207
|
+
label: "Brick Clipmap Mesh Batch",
|
|
208
|
+
resources,
|
|
209
|
+
body,
|
|
210
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No counter to clear.
|
|
3
|
+
* @type {number}
|
|
4
|
+
*/
|
|
5
|
+
export const MESH_BRICK_COMMAND_CLEAR_NONE: number;
|
|
6
|
+
/**
|
|
7
|
+
* Words a command takes in `mesh_brick_commands`: the three workgroup counts, and a word of padding.
|
|
8
|
+
* @type {number}
|
|
9
|
+
*/
|
|
10
|
+
export const MESH_BRICK_COMMAND_WORDS: number;
|
|
11
|
+
/**
|
|
12
|
+
* @type {WebGPUStruct}
|
|
13
|
+
*/
|
|
14
|
+
export const MESH_BRICK_COMMAND_SETTINGS: WebGPUStruct;
|
|
15
|
+
/**
|
|
16
|
+
* The mesh provider's command for a round of walks or for the batches (§7.7, as S9 built it): one
|
|
17
|
+
* thread, between the pass that asked for the records and the pass that runs a workgroup a record.
|
|
18
|
+
*
|
|
19
|
+
* It reads how many records were asked for, writes how many the capacity holds where the dispatched
|
|
20
|
+
* pass reads its workgroups, keeps the most ever asked for for the host to grow on, clears the counter
|
|
21
|
+
* the dispatched pass appends to, and writes the folded dispatch (`folded_dispatch`). A pass never
|
|
22
|
+
* writes the command it is dispatched through.
|
|
23
|
+
*
|
|
24
|
+
* @type {ComputeShader}
|
|
25
|
+
*/
|
|
26
|
+
export const shader_mesh_brick_command: ComputeShader;
|
|
27
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
28
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
29
|
+
//# sourceMappingURL=shader_mesh_brick_command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_mesh_brick_command.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js"],"names":[],"mappings":"AAQA;;;GAGG;AACH,4CAFU,MAAM,CAEwC;AAExD;;;GAGG;AACH,uCAFU,MAAM,CAE0B;AAE1C;;GAEG;AACH,0CAFU,YAAY,CAeS;AAU/B;;;;;;;;;;GAUG;AACH,wCAFU,aAAa,CA8BpB;6BA/E0B,yCAAyC;8BAJxC,qCAAqC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_command.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { chunk_folded_dispatch } from "../../../../gpu_primitive/indirect/chunk_folded_dispatch.js";
|
|
2
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
4
|
+
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
5
|
+
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
6
|
+
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
7
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* No counter to clear.
|
|
11
|
+
* @type {number}
|
|
12
|
+
*/
|
|
13
|
+
export const MESH_BRICK_COMMAND_CLEAR_NONE = 0xffffffff;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Words a command takes in `mesh_brick_commands`: the three workgroup counts, and a word of padding.
|
|
17
|
+
* @type {number}
|
|
18
|
+
*/
|
|
19
|
+
export const MESH_BRICK_COMMAND_WORDS = 4;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @type {WebGPUStruct}
|
|
23
|
+
*/
|
|
24
|
+
export const MESH_BRICK_COMMAND_SETTINGS = WebGPUStruct.from({
|
|
25
|
+
/** the counter of the records asked for */
|
|
26
|
+
asked: u32,
|
|
27
|
+
/** where the workgroups go: the records asked for, as many as the capacity holds */
|
|
28
|
+
groups: u32,
|
|
29
|
+
/** records the buffer holds */
|
|
30
|
+
capacity: u32,
|
|
31
|
+
/** the statistic that keeps the most ever asked for */
|
|
32
|
+
peak: u32,
|
|
33
|
+
/** a counter the dispatched pass appends to from 0, or {@link MESH_BRICK_COMMAND_CLEAR_NONE} */
|
|
34
|
+
clear: u32,
|
|
35
|
+
/** the command's first word in `mesh_brick_commands` */
|
|
36
|
+
command: u32,
|
|
37
|
+
}, "MeshBrickCommandSettings");
|
|
38
|
+
|
|
39
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
40
|
+
|
|
41
|
+
resources.setImmediate("settings", MESH_BRICK_COMMAND_SETTINGS);
|
|
42
|
+
|
|
43
|
+
resources.createGroup()
|
|
44
|
+
.addStorageBuffer("mesh_brick_counters", WebGPUArray.from(atomic_u32), true)
|
|
45
|
+
.addStorageBuffer("mesh_brick_commands", WebGPUArray.u32, true);
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The mesh provider's command for a round of walks or for the batches (§7.7, as S9 built it): one
|
|
49
|
+
* thread, between the pass that asked for the records and the pass that runs a workgroup a record.
|
|
50
|
+
*
|
|
51
|
+
* It reads how many records were asked for, writes how many the capacity holds where the dispatched
|
|
52
|
+
* pass reads its workgroups, keeps the most ever asked for for the host to grow on, clears the counter
|
|
53
|
+
* the dispatched pass appends to, and writes the folded dispatch (`folded_dispatch`). A pass never
|
|
54
|
+
* writes the command it is dispatched through.
|
|
55
|
+
*
|
|
56
|
+
* @type {ComputeShader}
|
|
57
|
+
*/
|
|
58
|
+
export const shader_mesh_brick_command = ComputeShader.from({
|
|
59
|
+
label: "Brick Clipmap Mesh Command",
|
|
60
|
+
resources,
|
|
61
|
+
body: CodeChunk.from(
|
|
62
|
+
//language=WGSL
|
|
63
|
+
`
|
|
64
|
+
@compute @workgroup_size(1)
|
|
65
|
+
fn main() {
|
|
66
|
+
let asked = atomicLoad(&mesh_brick_counters[settings.asked]);
|
|
67
|
+
let groups = min(asked, settings.capacity);
|
|
68
|
+
|
|
69
|
+
atomicStore(&mesh_brick_counters[settings.groups], groups);
|
|
70
|
+
atomicMax(&mesh_brick_counters[settings.peak], asked);
|
|
71
|
+
|
|
72
|
+
if (settings.clear != ${MESH_BRICK_COMMAND_CLEAR_NONE}u) {
|
|
73
|
+
atomicStore(&mesh_brick_counters[settings.clear], 0u);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
let folded = folded_dispatch(groups);
|
|
77
|
+
|
|
78
|
+
// word by word: the emulator drops a whole-value store into a storage variable
|
|
79
|
+
mesh_brick_commands[settings.command] = folded.x;
|
|
80
|
+
mesh_brick_commands[settings.command + 1u] = folded.y;
|
|
81
|
+
mesh_brick_commands[settings.command + 2u] = folded.z;
|
|
82
|
+
}
|
|
83
|
+
`, [
|
|
84
|
+
chunk_folded_dispatch,
|
|
85
|
+
]),
|
|
86
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @type {WebGPUStruct}
|
|
3
|
+
*/
|
|
4
|
+
export const MESH_BRICK_GATHER_SETTINGS: WebGPUStruct;
|
|
5
|
+
/**
|
|
6
|
+
* The mesh provider's walk (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.7, as S9 built it): every instance
|
|
7
|
+
* whose box comes within the band of a taken cell, gathered whole, a workgroup a walk.
|
|
8
|
+
*
|
|
9
|
+
* A walk expands the TLAS a level at a time, as the cooperative query does (`chunk_bvh_query_aabb_cooperative`):
|
|
10
|
+
* each node of the level is tested by a lane against the cell grown by the cascade's band, the children
|
|
11
|
+
* of an overlapping internal node go on the next level, and an overlapping leaf is a row when
|
|
12
|
+
* `mesh_brick_accept` takes it. Nothing is dropped:
|
|
13
|
+
* - a level keeps {@link MESH_BRICK_FRONTIER} nodes, and the children that fall past them are handed on in
|
|
14
|
+
* task records of up to {@link MESH_BRICK_BATCH} nodes, each a walk of the next round, which this same
|
|
15
|
+
* kernel runs from them;
|
|
16
|
+
* - rows leave in batch records of {@link MESH_BRICK_BATCH}, and the rows left when the walk ends in one
|
|
17
|
+
* more.
|
|
18
|
+
*
|
|
19
|
+
* Round 0 walks from the root, a workgroup a taken cell, dispatched by take; a later round's
|
|
20
|
+
* dispatch comes from its command (`shader_mesh_brick_command`). Round 0's walk of a cell opens the
|
|
21
|
+
* cell's frame by clearing its flags; the walk that first flags it lists it for the resolve
|
|
22
|
+
* (`mesh_brick_resolves`), so the resolve runs on the cells a batch reached or a walk could not finish,
|
|
23
|
+
* and on no other. A record the capacity cannot hold, a level past the walk's budget, or a hand-off in
|
|
24
|
+
* the frame's last round leaves the walk unfinished: it is counted, and the resolve asks for the cell
|
|
25
|
+
* again. Of the records a walk asks for at once, those below the capacity are kept, so that every record
|
|
26
|
+
* a command dispatches was written this frame.
|
|
27
|
+
*
|
|
28
|
+
* An iteration of a level costs the workgroup a barrier and a `workgroupUniformLoad`, and a barrier
|
|
29
|
+
* more after one whose hand-off copied records out: lane 0 hands every lane where the next iteration's
|
|
30
|
+
* children start and, on the level's last, how many nodes the next level holds.
|
|
31
|
+
*
|
|
32
|
+
* Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads, accepts
|
|
33
|
+
* and appends, over at most {@link BVH_QUERY_AABB_LEVEL_BUDGET} levels; per iteration, two task entries
|
|
34
|
+
* and two batch entries copied at most.
|
|
35
|
+
*
|
|
36
|
+
* @type {ComputeShader}
|
|
37
|
+
*/
|
|
38
|
+
export const shader_mesh_brick_gather: ComputeShader;
|
|
39
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
40
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
41
|
+
//# sourceMappingURL=shader_mesh_brick_gather.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_mesh_brick_gather.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js"],"names":[],"mappings":"AAuCA;;GAEG;AACH,yCAFU,YAAY,CAeQ;AA0V9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,uCAFU,aAAa,CAMpB;6BApa0B,yCAAyC;8BAJxC,qCAAqC"}
|