@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/vgeo/shader_vgeo_brick_gather.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
-
import { WebGPUExtensionType } from "../../../../../descriptor/WebGPUExtensionType.js";
|
|
3
|
-
import { GEOMETRY_METADATA_STRUCT } from "../../../../geometry/GEOMETRY_METADATA_STRUCT.js";
|
|
4
|
-
import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
5
|
-
import { BVH2_NODE_STRUCT } from "../../../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
|
|
6
|
-
import { BVH_STRUCT } from "../../../../shader/chunk/bvh/BVH_STRUCT.js";
|
|
7
|
-
import { chunk_bvh_query_aabb_cooperative } from "../../../../shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js";
|
|
8
|
-
import { BVH_QUERY_AABB_WORKGROUP_SIZE } from "../../../../shader/chunk/bvh/chunk_bvh_query_aabb_frontier.js";
|
|
9
|
-
import { CLIPMAP_LEVEL_ARRAY } from "../../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
10
|
-
import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
11
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
12
|
-
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
13
|
-
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
14
|
-
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
15
|
-
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
16
|
-
import { BRICK_CELL_WORKGROUP_SIZE } from "../BRICK_CLIPMAP.js";
|
|
17
|
-
import { BRICK_RING_RESOURCE, BRICK_TAKE_RESOURCE, chunk_brick_clipmap } from "../chunk_brick_clipmap.js";
|
|
18
|
-
import { chunk_brick_provider } from "../chunk_brick_provider.js";
|
|
19
|
-
import { chunk_vgeo_brick_pair } from "./chunk_vgeo_brick_pair.js";
|
|
20
|
-
import {
|
|
21
|
-
VGEO_BRICK_CELL_OFFSET,
|
|
22
|
-
VGEO_BRICK_CELL_WORDS,
|
|
23
|
-
VGEO_BRICK_SETTINGS,
|
|
24
|
-
VGEO_BRICK_STATISTIC_CANDIDATES_DROPPED,
|
|
25
|
-
VGEO_BRICK_STATISTIC_NODES_DROPPED,
|
|
26
|
-
VGEO_BRICK_STATISTIC_PAIRS_DROPPED
|
|
27
|
-
} from "./VGEO_BRICK.js";
|
|
28
|
-
|
|
29
|
-
// the gather is the whole workgroup's: a cell's workgroup is the query's
|
|
30
|
-
assert.equal(BRICK_CELL_WORKGROUP_SIZE, BVH_QUERY_AABB_WORKGROUP_SIZE, 'a taken cell\'s workgroup runs the cooperative query');
|
|
31
|
-
|
|
32
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
33
|
-
|
|
34
|
-
resources.setImmediate("settings", VGEO_BRICK_SETTINGS);
|
|
35
|
-
|
|
36
|
-
resources.createGroup()
|
|
37
|
-
.add(BRICK_TAKE_RESOURCE)
|
|
38
|
-
.add(BRICK_RING_RESOURCE)
|
|
39
|
-
.addUniform("brick_levels", CLIPMAP_LEVEL_ARRAY)
|
|
40
|
-
.addStorageBuffer("vgeo_brick_statistics", WebGPUArray.from(atomic_u32), true);
|
|
41
|
-
|
|
42
|
-
resources.createGroup()
|
|
43
|
-
.addStorageBuffer("tlas", BVH_STRUCT)
|
|
44
|
-
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
45
|
-
.addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
|
|
46
|
-
.addStorageBuffer("vg_geometries", WebGPUArray.from(u32));
|
|
47
|
-
|
|
48
|
-
resources.createGroup()
|
|
49
|
-
// the pair records, a cut's instance records, in the order the cells reserve them
|
|
50
|
-
.addStorageBuffer("instances", WebGPUArray.from(u32), true)
|
|
51
|
-
.addStorageBuffer("claim_widths", COLLECTION_U32_STRUCT_WRITE, true)
|
|
52
|
-
// the taken cells' lists, whose counts the gather starts at zero for the cells it takes
|
|
53
|
-
.addStorageBuffer("vgeo_brick_cells", WebGPUArray.from(atomic_u32), true);
|
|
54
|
-
|
|
55
|
-
const body = CodeChunk.from(
|
|
56
|
-
//language=WGSL
|
|
57
|
-
`
|
|
58
|
-
const VGEO_BRICK_CELL_WORDS = ${VGEO_BRICK_CELL_WORDS}u;
|
|
59
|
-
|
|
60
|
-
/** the cascade's voxel, the same for the whole workgroup: what the gather's resolution cull weighs a box by */
|
|
61
|
-
var<private> vgeo_brick_voxel: f32;
|
|
62
|
-
|
|
63
|
-
var<workgroup> cell_taken: u32;
|
|
64
|
-
|
|
65
|
-
fn bvh_query_aabb_node(index: u32) -> ${BVH2_NODE_STRUCT.wgsl_ref} {
|
|
66
|
-
return tlas.nodes[index];
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
fn bvh_query_aabb_accept_leaf(payload: u32, bounds: array<f32, 6>) -> bool {
|
|
70
|
-
return vgeo_brick_accept(payload, bounds, vgeo_brick_voxel);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
|
|
74
|
-
fn main(
|
|
75
|
-
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
76
|
-
@builtin(local_invocation_index) lane: u32,
|
|
77
|
-
) {
|
|
78
|
-
let build = folded_workgroup_index(workgroup_id);
|
|
79
|
-
|
|
80
|
-
if (lane == 0u) {
|
|
81
|
-
cell_taken = brick_take[BRICK_TAKE_COUNT];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// a folded dispatch's tail leaves whole
|
|
85
|
-
if (build >= workgroupUniformLoad(&cell_taken)) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
let key = brick_provider_key(build, settings.ring_capacity);
|
|
90
|
-
let at = brick_provider_cell(key, settings.resolution);
|
|
91
|
-
|
|
92
|
-
vgeo_brick_voxel = at.voxel;
|
|
93
|
-
|
|
94
|
-
// this cell's list, empty and waiting on nothing before the cut fills it, and the key it is the list of: only the
|
|
95
|
-
// taken cells' lists are read
|
|
96
|
-
if (lane == 0u) {
|
|
97
|
-
let list = build * VGEO_BRICK_CELL_WORDS;
|
|
98
|
-
|
|
99
|
-
atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.COUNT}u], 0u);
|
|
100
|
-
atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.KEY}u], key);
|
|
101
|
-
atomicStore(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.WAITS}u], 0u);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// every vgeo instance whose box comes within the band of the cell, and the box each is cut in
|
|
105
|
-
let lower = at.corner - vec3<f32>(at.band);
|
|
106
|
-
let upper = at.far + vec3<f32>(at.band);
|
|
107
|
-
|
|
108
|
-
let gathered = bvh_query_aabb_cooperative(tlas.root, array<f32, 6>(lower.x, lower.y, lower.z, upper.x, upper.y, upper.z), lane);
|
|
109
|
-
|
|
110
|
-
// a lane a candidate, over the query's whole list
|
|
111
|
-
for (var i = lane; i < gathered.candidate_count; i += ${BRICK_CELL_WORKGROUP_SIZE}u) {
|
|
112
|
-
if (!vgeo_brick_pair(bvh_query_aabb_candidates[i], build, lower, upper, at.voxel, settings.pair_capacity)) {
|
|
113
|
-
atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_PAIRS_DROPPED}u], 1u);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (lane == 0u) {
|
|
118
|
-
if (gathered.candidates_dropped > 0u) {
|
|
119
|
-
atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_CANDIDATES_DROPPED}u], gathered.candidates_dropped);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (gathered.nodes_dropped > 0u) {
|
|
123
|
-
atomicAdd(&vgeo_brick_statistics[${VGEO_BRICK_STATISTIC_NODES_DROPPED}u], gathered.nodes_dropped);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
`, [
|
|
128
|
-
chunk_brick_clipmap,
|
|
129
|
-
chunk_brick_provider,
|
|
130
|
-
chunk_folded_workgroup_index,
|
|
131
|
-
chunk_bvh_query_aabb_cooperative,
|
|
132
|
-
chunk_vgeo_brick_pair,
|
|
133
|
-
]);
|
|
134
|
-
|
|
135
|
-
body.addExtension(WebGPUExtensionType.Subgroups);
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* The vgeo provider's gather (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): a 64-lane workgroup a taken cell,
|
|
139
|
-
* dispatched by take. A cooperative TLAS query with the cell grown by the cascade's band, every leaf filtered by
|
|
140
|
-
* `vgeo_brick_accept`, and a pair record for each candidate (`vgeo_brick_pair`): the instance cut at a world error
|
|
141
|
-
* under half the cascade's voxel, within the cell grown by the band. The records and their claim widths are a cut's
|
|
142
|
-
* collect, so the camera cut's scan, seed and descent run them. Pairs past the records' capacity, and what the query
|
|
143
|
-
* itself dropped, are counted.
|
|
144
|
-
*
|
|
145
|
-
* @type {ComputeShader}
|
|
146
|
-
*/
|
|
147
|
-
export const shader_vgeo_brick_gather = ComputeShader.from({
|
|
148
|
-
label: "Brick Clipmap VGeo Gather",
|
|
149
|
-
resources,
|
|
150
|
-
body,
|
|
151
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The vgeo provider's box cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): the camera cut's descent
|
|
3
|
-
* (`chunk_vgeo_cut_descent`) over the gather's pair records, culled against each pair's box, at the world error
|
|
4
|
-
* its record's projection constant sets against a τ of 1. A cluster in the cut, a stand-in for a page not yet
|
|
5
|
-
* resident too, goes onto its taken cell's list; a clamp wants its page through the cut's own feedback slot, as
|
|
6
|
-
* the camera's do. A cell's first stand-in goes into its list's header with what its want was made of, so that
|
|
7
|
-
* the wait can want that page again while the cell waits (`VGEO_BRICK_WAIT_OFFSET`).
|
|
8
|
-
*
|
|
9
|
-
* @type {ComputeShader}
|
|
10
|
-
*/
|
|
11
|
-
export const shader_vgeo_brick_traverse: ComputeShader;
|
|
12
|
-
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
13
|
-
//# sourceMappingURL=shader_vgeo_brick_traverse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_vgeo_brick_traverse.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js"],"names":[],"mappings":"AAsHA;;;;;;;;;GASG;AACH,yCAFU,aAAa,CAMpB;8BA3H2B,qCAAqC"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { WebGPUExtensionType } from "../../../../../descriptor/WebGPUExtensionType.js";
|
|
2
|
-
import { chunk_vgeo_cut_access } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js";
|
|
3
|
-
import { chunk_vgeo_cut_descent } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js";
|
|
4
|
-
import { VGEO_CUT_PARAMS_STRUCT } from "../../../../geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js";
|
|
5
|
-
import { VGEO_CUT_STAT } from "../../../../geometry/virtual/runtime/layout/VGEO_CUT_STAT.js";
|
|
6
|
-
import { VGEO_PAGE_ROW_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js";
|
|
7
|
-
import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
8
|
-
import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
9
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
10
|
-
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
11
|
-
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
12
|
-
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
13
|
-
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
14
|
-
import { chunk_vgeo_brick_box } from "./chunk_vgeo_brick_box.js";
|
|
15
|
-
import { VGEO_INSTANCE_OFFSET } from "../../../../geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js";
|
|
16
|
-
import {
|
|
17
|
-
VGEO_BRICK_CELL_CLUSTERS,
|
|
18
|
-
VGEO_BRICK_CELL_OFFSET,
|
|
19
|
-
VGEO_BRICK_CELL_WORDS,
|
|
20
|
-
VGEO_BRICK_PAIR_BUILD,
|
|
21
|
-
VGEO_BRICK_WAIT_OFFSET
|
|
22
|
-
} from "./VGEO_BRICK.js";
|
|
23
|
-
|
|
24
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
25
|
-
|
|
26
|
-
resources.createGroup()
|
|
27
|
-
.addUniform("params", VGEO_CUT_PARAMS_STRUCT)
|
|
28
|
-
.addStorageBuffer("vg_lookup", WebGPUArray.from(u32), false)
|
|
29
|
-
.addStorageBuffer("vg_arena", WebGPUArray.from(u32), false)
|
|
30
|
-
;
|
|
31
|
-
|
|
32
|
-
resources.createGroup()
|
|
33
|
-
.addStorageBuffer("instances", WebGPUArray.from(u32), false)
|
|
34
|
-
.addStorageBuffer("queue_in", COLLECTION_U32_STRUCT_READ, false)
|
|
35
|
-
.addStorageBuffer("queue_out", COLLECTION_U32_STRUCT_WRITE, true)
|
|
36
|
-
;
|
|
37
|
-
|
|
38
|
-
resources.createGroup()
|
|
39
|
-
.addStorageBuffer("claim", WebGPUArray.from(atomic_u32), true)
|
|
40
|
-
.addStorageBuffer("feedback", WebGPUArray.from(atomic_u32), true)
|
|
41
|
-
.addStorageBuffer("vg_want_stamps", WebGPUArray.from(atomic_u32), true)
|
|
42
|
-
// a list a taken cell: its count, its key, then a cluster's pair and meshlet row each
|
|
43
|
-
.addStorageBuffer("vgeo_brick_cells", WebGPUArray.from(atomic_u32), true)
|
|
44
|
-
// the cells a cluster went onto the list of, each once: the distance pass's
|
|
45
|
-
.addStorageBuffer("vgeo_brick_filled", COLLECTION_U32_STRUCT_WRITE, true)
|
|
46
|
-
;
|
|
47
|
-
|
|
48
|
-
const body = CodeChunk.from(
|
|
49
|
-
//language=WGSL
|
|
50
|
-
`
|
|
51
|
-
/**
|
|
52
|
-
* The rule's culls, against the pair's box in the instance's object space: a subtree whose bound lies wholly
|
|
53
|
-
* past one of the box's six faces has nothing within the cell's band. The camera's frustum tests with the box's
|
|
54
|
-
* faces for the frustum's planes; conservative where a bound passes the box's corner without crossing any one face.
|
|
55
|
-
*
|
|
56
|
-
* Against axis-aligned faces a sphere is exactly its cube, so a sphere is tested as one. A cluster's subtree box
|
|
57
|
-
* lies within its sphere's cube, so there the box decides; a node, which has only its sphere, is culled by it alone.
|
|
58
|
-
*/
|
|
59
|
-
fn vg_cut_sphere_outside(instance_base: u32, sphere: vec4<f32>) -> bool {
|
|
60
|
-
return vg_cut_box_outside(instance_base, sphere.xyz - vec3<f32>(sphere.w), sphere.xyz + vec3<f32>(sphere.w));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
fn vg_cut_box_outside(instance_base: u32, lower: vec3<f32>, upper: vec3<f32>) -> bool {
|
|
64
|
-
return any(upper < vgeo_brick_box_lower(instance_base)) || any(lower > vgeo_brick_box_upper(instance_base));
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* A cluster in the cut, a stand-in's too, onto its cell's list as its pair and its meshlet row. A list keeps
|
|
69
|
-
* counting past what it holds, so its reader takes the least of its count and its size. A cell's first cluster
|
|
70
|
-
* puts the cell on the distance pass's list, once.
|
|
71
|
-
*
|
|
72
|
-
* A stand-in, for a page not resident (a clamp) or a group not selectable (held), makes the cell wait: it is built
|
|
73
|
-
* again once that page is resident and that group selectable. The cell's first stand-in is the one it waits on; a
|
|
74
|
-
* cell rebuilt with others still standing in waits again, on one of them.
|
|
75
|
-
*/
|
|
76
|
-
fn vg_cut_take(instance_base: u32, page_row: u32, verdict: VGVerdict) {
|
|
77
|
-
let build = instances[instance_base + ${VGEO_BRICK_PAIR_BUILD}u];
|
|
78
|
-
let list = build * ${VGEO_BRICK_CELL_WORDS}u;
|
|
79
|
-
|
|
80
|
-
let slot = atomicAdd(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.COUNT}u], 1u);
|
|
81
|
-
|
|
82
|
-
if (slot == 0u) {
|
|
83
|
-
vgeo_brick_filled.elements[atomicAdd(&vgeo_brick_filled.count, 1u)] = build;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// the first stand-in: what the cell waits on, and what wants it while it is away
|
|
87
|
-
if (verdict.kind != VG_VERDICT_TAKE && atomicAdd(&vgeo_brick_cells[list + ${VGEO_BRICK_CELL_OFFSET.WAITS}u], 1u) == 0u) {
|
|
88
|
-
let wait = list + ${VGEO_BRICK_CELL_OFFSET.WAIT}u;
|
|
89
|
-
|
|
90
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.LOOKUP}u], instances[instance_base + ${VGEO_INSTANCE_OFFSET.LOOKUP_WORD_OFFSET}u]);
|
|
91
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.PAGE}u], verdict.child_page_index);
|
|
92
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.GROUP}u], verdict.child_group);
|
|
93
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.SOURCE}u], page_row);
|
|
94
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.SOURCE_PAGE}u], vg_page_field(page_row, ${VGEO_PAGE_ROW_OFFSET.PAGE_INDEX}u));
|
|
95
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.REF}u], verdict.child_ref);
|
|
96
|
-
atomicStore(&vgeo_brick_cells[wait + ${VGEO_BRICK_WAIT_OFFSET.ERROR}u], bitcast<u32>(verdict.projected));
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
if (slot >= ${VGEO_BRICK_CELL_CLUSTERS}u) {
|
|
100
|
-
vg_stat(${VGEO_CUT_STAT.MESHLETS_DROPPED}u, 1u);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
let entry = list + ${VGEO_BRICK_CELL_OFFSET.ENTRIES}u + 2u * slot;
|
|
105
|
-
|
|
106
|
-
atomicStore(&vgeo_brick_cells[entry], instance_base / VG_INSTANCE_WORDS);
|
|
107
|
-
atomicStore(&vgeo_brick_cells[entry + 1u], vg_page_field(page_row, ${VGEO_PAGE_ROW_OFFSET.MESHLET_BASE}u) + verdict.cluster);
|
|
108
|
-
|
|
109
|
-
vg_stat(${VGEO_CUT_STAT.DRAWN}u, 1u);
|
|
110
|
-
}
|
|
111
|
-
`, [
|
|
112
|
-
chunk_vgeo_cut_descent,
|
|
113
|
-
chunk_vgeo_cut_access,
|
|
114
|
-
chunk_vgeo_brick_box,
|
|
115
|
-
]);
|
|
116
|
-
|
|
117
|
-
body.addExtension(WebGPUExtensionType.Subgroups);
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* The vgeo provider's box cut (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.8): the camera cut's descent
|
|
121
|
-
* (`chunk_vgeo_cut_descent`) over the gather's pair records, culled against each pair's box, at the world error
|
|
122
|
-
* its record's projection constant sets against a τ of 1. A cluster in the cut, a stand-in for a page not yet
|
|
123
|
-
* resident too, goes onto its taken cell's list; a clamp wants its page through the cut's own feedback slot, as
|
|
124
|
-
* the camera's do. A cell's first stand-in goes into its list's header with what its want was made of, so that
|
|
125
|
-
* the wait can want that page again while the cell waits (`VGEO_BRICK_WAIT_OFFSET`).
|
|
126
|
-
*
|
|
127
|
-
* @type {ComputeShader}
|
|
128
|
-
*/
|
|
129
|
-
export const shader_vgeo_brick_traverse = ComputeShader.from({
|
|
130
|
-
label: "Brick Clipmap VGeo Cut",
|
|
131
|
-
resources,
|
|
132
|
-
body,
|
|
133
|
-
});
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lanes of the wait: a waiting cell each.
|
|
3
|
-
* @type {number}
|
|
4
|
-
*/
|
|
5
|
-
export const VGEO_BRICK_WAIT_WORKGROUP_SIZE: number;
|
|
6
|
-
/**
|
|
7
|
-
* The vgeo provider's wait (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.6 contract 6, §7.8): a thread a cell the last
|
|
8
|
-
* frame left waiting, built while a cluster of its cut stood in for a page not resident or a group not selectable.
|
|
9
|
-
* A cell whose page is resident and whose group is selectable now is queued again with `brick_clipmap_enqueue`, so
|
|
10
|
-
* exactly the cells that stood something in are built again, once what they waited on is there. The rest wait on,
|
|
11
|
-
* onto the list this frame's distance pass adds its own to (and counts those past its capacity).
|
|
12
|
-
*
|
|
13
|
-
* A want lasts the reading it is in (`VGeoResidency.apply` drops what its budgets defer), so a cell waiting on a page
|
|
14
|
-
* not resident wants it again, each frame, through the provider's cut's slot (`vg_want`): through the page its
|
|
15
|
-
* stand-in was found in, while that row still holds that page. Once it holds another, the cell is queued again
|
|
16
|
-
* instead, and its cut finds the way down anew. A group held back carries no want, as in the cut.
|
|
17
|
-
*
|
|
18
|
-
* @type {ComputeShader}
|
|
19
|
-
*/
|
|
20
|
-
export const shader_vgeo_brick_wait: ComputeShader;
|
|
21
|
-
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
22
|
-
//# sourceMappingURL=shader_vgeo_brick_wait.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shader_vgeo_brick_wait.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,6CAFU,MAAM,CAEiC;AA2FjD;;;;;;;;;;;;;GAaG;AACH,qCAFU,aAAa,CAMpB;8BA9H2B,qCAAqC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { chunk_vgeo_cut_arena } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js";
|
|
2
|
-
import { chunk_vgeo_cut_want } from "../../../../geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js";
|
|
3
|
-
import { VGEO_CUT_PARAMS_STRUCT } from "../../../../geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js";
|
|
4
|
-
import { VGEO_PAGE_ROW_NONE } from "../../../../geometry/virtual/runtime/layout/VGEO_PAGE_ROW_NONE.js";
|
|
5
|
-
import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
|
|
6
|
-
import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
7
|
-
import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
8
|
-
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
9
|
-
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
10
|
-
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
-
import { atomic_u32, u32 } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
12
|
-
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
13
|
-
import {
|
|
14
|
-
BRICK_PENDING_RESOURCE,
|
|
15
|
-
BRICK_RING_RESOURCE,
|
|
16
|
-
BRICK_STATE_RESOURCE,
|
|
17
|
-
chunk_brick_clipmap,
|
|
18
|
-
chunk_brick_clipmap_enqueue
|
|
19
|
-
} from "../chunk_brick_clipmap.js";
|
|
20
|
-
import { VGEO_BRICK_SETTINGS, VGEO_BRICK_WAIT_OFFSET, VGEO_BRICK_WAIT_WORDS } from "./VGEO_BRICK.js";
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Lanes of the wait: a waiting cell each.
|
|
24
|
-
* @type {number}
|
|
25
|
-
*/
|
|
26
|
-
export const VGEO_BRICK_WAIT_WORKGROUP_SIZE = 64;
|
|
27
|
-
|
|
28
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
29
|
-
|
|
30
|
-
resources.setImmediate("settings", VGEO_BRICK_SETTINGS);
|
|
31
|
-
|
|
32
|
-
resources.createGroup()
|
|
33
|
-
.addUniform("params", VGEO_CUT_PARAMS_STRUCT)
|
|
34
|
-
.addStorageBuffer("vg_lookup", WebGPUArray.from(u32))
|
|
35
|
-
.addStorageBuffer("vg_arena", WebGPUArray.from(u32))
|
|
36
|
-
// the frame's feedback, where the provider's cut's slot takes the wants, and the frame's want stamps
|
|
37
|
-
.addStorageBuffer("feedback", WebGPUArray.from(atomic_u32), true)
|
|
38
|
-
.addStorageBuffer("vg_want_stamps", WebGPUArray.from(atomic_u32), true);
|
|
39
|
-
|
|
40
|
-
resources.createGroup()
|
|
41
|
-
// the cells the last frame left waiting, and the list this frame's leaves
|
|
42
|
-
.addStorageBuffer("vgeo_brick_waiting_in", COLLECTION_U32_STRUCT_READ)
|
|
43
|
-
.addStorageBuffer("vgeo_brick_waiting", COLLECTION_U32_STRUCT_WRITE, true);
|
|
44
|
-
|
|
45
|
-
resources.createGroup()
|
|
46
|
-
.add(BRICK_STATE_RESOURCE)
|
|
47
|
-
.add(BRICK_RING_RESOURCE)
|
|
48
|
-
.add(BRICK_PENDING_RESOURCE);
|
|
49
|
-
|
|
50
|
-
const body = CodeChunk.from(
|
|
51
|
-
//language=WGSL
|
|
52
|
-
`
|
|
53
|
-
const VG_PAGE_ROW_NONE = ${VGEO_PAGE_ROW_NONE}u;
|
|
54
|
-
const VGEO_BRICK_WAIT_WORDS = ${VGEO_BRICK_WAIT_WORDS}u;
|
|
55
|
-
|
|
56
|
-
@compute @workgroup_size(${VGEO_BRICK_WAIT_WORKGROUP_SIZE})
|
|
57
|
-
fn main(
|
|
58
|
-
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
59
|
-
@builtin(local_invocation_index) lane: u32,
|
|
60
|
-
) {
|
|
61
|
-
let i = folded_workgroup_index(workgroup_id) * ${VGEO_BRICK_WAIT_WORKGROUP_SIZE}u + lane;
|
|
62
|
-
|
|
63
|
-
// the list's count runs past what it holds
|
|
64
|
-
if (i >= min(vgeo_brick_waiting_in.count, settings.wait_capacity)) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
let at = VGEO_BRICK_WAIT_WORDS * i;
|
|
69
|
-
let key = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.KEY}u];
|
|
70
|
-
let lookup = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.LOOKUP}u];
|
|
71
|
-
let page = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.PAGE}u];
|
|
72
|
-
let group = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.GROUP}u];
|
|
73
|
-
|
|
74
|
-
let row = vg_lookup[lookup + page];
|
|
75
|
-
|
|
76
|
-
// the page is resident and the group drawable: the cell is built again, whatever its storage cell holds then
|
|
77
|
-
if (row != VG_PAGE_ROW_NONE && vg_group_selectable(row, group)) {
|
|
78
|
-
brick_clipmap_enqueue(key, settings.ring_capacity);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (row == VG_PAGE_ROW_NONE) {
|
|
83
|
-
let source = vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.SOURCE}u];
|
|
84
|
-
|
|
85
|
-
// the page it was found through has gone too: the cell is built again, and its cut finds the way down anew
|
|
86
|
-
if (vg_lookup[lookup + vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.SOURCE_PAGE}u]] != source) {
|
|
87
|
-
brick_clipmap_enqueue(key, settings.ring_capacity);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// a want lasts the reading it is in: the page is wanted again each frame the cell waits on it, as the camera
|
|
92
|
-
// cut wants its pages again each frame it draws a stand-in
|
|
93
|
-
vg_want(
|
|
94
|
-
source,
|
|
95
|
-
vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.REF}u],
|
|
96
|
-
page,
|
|
97
|
-
lookup,
|
|
98
|
-
bitcast<f32>(vgeo_brick_waiting_in.elements[at + ${VGEO_BRICK_WAIT_OFFSET.ERROR}u])
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// within the capacity: the list kept onto was cleared, and holds no more than the one it keeps from
|
|
103
|
-
let kept = atomicAdd(&vgeo_brick_waiting.count, 1u);
|
|
104
|
-
|
|
105
|
-
for (var w = 0u; w < VGEO_BRICK_WAIT_WORDS; w++) {
|
|
106
|
-
vgeo_brick_waiting.elements[VGEO_BRICK_WAIT_WORDS * kept + w] = vgeo_brick_waiting_in.elements[at + w];
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
`, [
|
|
110
|
-
chunk_brick_clipmap,
|
|
111
|
-
chunk_brick_clipmap_enqueue,
|
|
112
|
-
chunk_folded_workgroup_index,
|
|
113
|
-
chunk_vgeo_cut_arena,
|
|
114
|
-
chunk_vgeo_cut_want,
|
|
115
|
-
]);
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* The vgeo provider's wait (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §7.6 contract 6, §7.8): a thread a cell the last
|
|
119
|
-
* frame left waiting, built while a cluster of its cut stood in for a page not resident or a group not selectable.
|
|
120
|
-
* A cell whose page is resident and whose group is selectable now is queued again with `brick_clipmap_enqueue`, so
|
|
121
|
-
* exactly the cells that stood something in are built again, once what they waited on is there. The rest wait on,
|
|
122
|
-
* onto the list this frame's distance pass adds its own to (and counts those past its capacity).
|
|
123
|
-
*
|
|
124
|
-
* A want lasts the reading it is in (`VGeoResidency.apply` drops what its budgets defer), so a cell waiting on a page
|
|
125
|
-
* not resident wants it again, each frame, through the provider's cut's slot (`vg_want`): through the page its
|
|
126
|
-
* stand-in was found in, while that row still holds that page. Once it holds another, the cell is queued again
|
|
127
|
-
* instead, and its cut finds the way down anew. A group held back carries no want, as in the cut.
|
|
128
|
-
*
|
|
129
|
-
* @type {ComputeShader}
|
|
130
|
-
*/
|
|
131
|
-
export const shader_vgeo_brick_wait = ComputeShader.from({
|
|
132
|
-
label: "Brick Clipmap VGeo Wait",
|
|
133
|
-
resources,
|
|
134
|
-
body,
|
|
135
|
-
});
|