@woosh/meep-engine 3.61.3 → 3.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +415 -413
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +26 -16
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +6 -11
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +6 -2
- package/src/engine/graphics3/highlight/shader_highlight_outline.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +167 -150
- package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -1
- package/src/engine/graphics3/shader_picking_gather.js +133 -120
- package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUTexture.js +11 -0
- package/src/shade/device/pipeline/rp_validate_and_rewrite_for_color_attachments.js +1 -1
- package/src/shade/playground/contact_shadows/ContactShadowLab.js +6 -6
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +6 -4
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +6 -4
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +6 -4
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +1 -1
- package/src/shade/playground/ssr_variance/capture.js +1 -1
- package/src/shade/renderer/Renderer.d.ts +2 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +40 -53
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +3 -1
- package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.js +5 -4
- package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_deferred_main.js +6 -4
- package/src/shade/renderer/extension/GBufferTextures.d.ts +5 -1
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.js +5 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +11 -7
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +17 -13
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts +2 -0
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts.map +1 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.js +2 -0
- package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.d.ts.map +1 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.js +8 -5
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +7 -5
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +29 -16
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +9 -3
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +40 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -15
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js +7 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_diffuse.js +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +1 -3
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +2 -2
- package/src/shade/renderer/global_illumination/lpv/shader_diffuse_LPV.js +1 -1
- 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 +14 -1
- 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 +10 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +5 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +5 -3
- package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_colored_hash.js +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_sharc_debug_radiance.js +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +22 -9
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +159 -65
- package/src/shade/renderer/material/MATERIAL_MASK.d.ts +19 -0
- package/src/shade/renderer/material/MATERIAL_MASK.d.ts.map +1 -0
- package/src/shade/renderer/material/MATERIAL_MASK.js +19 -0
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts +8 -8
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.js +11 -92
- package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.js +10 -2
- package/src/shade/renderer/material/dispatch/gbuffer_compute.js +2 -2
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts +7 -7
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.js +20 -16
- package/src/shade/renderer/material/dispatch/shader_material_pixel_count.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_count.js +3 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.js +3 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +26 -25
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts +10 -8
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +16 -13
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts +1 -1
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.js +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts +5 -2
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +7 -4
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +3 -3
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +12 -10
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +2 -2
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +9 -7
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +11 -8
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +3 -3
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +17 -12
- package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +4 -4
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +2 -2
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -41
- package/src/shade/renderer/postprocess/ssr/prefilter/chunk_load_neighbourhood_sample.js +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +5 -2
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -4
- package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts +2 -1
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.js +10 -2
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -4
- package/src/shade/renderer/postprocess/taa/shader_reprojection_map.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_reprojection_map.js +6 -4
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +6 -8
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +29 -33
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +1 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +6 -3
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +8 -3
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +3 -0
- package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.d.ts +1 -0
- package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.js +5 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +8 -3
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +54 -5
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +2 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +73 -9
- package/src/shade/renderer/rasterize/native/viz/shader_vertex.js +4 -4
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +23 -40
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +55 -76
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +4 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +6 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +4 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +6 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +5 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +43 -2
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts +39 -0
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.js +45 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts +26 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.js +48 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts +40 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.js +172 -0
- package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.js +6 -4
- package/src/shade/renderer/restir/di/chunk_restir_spatial_reuse.js +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +2 -2
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.js +26 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +60 -18
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +163 -45
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +19 -18
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js +22 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts +8 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js +10 -8
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.js +32 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts +11 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.js +14 -6
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.js +24 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.js +27 -0
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.js +8 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_load_world_space_normal.js +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +10 -10
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +8 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +9 -0
- package/src/shade/renderer/shader/util/shader_decode_octahedral_normal.js +1 -1
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +3 -3
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -1
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +3 -3
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -1
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +6 -4
- package/src/shade/renderer/shadow/ray/RTXShadows.d.ts +6 -4
- package/src/shade/renderer/shadow/ray/RTXShadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +16 -5
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +7 -7
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +2 -2
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts +4 -2
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +79 -74
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +7 -7
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +7 -3
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +7 -5
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +29 -16
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts +5 -5
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +8 -8
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +13 -14
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +6 -4
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +11 -9
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +13 -11
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts +0 -7
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts.map +0 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.js +0 -6
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts +0 -3
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +0 -104
|
@@ -108,6 +108,7 @@ export class TemplatePassDescriptor extends RenderPassDescriptor {
|
|
|
108
108
|
r.resources = origin.resources;
|
|
109
109
|
r.colorAttachments = origin.colorAttachments;
|
|
110
110
|
r.depthStencilAttachment = origin.depthStencilAttachment;
|
|
111
|
+
r.visible_meshlet_slots = origin.visible_meshlet_slots;
|
|
111
112
|
|
|
112
113
|
origin.#variants.set(set, r);
|
|
113
114
|
}
|
|
@@ -38,9 +38,11 @@ export function enquire_meshlets_rasterize_by_bucket_pipelines(enquiry: Pipeline
|
|
|
38
38
|
* @param {Readonly<Record<number, GPUCullMode>>} options.cull_policy
|
|
39
39
|
* @param {number[]} [options.viewport]
|
|
40
40
|
* @param {GPUCollectionLimits} options.limits
|
|
41
|
-
* @
|
|
41
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, which every draw appends to,
|
|
42
|
+
* as {@link graph_meshlets_rasterize}
|
|
43
|
+
* @returns {[number, number[], number]} depth, colour and table handles, as {@link graph_meshlets_rasterize}
|
|
42
44
|
*/
|
|
43
|
-
export function graph_meshlets_rasterize_by_bucket({ graph, view, input_meshlets, buckets, depth, color_targets, pass_descriptor, clear_targets, cull_policy, viewport, limits, }: {
|
|
45
|
+
export function graph_meshlets_rasterize_by_bucket({ graph, view, input_meshlets, buckets, depth, color_targets, pass_descriptor, clear_targets, cull_policy, viewport, limits, visible_meshlets, }: {
|
|
44
46
|
graph: FrameGraph;
|
|
45
47
|
view: GPUViewContext;
|
|
46
48
|
input_meshlets: number;
|
|
@@ -56,7 +58,8 @@ export function graph_meshlets_rasterize_by_bucket({ graph, view, input_meshlets
|
|
|
56
58
|
cull_policy: Readonly<Record<number, GPUCullMode>>;
|
|
57
59
|
viewport?: number[];
|
|
58
60
|
limits: GPUCollectionLimits;
|
|
59
|
-
|
|
61
|
+
visible_meshlets?: number;
|
|
62
|
+
}): [number, number[], number];
|
|
60
63
|
export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
|
|
61
64
|
export type RenderPassDescriptor = import("../../shader/pass/RenderPassDescriptor.js").RenderPassDescriptor;
|
|
62
65
|
//# sourceMappingURL=graph_meshlets_rasterize_by_bucket.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_meshlets_rasterize_by_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js"],"names":[],"mappings":"AAaA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,wEAJW,eAAe,mBACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAS/C;AAED
|
|
1
|
+
{"version":3,"file":"graph_meshlets_rasterize_by_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js"],"names":[],"mappings":"AAaA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,wEAJW,eAAe,mBACf,oBAAoB,eACpB,SAAS,OAAO,MAAM,cAAc,CAAC,QAS/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IAhB+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IAC0D,OAAO,EAAvE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,EAAE;IAEtC,KAAK,EAArB,MAAM;IACY,aAAa,EAA/B,MAAM,EAAE;IACsB,eAAe,EAA7C,oBAAoB;IACH,aAAa,EAA9B,OAAO;IACwC,WAAW,EAA1D,SAAS,OAAO,MAAM,cAAc,CAAC;IAClB,QAAQ,GAA3B,MAAM,EAAE;IACqB,MAAM;IAClB,gBAAgB,GAAjC,MAAM;IAEJ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAsEtC;8BAxHY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB"}
|
|
@@ -60,7 +60,9 @@ export function enquire_meshlets_rasterize_by_bucket_pipelines(enquiry, pass_des
|
|
|
60
60
|
* @param {Readonly<Record<number, GPUCullMode>>} options.cull_policy
|
|
61
61
|
* @param {number[]} [options.viewport]
|
|
62
62
|
* @param {GPUCollectionLimits} options.limits
|
|
63
|
-
* @
|
|
63
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, which every draw appends to,
|
|
64
|
+
* as {@link graph_meshlets_rasterize}
|
|
65
|
+
* @returns {[number, number[], number]} depth, colour and table handles, as {@link graph_meshlets_rasterize}
|
|
64
66
|
*/
|
|
65
67
|
export function graph_meshlets_rasterize_by_bucket({
|
|
66
68
|
graph,
|
|
@@ -74,6 +76,7 @@ export function graph_meshlets_rasterize_by_bucket({
|
|
|
74
76
|
cull_policy,
|
|
75
77
|
viewport,
|
|
76
78
|
limits,
|
|
79
|
+
visible_meshlets = -1,
|
|
77
80
|
}) {
|
|
78
81
|
assert.isArray(buckets, 'buckets');
|
|
79
82
|
assert.greaterThanOrEqual(buckets.length, 1, 'buckets.length');
|
|
@@ -91,6 +94,7 @@ export function graph_meshlets_rasterize_by_bucket({
|
|
|
91
94
|
clear_targets,
|
|
92
95
|
primitive_state: construct_primitive_state(draw_mode, side, cull_policy),
|
|
93
96
|
viewport,
|
|
97
|
+
visible_meshlets,
|
|
94
98
|
});
|
|
95
99
|
}
|
|
96
100
|
|
|
@@ -111,7 +115,7 @@ export function graph_meshlets_rasterize_by_bucket({
|
|
|
111
115
|
limits,
|
|
112
116
|
});
|
|
113
117
|
|
|
114
|
-
[depth, color_targets] = graph_meshlets_rasterize({
|
|
118
|
+
[depth, color_targets, visible_meshlets] = graph_meshlets_rasterize({
|
|
115
119
|
graph,
|
|
116
120
|
view,
|
|
117
121
|
input_meshlets: meshlets,
|
|
@@ -121,10 +125,11 @@ export function graph_meshlets_rasterize_by_bucket({
|
|
|
121
125
|
clear_targets: clear,
|
|
122
126
|
primitive_state: construct_primitive_state(draw_mode, side, cull_policy),
|
|
123
127
|
viewport,
|
|
128
|
+
visible_meshlets,
|
|
124
129
|
});
|
|
125
130
|
|
|
126
131
|
clear = false;
|
|
127
132
|
}
|
|
128
133
|
|
|
129
|
-
return [depth, color_targets];
|
|
134
|
+
return [depth, color_targets, visible_meshlets];
|
|
130
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUCollectionLimits.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/GPUCollectionLimits.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUCollectionLimits.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/GPUCollectionLimits.js"],"names":[],"mappings":"AA0BA;;GAEG;AACH;IAyBI;;;OAGG;IACH,+BAwBC;IAzCD;;;OAGG;IACH,uCAEC;IAqCD;;;;OAIG;IACH,gBAHW,2BAA2B,GAC1B,MAAM,CAMjB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAHW,2BAA2B,SAC3B,MAAM,QAQhB;IAED;;;;OAIG;IACH,0BAHW,2BAA2B,GACzB,MAAM,CAyBlB;IA+BD,gBAEC;IAED;;;;;;;OAOG;IACH,gBAHW,sBAAsB,WACtB,kBAAkB,iBAkB5B;;CAEJ;qCAxMY,OAAO,2CAA2C,EAAE,sBAAsB;iCAC1E,OAAO,oCAAoC,EAAE,kBAAkB;0CANlC,yCAAyC;4CACvC,kCAAkC"}
|
|
@@ -20,6 +20,8 @@ const ELEMENT_SIZES = {
|
|
|
20
20
|
[RasterizationCollectionType.ObjectPropertyReference]: Uint32Array.BYTES_PER_ELEMENT * 2,
|
|
21
21
|
// LightClusterEntries: one light id, u32
|
|
22
22
|
[RasterizationCollectionType.LightClusterEntries]: Uint32Array.BYTES_PER_ELEMENT,
|
|
23
|
+
// MeshletDefinition, as Meshlets
|
|
24
|
+
[RasterizationCollectionType.VisibleMeshlets]: Uint32Array.BYTES_PER_ELEMENT * 2,
|
|
23
25
|
}
|
|
24
26
|
|
|
25
27
|
/**
|
|
@@ -67,6 +69,7 @@ export class GPUCollectionLimits {
|
|
|
67
69
|
// prime stats to avoid pops
|
|
68
70
|
this.#stats.setGlobalMax(RasterizationCollectionType.Meshes, 1e4);
|
|
69
71
|
this.#stats.setGlobalMax(RasterizationCollectionType.Meshlets, 2e5);
|
|
72
|
+
this.#stats.setGlobalMax(RasterizationCollectionType.VisibleMeshlets, 2e5);
|
|
70
73
|
this.#stats.setGlobalMax(RasterizationCollectionType.ObjectPropertyReference, 1024);
|
|
71
74
|
// primed for each cluster grid by graph_assign_clsuters
|
|
72
75
|
this.#stats.setGlobalMax(RasterizationCollectionType.LightClusterEntries, 0);
|
|
@@ -19,4 +19,9 @@ export const RasterizationCollectionType = {
|
|
|
19
19
|
* culled light's box of cells — see {@link CLUSTER_LIGHT_BOUND}.
|
|
20
20
|
*/
|
|
21
21
|
LightClusterEntries: 3,
|
|
22
|
+
/**
|
|
23
|
+
* The frame's visible-meshlet table: every meshlet the view's raster draws into the visibility
|
|
24
|
+
* buffer, at the slot its pixels name — see `graph_rasterize_scene`.
|
|
25
|
+
*/
|
|
26
|
+
VisibleMeshlets: 4,
|
|
22
27
|
};
|
|
@@ -20,9 +20,13 @@ export function enquire_meshlets_rasterize_pipelines(enquiry: PipelineEnquiry, p
|
|
|
20
20
|
* @param {number[]} [options.viewport] drives {@link GPURenderPassEncoder.setViewport}. Format: [x, y, width, height]
|
|
21
21
|
* @param {PrimitiveState} [options.primitive_state]
|
|
22
22
|
* @param {boolean} [options.clear_targets]
|
|
23
|
-
* @
|
|
23
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, when `pass_descriptor` writes
|
|
24
|
+
* its slots ({@link RenderPassDescriptor#visible_meshlet_slots}) and only then: the draw appends its
|
|
25
|
+
* meshlets to the table and draws them from there, so each instance is the slot of its meshlet
|
|
26
|
+
* @return {[depth:number, color:number[], visible_meshlets:number]} the targets as the draw left them, and the
|
|
27
|
+
* table with its meshlets appended (-1 without one)
|
|
24
28
|
*/
|
|
25
|
-
export function graph_meshlets_rasterize({ graph, view, input_meshlets, depth, pass_descriptor, color_targets, viewport, primitive_state, clear_targets, }: {
|
|
29
|
+
export function graph_meshlets_rasterize({ graph, view, input_meshlets, depth, pass_descriptor, color_targets, viewport, primitive_state, clear_targets, visible_meshlets, }: {
|
|
26
30
|
graph: FrameGraph;
|
|
27
31
|
view: GPUViewContext;
|
|
28
32
|
input_meshlets: number;
|
|
@@ -32,7 +36,8 @@ export function graph_meshlets_rasterize({ graph, view, input_meshlets, depth, p
|
|
|
32
36
|
viewport?: number[];
|
|
33
37
|
primitive_state?: PrimitiveState;
|
|
34
38
|
clear_targets?: boolean;
|
|
35
|
-
|
|
39
|
+
visible_meshlets?: number;
|
|
40
|
+
}): [depth: number, color: number[], visible_meshlets: number];
|
|
36
41
|
export type PipelineEnquiry = import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
|
|
37
42
|
export type RenderPassDescriptor = import("../../shader/pass/RenderPassDescriptor.js").RenderPassDescriptor;
|
|
38
43
|
export type PrimitiveState = import("../../../descriptor/pipeline/render/PrimitiveState.js").PrimitiveState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"AAwBA;;;;;;;;GAQG;AACH,8DAJW,eAAe,mBACf,oBAAoB,mBACpB,cAAc,QAUxB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH;IAf+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IACU,KAAK,EAArB,MAAM;IACwB,eAAe,EAA7C,oBAAoB;IACD,aAAa,GAAhC,MAAM,EAAE;IACW,QAAQ,GAA3B,MAAM,EAAE;IACiB,eAAe,GAAxC,cAAc;IACI,aAAa,GAA/B,OAAO;IACU,gBAAgB,GAAjC,MAAM;IAGL,CAAC,KAAK,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,EAAE,gBAAgB,EAAC,MAAM,CAAC,CA+KlE;8BAxNY,OAAO,6CAA6C,EAAE,eAAe;mCACrE,OAAO,2CAA2C,EAAE,oBAAoB;6BACxE,OAAO,uDAAuD,EAAE,cAAc"}
|
|
@@ -8,6 +8,11 @@ import {
|
|
|
8
8
|
} from "../../gpu_primitive/indirect/build_indirect_draw_command.js";
|
|
9
9
|
import { rp_rewrite_for_primitive_state } from "../../../device/pipeline/rp_rewrite_for_primitive_state.js";
|
|
10
10
|
import { GEOMETRY_MESHLET_TRIANGLE_LIMIT } from "../../geometry/meshlet/GEOMETRY_MESHLET_TRIANGLE_LIMIT.js";
|
|
11
|
+
import { STRUCT_DISPATCH_COMPUTE_COMMAND } from "../../gpu_primitive/indirect/STRUCT_DISPATCH_COMPUTE_COMMAND.js";
|
|
12
|
+
import {
|
|
13
|
+
shader_visible_meshlets_copy,
|
|
14
|
+
shader_visible_meshlets_reserve
|
|
15
|
+
} from "../visibility/shader_visible_meshlets_append.js";
|
|
11
16
|
|
|
12
17
|
/**
|
|
13
18
|
* @typedef {import("../../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
|
|
@@ -27,7 +32,12 @@ const DRAW_COMMAND_PATTERN = `${GEOMETRY_MESHLET_TRIANGLE_LIMIT * 3}, input, 0,
|
|
|
27
32
|
* @param {PrimitiveState} primitive_state
|
|
28
33
|
*/
|
|
29
34
|
export function enquire_meshlets_rasterize_pipelines(enquiry, pass_descriptor, primitive_state) {
|
|
30
|
-
|
|
35
|
+
if (pass_descriptor.visible_meshlet_slots) {
|
|
36
|
+
enquiry.compute.push(shader_visible_meshlets_reserve.pipeline);
|
|
37
|
+
enquiry.compute.push(shader_visible_meshlets_copy.pipeline);
|
|
38
|
+
} else {
|
|
39
|
+
enquiry.compute.push(indirect_draw_command_pipeline(enquiry.device, DRAW_COMMAND_PATTERN));
|
|
40
|
+
}
|
|
31
41
|
enquiry.render.push(rp_rewrite_for_primitive_state(pass_descriptor.pipeline, primitive_state));
|
|
32
42
|
}
|
|
33
43
|
|
|
@@ -43,7 +53,11 @@ export function enquire_meshlets_rasterize_pipelines(enquiry, pass_descriptor, p
|
|
|
43
53
|
* @param {number[]} [options.viewport] drives {@link GPURenderPassEncoder.setViewport}. Format: [x, y, width, height]
|
|
44
54
|
* @param {PrimitiveState} [options.primitive_state]
|
|
45
55
|
* @param {boolean} [options.clear_targets]
|
|
46
|
-
* @
|
|
56
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, when `pass_descriptor` writes
|
|
57
|
+
* its slots ({@link RenderPassDescriptor#visible_meshlet_slots}) and only then: the draw appends its
|
|
58
|
+
* meshlets to the table and draws them from there, so each instance is the slot of its meshlet
|
|
59
|
+
* @return {[depth:number, color:number[], visible_meshlets:number]} the targets as the draw left them, and the
|
|
60
|
+
* table with its meshlets appended (-1 without one)
|
|
47
61
|
*/
|
|
48
62
|
export function graph_meshlets_rasterize({
|
|
49
63
|
graph,
|
|
@@ -55,6 +69,7 @@ export function graph_meshlets_rasterize({
|
|
|
55
69
|
viewport = [0, 0, -1, -1],
|
|
56
70
|
primitive_state,
|
|
57
71
|
clear_targets = true,
|
|
72
|
+
visible_meshlets = -1,
|
|
58
73
|
}) {
|
|
59
74
|
assert.equal(pass_descriptor.isRenderPassDescriptor, true, "pass_descriptor must be a RenderPassDescriptor");
|
|
60
75
|
assert.isBoolean(clear_targets, 'clear_targets');
|
|
@@ -62,6 +77,7 @@ export function graph_meshlets_rasterize({
|
|
|
62
77
|
assert.isNonNegativeInteger(depth, 'depth');
|
|
63
78
|
assert.isArray(color_targets, 'color_targets');
|
|
64
79
|
assert.equal(view.isGPUViewContext, true, "view must be a GPUViewContext");
|
|
80
|
+
assert.equal(visible_meshlets !== -1, pass_descriptor.visible_meshlet_slots, 'a pipeline that writes visible-meshlet slots draws from the table, and only it does');
|
|
65
81
|
|
|
66
82
|
/**
|
|
67
83
|
*
|
|
@@ -77,7 +93,31 @@ export function graph_meshlets_rasterize({
|
|
|
77
93
|
const encoder = context.encoder;
|
|
78
94
|
const device = encoder.device;
|
|
79
95
|
|
|
80
|
-
|
|
96
|
+
/**
|
|
97
|
+
* What the draw takes its meshlets from
|
|
98
|
+
* @type {GPUBuffer}
|
|
99
|
+
*/
|
|
100
|
+
let draw_meshlets = input_meshlets;
|
|
101
|
+
|
|
102
|
+
if (data.visible_meshlets === undefined) {
|
|
103
|
+
build_indirect_draw_command(device, DRAW_COMMAND_PATTERN, encoder, input_meshlets, command);
|
|
104
|
+
} else {
|
|
105
|
+
const table = resources.get(data.visible_meshlets);
|
|
106
|
+
const copy_command = resources.get(data.copy_command);
|
|
107
|
+
|
|
108
|
+
shader_visible_meshlets_reserve.dispatch({
|
|
109
|
+
encoder,
|
|
110
|
+
bindings: { input: input_meshlets, visible_meshlets: table, draw: command, copy: copy_command },
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
shader_visible_meshlets_copy.dispatchIndirect({
|
|
114
|
+
encoder,
|
|
115
|
+
command: copy_command,
|
|
116
|
+
bindings: { draw: command, input: input_meshlets, visible_meshlets: table },
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
draw_meshlets = table;
|
|
120
|
+
}
|
|
81
121
|
|
|
82
122
|
const scene = view.scene;
|
|
83
123
|
const geometry_context = scene.geometries;
|
|
@@ -142,7 +182,7 @@ export function graph_meshlets_rasterize({
|
|
|
142
182
|
meshlet_metadata: scene.geometries.meshlets.buffer_metadata,
|
|
143
183
|
geometries: geometry_context.buffer_metadata,
|
|
144
184
|
materials: scene.materials.metadata_table.buffer,
|
|
145
|
-
meshlets:
|
|
185
|
+
meshlets: draw_meshlets,
|
|
146
186
|
}
|
|
147
187
|
});
|
|
148
188
|
|
|
@@ -174,12 +214,21 @@ export function graph_meshlets_rasterize({
|
|
|
174
214
|
GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT
|
|
175
215
|
));
|
|
176
216
|
data.input_meshlets = pass.read(input_meshlets);
|
|
217
|
+
|
|
218
|
+
if (visible_meshlets !== -1) {
|
|
219
|
+
data.visible_meshlets = pass.write(visible_meshlets);
|
|
220
|
+
data.copy_command = pass.create("visible meshlets copy command", BufferResourceDescriptor.from(
|
|
221
|
+
STRUCT_DISPATCH_COMPUTE_COMMAND.size,
|
|
222
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT
|
|
223
|
+
));
|
|
224
|
+
}
|
|
177
225
|
data.out_texture_depth = pass.write(depth);
|
|
178
226
|
|
|
179
227
|
data.out_color_targets = color_targets.map(pass.write, pass);
|
|
180
228
|
|
|
181
229
|
return [
|
|
182
230
|
data.out_texture_depth,
|
|
183
|
-
data.out_color_targets
|
|
231
|
+
data.out_color_targets,
|
|
232
|
+
data.visible_meshlets ?? -1,
|
|
184
233
|
];
|
|
185
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AVBOITSideChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAoCc,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QACjH,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QACzF,aAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAChG,WAAiB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QACvD,wBAA8B,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QACjG,eAAqB,EAAE,MAAM,CAAC;QAC9B,eAAqB,EAAE,OAAO,6CAA6C,EAAE,eAAe,CAAC;QAC7F,MAAY,EAAE,OAAO,iEAAiE,EAAE,iBAAiB,CAAC;KACvG,KAAK;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAC;;;;;sBAMtB,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,kBAAwB,EAAE,UAAU,MAAM,CAAC,CAAC;QAC5C,SAAe,EAAE,MAAM,CAAC;KACrB,KAAK,MAAM;;;;;;;;kBAED,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,MAAY,EAAE,MAAM,CAAC;QACrB,IAAU,EAAE,MAAM,CAAC;QACnB,aAAmB,EAAE,MAAM,CAAC;QAC5B,gBAAsB,EAAE,MAAM,EAAE,CAAC;QACjC,MAAY,EAAE;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,CAAC;KACjE,KAAK;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;;;;;;;;;;;;;;iBAKhD,CAAC,IAAI,EAAE;QACpB,KAAW,EAAE,OAAO,iEAAiE,EAAE,UAAU,CAAC;QAClG,QAAc,EAAE,OAAO,iCAAiC,EAAE,cAAc,CAAC;QACzE,MAAY,EAAE,MAAM,CAAC;QACrB,aAAmB,EAAE,MAAM,CAAC;QAC5B,IAAU,EAAE,MAAM,CAAC;QACnB,QAAc,EAAE,MAAM,CAAC;QACvB,eAAqB,EAAE,MAAM,CAAC;QAC9B,oBAA0B,EAAE,MAAM,CAAC;QACnC,sBAA4B,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAC;QACxD,YAAkB,EAAE;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAC,CAAC;KACrF,KAAK;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;;;;;;sBAW9D,CAAC,IAAI,EAAE,OAAO,iCAAiC,EAAE,cAAc,KAAK,OAAO"}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* @typedef {object} AVBOITSideChannel
|
|
37
37
|
* @property {(args: {graph: import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph,
|
|
38
38
|
* view_ctx: import("../../../view/GPUViewContext.js").GPUViewContext, camera: number,
|
|
39
|
-
* color_texture: number, depth_texture: number, normal_texture: number,
|
|
39
|
+
* color_texture: number, depth_texture: number, normal_texture: number, pbr_texture: number,
|
|
40
40
|
* hzb_texture: number, environment_texture: number,
|
|
41
41
|
* light_cluster_parameters: number, light_cluster_lookup: number, light_cluster_data: number,
|
|
42
42
|
* shadowmap_atlas: number,
|
package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts
CHANGED
|
@@ -171,7 +171,7 @@ export function avboit_create_accumulators(pass: FramePassBuilder, resolution: A
|
|
|
171
171
|
* sources of transparent fragments; the MBOIT orchestrator ignores them
|
|
172
172
|
* @returns {number} resource ID of the composited color texture
|
|
173
173
|
*/
|
|
174
|
-
export function graph_rasterize_meshes_transparent_avboit({ graph, buckets, view_ctx, viewport, depth_texture, color_texture, normal_texture, hzb_texture, environment_texture, limits, light_cluster_parameters, light_cluster_lookup, light_cluster_data, shadowmap_atlas, volumetrics_lut, volumetrics_metadata, volumetrics_irradiance, shader_switches, probes, avboit, side_channels, }: {
|
|
174
|
+
export function graph_rasterize_meshes_transparent_avboit({ graph, buckets, view_ctx, viewport, depth_texture, color_texture, normal_texture, pbr_texture, hzb_texture, environment_texture, limits, light_cluster_parameters, light_cluster_lookup, light_cluster_data, shadowmap_atlas, volumetrics_lut, volumetrics_metadata, volumetrics_irradiance, shader_switches, probes, avboit, side_channels, }: {
|
|
175
175
|
graph: FrameGraph;
|
|
176
176
|
buckets: number;
|
|
177
177
|
view_ctx: GPUViewContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,oDAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CAOpB;AAED;;;;;;;;;;;;GAYG;AACH;IAT+B,KAAK;IACA,KAAK;IACd,MAAM,EAAtB,MAAM;IACqB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACD,kBAAkB,EAAlC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,MAAM,CA4DlB;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,SAAS,EAAzB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACmB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACQ,MAAM,GAA/B,cAAc;IACZ,MAAM,CAuDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6KAFa;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAiJjE;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,IAAI,EAApB,MAAM;IACU,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACN,MAAM,CAoClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sUAFa;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA4M7D;AAED;;;;;;;;GAQG;AACH,+EAHW,UAAU,MAAM,CAAC,GACf;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAe/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IA3B+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,QAAQ,EAA1B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,aAAa,EAA7B,MAAM;IACuB,MAAM;IACnB,wBAAwB,EAAxC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,kBAAkB,EAAlC,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,oBAAoB,EAApC,MAAM;IAC6B,sBAAsB,EAAzD;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAGC,eAAe,GAAzC,eAAe;IAGsF,MAAM,EAA3G,OAAO,iEAAiE,EAAE,iBAAiB;IAGlE,MAAM,GAA/B,cAAc;IACiD,aAAa,GAA5E,OAAO,wBAAwB,EAAE,iBAAiB,EAAE;IAElD,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,oDAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CAOpB;AAED;;;;;;;;;;;;GAYG;AACH;IAT+B,KAAK;IACA,KAAK;IACd,MAAM,EAAtB,MAAM;IACqB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACD,kBAAkB,EAAlC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,MAAM,CA4DlB;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,SAAS,EAAzB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACmB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACQ,MAAM,GAA/B,cAAc;IACZ,MAAM,CAuDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6KAFa;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAiJjE;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,IAAI,EAApB,MAAM;IACU,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACN,MAAM,CAoClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,sUAFa;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CA4M7D;AAED;;;;;;;;GAQG;AACH,+EAHW,UAAU,MAAM,CAAC,GACf;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAe/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH;IA3B+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,QAAQ,EAA1B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,aAAa,EAA7B,MAAM;IACuB,MAAM;IACnB,wBAAwB,EAAxC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,kBAAkB,EAAlC,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,oBAAoB,EAApC,MAAM;IAC6B,sBAAsB,EAAzD;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAGC,eAAe,GAAzC,eAAe;IAGsF,MAAM,EAA3G,OAAO,iEAAiE,EAAE,iBAAiB;IAGlE,MAAM,GAA/B,cAAc;IACiD,aAAa,GAA5E,OAAO,wBAAwB,EAAE,iBAAiB,EAAE;IAElD,MAAM,CAsTlB;+BAz9B8B,qBAAqB;gCAIpB,6CAA6C"}
|
package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js
CHANGED
|
@@ -721,6 +721,7 @@ export function graph_rasterize_meshes_transparent_avboit({
|
|
|
721
721
|
depth_texture,
|
|
722
722
|
color_texture,
|
|
723
723
|
normal_texture,
|
|
724
|
+
pbr_texture,
|
|
724
725
|
hzb_texture,
|
|
725
726
|
environment_texture,
|
|
726
727
|
limits,
|
|
@@ -829,7 +830,7 @@ export function graph_rasterize_meshes_transparent_avboit({
|
|
|
829
830
|
let background_color = color_texture;
|
|
830
831
|
for (const channel of preparers) {
|
|
831
832
|
const prepared = channel.avboit_prepare({ graph, view_ctx, camera: gr_camera, color_texture,
|
|
832
|
-
depth_texture, normal_texture, hzb_texture: gr_hzb, environment_texture, light_cluster_parameters,
|
|
833
|
+
depth_texture, normal_texture, pbr_texture, hzb_texture: gr_hzb, environment_texture, light_cluster_parameters,
|
|
833
834
|
light_cluster_lookup, light_cluster_data, shadowmap_atlas, shader_switches, probes });
|
|
834
835
|
if (prepared?.background_color !== undefined) {
|
|
835
836
|
assert.isNonNegativeInteger(prepared.background_color, 'prepared.background_color');
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
* @param {GPUCollectionLimits} options.limits
|
|
14
14
|
* @param {number[]} [options.viewport] [x,y, width, height] -1 width/height indicates that we need to disable viewport setup
|
|
15
15
|
* @param {TemplatePassDescriptor} options.render_pass_descriptor the pass, with a pipeline per material template
|
|
16
|
-
* @
|
|
16
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
|
|
17
|
+
* ({@link RenderPassDescriptor#visible_meshlet_slots}) and only then: the meshlets are appended to it and drawn
|
|
18
|
+
* from there
|
|
19
|
+
* @returns {{executed:boolean, depth:number, color_targets:number[], visible_meshlets:number}} whether a pass was recorded, along with the depth, colour and table handles to carry forward. When no pass is recorded the input handles are returned unchanged.
|
|
17
20
|
*/
|
|
18
|
-
export function graph_rasterize_meshes_alpha_tested({ graph, buckets, view_ctx, clear_target, side, cull_policy, depth, hzb, raster_color_targets, limits, viewport, render_pass_descriptor }: {
|
|
21
|
+
export function graph_rasterize_meshes_alpha_tested({ graph, buckets, view_ctx, clear_target, side, cull_policy, depth, hzb, raster_color_targets, limits, viewport, render_pass_descriptor, visible_meshlets, }: {
|
|
19
22
|
graph: FrameGraph;
|
|
20
23
|
buckets: number;
|
|
21
24
|
view_ctx: GPUViewContext;
|
|
@@ -28,10 +31,12 @@ export function graph_rasterize_meshes_alpha_tested({ graph, buckets, view_ctx,
|
|
|
28
31
|
limits: GPUCollectionLimits;
|
|
29
32
|
viewport?: number[];
|
|
30
33
|
render_pass_descriptor: TemplatePassDescriptor;
|
|
34
|
+
visible_meshlets?: number;
|
|
31
35
|
}): {
|
|
32
36
|
executed: boolean;
|
|
33
37
|
depth: number;
|
|
34
38
|
color_targets: number[];
|
|
39
|
+
visible_meshlets: number;
|
|
35
40
|
};
|
|
36
41
|
import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
|
|
37
42
|
//# sourceMappingURL=graph_rasterize_meshes_alpha_tested.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_meshes_alpha_tested.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_rasterize_meshes_alpha_tested.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js"],"names":[],"mappings":"AAgCA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAjB+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,YAAY,GAA9B,OAAO;IACiB,IAAI,GAA5B,aAAa;IACmC,WAAW,GAA3D,SAAS,OAAO,MAAM,cAAc,CAAC;IACrB,KAAK,EAArB,MAAM;IACU,GAAG,EAAnB,MAAM;IACY,oBAAoB,EAAtC,MAAM,EAAE;IACqB,MAAM;IAChB,QAAQ,GAA3B,MAAM,EAAE;IACwB,sBAAsB;IACrC,gBAAgB,GAAjC,MAAM;IAGJ;IAAC,QAAQ,EAAC,OAAO,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAC,MAAM,CAAA;CAAC,CA+S7F;8BA3V6B,iCAAiC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
3
|
+
import { STRUCT_DISPATCH_COMPUTE_COMMAND } from "../../gpu_primitive/indirect/STRUCT_DISPATCH_COMPUTE_COMMAND.js";
|
|
2
4
|
import { STRUCT_UNINDEXED_DRAW_COMMAND } from "../../gpu_primitive/indirect/STRUCT_UNINDEXED_DRAW_COMMAND.js";
|
|
3
5
|
import { BindGroupDescriptor } from "../../binding/BindGroupDescriptor.js";
|
|
4
6
|
import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
|
|
@@ -20,6 +22,11 @@ import {
|
|
|
20
22
|
RASTERIZATION_SHADER_BIND_GROUP_SCENE,
|
|
21
23
|
RASTERIZATION_SHADER_BIND_GROUP_VIEW
|
|
22
24
|
} from "./alpha_tested_pass_resources.js";
|
|
25
|
+
import {
|
|
26
|
+
shader_visible_meshlets_copy_array,
|
|
27
|
+
shader_visible_meshlets_offset_commands,
|
|
28
|
+
shader_visible_meshlets_reserve
|
|
29
|
+
} from "../visibility/shader_visible_meshlets_append.js";
|
|
23
30
|
|
|
24
31
|
const DRAW_COMMAND_BYTE_SIZE = STRUCT_UNINDEXED_DRAW_COMMAND.aligned_size;
|
|
25
32
|
|
|
@@ -38,7 +45,10 @@ const DRAW_COMMAND_BYTE_SIZE = STRUCT_UNINDEXED_DRAW_COMMAND.aligned_size;
|
|
|
38
45
|
* @param {GPUCollectionLimits} options.limits
|
|
39
46
|
* @param {number[]} [options.viewport] [x,y, width, height] -1 width/height indicates that we need to disable viewport setup
|
|
40
47
|
* @param {TemplatePassDescriptor} options.render_pass_descriptor the pass, with a pipeline per material template
|
|
41
|
-
* @
|
|
48
|
+
* @param {number} [options.visible_meshlets] the frame's visible-meshlet table, when the pass writes its slots
|
|
49
|
+
* ({@link RenderPassDescriptor#visible_meshlet_slots}) and only then: the meshlets are appended to it and drawn
|
|
50
|
+
* from there
|
|
51
|
+
* @returns {{executed:boolean, depth:number, color_targets:number[], visible_meshlets:number}} whether a pass was recorded, along with the depth, colour and table handles to carry forward. When no pass is recorded the input handles are returned unchanged.
|
|
42
52
|
*/
|
|
43
53
|
export function graph_rasterize_meshes_alpha_tested({
|
|
44
54
|
graph,
|
|
@@ -52,7 +62,8 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
52
62
|
raster_color_targets,
|
|
53
63
|
limits,
|
|
54
64
|
viewport = [0, 0, -1, -1],
|
|
55
|
-
render_pass_descriptor
|
|
65
|
+
render_pass_descriptor,
|
|
66
|
+
visible_meshlets = -1,
|
|
56
67
|
}) {
|
|
57
68
|
|
|
58
69
|
assert.isNonNegativeInteger(buckets, 'buckets');
|
|
@@ -63,6 +74,7 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
63
74
|
assert.isBoolean(clear_target, 'clear_target');
|
|
64
75
|
|
|
65
76
|
assert.equal(render_pass_descriptor.isTemplatePassDescriptor, true, 'render_pass_descriptor.isTemplatePassDescriptor !== true');
|
|
77
|
+
assert.equal(visible_meshlets !== -1, render_pass_descriptor.visible_meshlet_slots, 'a pipeline that writes visible-meshlet slots draws from the table, and only it does');
|
|
66
78
|
|
|
67
79
|
const scene_ctx = view_ctx.scene;
|
|
68
80
|
|
|
@@ -91,6 +103,7 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
91
103
|
executed: false,
|
|
92
104
|
depth,
|
|
93
105
|
color_targets: raster_color_targets,
|
|
106
|
+
visible_meshlets,
|
|
94
107
|
};
|
|
95
108
|
}
|
|
96
109
|
|
|
@@ -112,11 +125,47 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
112
125
|
|
|
113
126
|
|
|
114
127
|
const command_buffer_draw = resources.get(data.command_buffer_draw);
|
|
115
|
-
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* What the draws take their meshlets from
|
|
131
|
+
* @type {GPUBuffer}
|
|
132
|
+
*/
|
|
133
|
+
let meshlet_buffer = resources.get(data.meshlet_buffer);
|
|
116
134
|
|
|
117
135
|
// first prepare dispatch command for filtering
|
|
118
136
|
const encoder = context.encoder;
|
|
119
137
|
|
|
138
|
+
if (data.visible_meshlets !== undefined) {
|
|
139
|
+
// the sorted meshlets go into the table, and every material's command onto their copy there
|
|
140
|
+
const table = resources.get(data.visible_meshlets);
|
|
141
|
+
const append_draw = resources.get(data.append_draw);
|
|
142
|
+
const copy_command = resources.get(data.copy_command);
|
|
143
|
+
|
|
144
|
+
shader_visible_meshlets_reserve.dispatch({
|
|
145
|
+
encoder,
|
|
146
|
+
bindings: {
|
|
147
|
+
input: resources.get(data.meshlet_collection),
|
|
148
|
+
visible_meshlets: table,
|
|
149
|
+
draw: append_draw,
|
|
150
|
+
copy: copy_command
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
shader_visible_meshlets_copy_array.dispatchIndirect({
|
|
155
|
+
encoder,
|
|
156
|
+
command: copy_command,
|
|
157
|
+
bindings: { draw: append_draw, input: meshlet_buffer, visible_meshlets: table },
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
shader_visible_meshlets_offset_commands.dispatchThreads({
|
|
161
|
+
encoder,
|
|
162
|
+
thread_count_x: material_count,
|
|
163
|
+
bindings: { draw: append_draw, commands: command_buffer_draw },
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
meshlet_buffer = table;
|
|
167
|
+
}
|
|
168
|
+
|
|
120
169
|
const depth_texture = resources.get(data.depth);
|
|
121
170
|
|
|
122
171
|
/**
|
|
@@ -140,8 +189,8 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
140
189
|
const partial_clear_needed = !is_viewport_unrestricted && clear_target;
|
|
141
190
|
|
|
142
191
|
if (partial_clear_needed) {
|
|
143
|
-
for (let i = 0; i < color_targets.length; i++) {
|
|
144
|
-
texture_fill_rectangle(encoder, color_targets[i], viewport, render_pass_descriptor.colorAttachments[i].clearValue);
|
|
192
|
+
for (let i = 0; i < color_targets.length; i++) {
|
|
193
|
+
texture_fill_rectangle(encoder, color_targets[i], viewport, render_pass_descriptor.colorAttachments[i].clearValue);
|
|
145
194
|
}
|
|
146
195
|
texture_fill_rectangle(encoder, depth_texture, viewport, [render_pass_descriptor.depthStencilAttachment.depthClearValue]);
|
|
147
196
|
}
|
|
@@ -250,7 +299,7 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
250
299
|
|
|
251
300
|
const gr_camera = graph_import_buffer(graph, view_ctx.camera.buffer.buffer);
|
|
252
301
|
|
|
253
|
-
const { meshlets, draw_commands } = graph_prepare_meshlet_draw_commands_by_material({
|
|
302
|
+
const { meshlets, draw_commands, meshlet_collection } = graph_prepare_meshlet_draw_commands_by_material({
|
|
254
303
|
graph,
|
|
255
304
|
materials: relevant_materials,
|
|
256
305
|
bucket_id: alpha_tested_bucket_index,
|
|
@@ -269,11 +318,25 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
269
318
|
const pass_data = {};
|
|
270
319
|
const pass = graph.add("rasterize alpha tested meshes", pass_data, execute);
|
|
271
320
|
|
|
272
|
-
// reserve buffer for indirect draw commands
|
|
273
|
-
pass_data.command_buffer_draw = pass.read(draw_commands);
|
|
274
|
-
|
|
275
321
|
pass_data.meshlet_buffer = pass.read(meshlets);
|
|
276
322
|
|
|
323
|
+
if (visible_meshlets === -1) {
|
|
324
|
+
pass_data.command_buffer_draw = pass.read(draw_commands);
|
|
325
|
+
} else {
|
|
326
|
+
// the commands are moved onto the table's slots in place
|
|
327
|
+
pass_data.command_buffer_draw = pass.write(draw_commands);
|
|
328
|
+
pass_data.meshlet_collection = pass.read(meshlet_collection);
|
|
329
|
+
pass_data.visible_meshlets = pass.write(visible_meshlets);
|
|
330
|
+
pass_data.append_draw = pass.create("visible meshlets append", BufferResourceDescriptor.from(
|
|
331
|
+
STRUCT_UNINDEXED_DRAW_COMMAND.size,
|
|
332
|
+
GPUBufferUsage.STORAGE
|
|
333
|
+
));
|
|
334
|
+
pass_data.copy_command = pass.create("visible meshlets copy command", BufferResourceDescriptor.from(
|
|
335
|
+
STRUCT_DISPATCH_COMPUTE_COMMAND.size,
|
|
336
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT
|
|
337
|
+
));
|
|
338
|
+
}
|
|
339
|
+
|
|
277
340
|
// TODO move texture resource import outside
|
|
278
341
|
let viz_depth = depth;
|
|
279
342
|
|
|
@@ -286,5 +349,6 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
286
349
|
executed: true,
|
|
287
350
|
depth: pass_data.depth,
|
|
288
351
|
color_targets: pass_data.out_color_targets,
|
|
352
|
+
visible_meshlets: pass_data.visible_meshlets ?? -1,
|
|
289
353
|
};
|
|
290
354
|
}
|
|
@@ -4,14 +4,14 @@ import { ShaderDescriptor } from "../../../shader/ShaderDescriptor.js";
|
|
|
4
4
|
import { MESH_TRIANGLE_REFERENCE_STRUCT } from "../../../geometry/meshlet/MESH_TRIANGLE_REFERENCE_STRUCT.js";
|
|
5
5
|
import { chunk_rasterize_triangle } from "../chunk_rasterize_triangle.js";
|
|
6
6
|
import { rasterization_shader_resources } from "../rasterization_shader_resources.js";
|
|
7
|
+
import { VISIBILITY_TRIANGLE_BITS } from "../../visibility/VISIBILITY_BUFFER.js";
|
|
7
8
|
|
|
8
9
|
const body = CodeChunk.from(
|
|
9
10
|
//language=WGSL
|
|
10
11
|
`
|
|
11
12
|
struct VertexOutput{
|
|
12
13
|
@builtin(position) position: vec4f,
|
|
13
|
-
@location(0) @interpolate(flat)
|
|
14
|
-
@location(1) @interpolate(flat) m_triangle:u32,
|
|
14
|
+
@location(0) @interpolate(flat) m_visibility: u32,
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
@vertex
|
|
@@ -35,8 +35,8 @@ fn main(
|
|
|
35
35
|
|
|
36
36
|
output.position = projected_vertex;
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
output.
|
|
38
|
+
// the draw takes its meshlets from the frame's visible-meshlet table, so the instance is the slot
|
|
39
|
+
output.m_visibility = (meshlet_index << ${VISIBILITY_TRIANGLE_BITS}u) | (triangle_def.index & ${2 ** VISIBILITY_TRIANGLE_BITS - 1}u);
|
|
40
40
|
|
|
41
41
|
return output;
|
|
42
42
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viz_rasterization_alpha_tested_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viz_rasterization_alpha_tested_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js"],"names":[],"mappings":"AAiLA;;;;GAIG;AACH,6DAFU,sBAAsB,CAiC7B;uCAlLoC,iCAAiC"}
|