Advanced search tips: use spaces to require multiple terms (AND), | for alternatives (OR), wrap phrases in quotes (="a b"), =term for exact match, 'term to include, !term to exclude, ^term to match prefix, !^term to exclude prefix, .ext$ to match suffix, and !.ext$ to exclude suffix.

meshlet_bindings.wgsl

Import path

Constants

CENTIMETERS_PER_METER

#
const CENTIMETERS_PER_METER: AbstractFloat = 100.0

Bindings

depth_pyramid

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(0)
var depth_pyramid: texture_2d<f32>

view

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(1)
var<uniform> view: View

previous_view

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(2)
var<uniform> previous_view: PreviousViewUniforms

meshlet_instance_uniforms

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(3)
var<storage, read> meshlet_instance_uniforms: array<Mesh>

meshlet_view_instance_visibility

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(4)
var<storage, read> meshlet_view_instance_visibility: array<u32>

meshlet_instance_aabbs

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(5)
var<storage, read> meshlet_instance_aabbs: array<MeshletAabb>

meshlet_instance_bvh_root_nodes

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(6)
var<storage, read> meshlet_instance_bvh_root_nodes: array<u32>

meshlet_bvh_cull_count_write

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(7)
var<storage, read_write> meshlet_bvh_cull_count_write: atomic<u32>

meshlet_bvh_cull_dispatch

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(8)
var<storage, read_write> meshlet_bvh_cull_dispatch: DispatchIndirectArgs

meshlet_bvh_cull_queue

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS

@group(0)
@binding(9)
var<storage, read_write> meshlet_bvh_cull_queue: array<InstancedOffset>

meshlet_second_pass_instance_count

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(10)
var<storage, read_write> meshlet_second_pass_instance_count: atomic<u32>

meshlet_second_pass_instance_dispatch

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(11)
var<storage, read_write> meshlet_second_pass_instance_dispatch: DispatchIndirectArgs

meshlet_second_pass_instance_candidates

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(12)
var<storage, read_write> meshlet_second_pass_instance_candidates: array<u32>

meshlet_second_pass_instance_count

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS, šŸ”“ MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(10)
var<storage, read> meshlet_second_pass_instance_count: u32

meshlet_second_pass_instance_candidates

#

Shader defs requirments:

🟢 MESHLET_INSTANCE_CULLING_PASS, šŸ”“ MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(11)
var<storage, read> meshlet_second_pass_instance_candidates: array<u32>

depth_pyramid

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(0)
var depth_pyramid: texture_2d<f32>

view

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(1)
var<uniform> view: View

previous_view

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(2)
var<uniform> previous_view: PreviousViewUniforms

meshlet_bvh_nodes

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(3)
var<storage, read> meshlet_bvh_nodes: array<BvhNode>

meshlet_instance_uniforms

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(4)
var<storage, read> meshlet_instance_uniforms: array<Mesh>

meshlet_bvh_cull_count_read

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(5)
var<storage, read> meshlet_bvh_cull_count_read: u32

meshlet_bvh_cull_count_write

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(6)
var<storage, read_write> meshlet_bvh_cull_count_write: atomic<u32>

meshlet_bvh_cull_dispatch

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(7)
var<storage, read_write> meshlet_bvh_cull_dispatch: DispatchIndirectArgs

meshlet_bvh_cull_queue

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(8)
var<storage, read_write> meshlet_bvh_cull_queue: array<InstancedOffset>

meshlet_meshlet_cull_count_early

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(9)
var<storage, read_write> meshlet_meshlet_cull_count_early: atomic<u32>

meshlet_meshlet_cull_count_late

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(10)
var<storage, read_write> meshlet_meshlet_cull_count_late: atomic<u32>

meshlet_meshlet_cull_dispatch_early

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(11)
var<storage, read_write> meshlet_meshlet_cull_dispatch_early: DispatchIndirectArgs

meshlet_meshlet_cull_dispatch_late

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(12)
var<storage, read_write> meshlet_meshlet_cull_dispatch_late: DispatchIndirectArgs

meshlet_meshlet_cull_queue

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS

@group(0)
@binding(13)
var<storage, read_write> meshlet_meshlet_cull_queue: array<InstancedOffset>

meshlet_second_pass_bvh_count

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(14)
var<storage, read_write> meshlet_second_pass_bvh_count: atomic<u32>

meshlet_second_pass_bvh_dispatch

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(15)
var<storage, read_write> meshlet_second_pass_bvh_dispatch: DispatchIndirectArgs

meshlet_second_pass_bvh_queue

#

Shader defs requirments:

🟢 MESHLET_BVH_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(16)
var<storage, read_write> meshlet_second_pass_bvh_queue: array<InstancedOffset>

depth_pyramid

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(0)
var depth_pyramid: texture_2d<f32>

view

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(1)
var<uniform> view: View

previous_view

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(2)
var<uniform> previous_view: PreviousViewUniforms

meshlet_cull_data

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(3)
var<storage, read> meshlet_cull_data: array<MeshletCullData>

meshlet_instance_uniforms

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(4)
var<storage, read> meshlet_instance_uniforms: array<Mesh>

meshlet_software_raster_indirect_args

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(5)
var<storage, read_write> meshlet_software_raster_indirect_args: DispatchIndirectArgs

meshlet_hardware_raster_indirect_args

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(6)
var<storage, read_write> meshlet_hardware_raster_indirect_args: DrawIndirectArgs

meshlet_previous_raster_counts

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(7)
var<storage, read> meshlet_previous_raster_counts: array<u32>

meshlet_raster_clusters

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(8)
var<storage, read_write> meshlet_raster_clusters: array<InstancedOffset>

meshlet_meshlet_cull_count_read

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS

@group(0)
@binding(9)
var<storage, read> meshlet_meshlet_cull_count_read: u32

meshlet_meshlet_cull_count_write

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(10)
var<storage, read_write> meshlet_meshlet_cull_count_write: atomic<u32>

meshlet_meshlet_cull_dispatch

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(11)
var<storage, read_write> meshlet_meshlet_cull_dispatch: DispatchIndirectArgs

meshlet_meshlet_cull_queue

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS, 🟢 MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(12)
var<storage, read_write> meshlet_meshlet_cull_queue: array<InstancedOffset>

meshlet_meshlet_cull_queue

#

Shader defs requirments:

🟢 MESHLET_CLUSTER_CULLING_PASS, šŸ”“ MESHLET_FIRST_CULLING_PASS

@group(0)
@binding(10)
var<storage, read> meshlet_meshlet_cull_queue: array<InstancedOffset>

meshlet_raster_clusters

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(0)
var<storage, read> meshlet_raster_clusters: array<InstancedOffset>

meshlets

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(1)
var<storage, read> meshlets: array<Meshlet>

meshlet_indices

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(2)
var<storage, read> meshlet_indices: array<u32>

meshlet_vertex_positions

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(3)
var<storage, read> meshlet_vertex_positions: array<u32>

meshlet_instance_uniforms

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(4)
var<storage, read> meshlet_instance_uniforms: array<Mesh>

meshlet_previous_raster_counts

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(5)
var<storage, read> meshlet_previous_raster_counts: array<u32>

meshlet_software_raster_cluster_count

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(6)
var<storage, read> meshlet_software_raster_cluster_count: u32

meshlet_visibility_buffer

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS, 🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT

@group(0)
@binding(7)
var meshlet_visibility_buffer: texture_storage_2d<r64uint, atomic>

meshlet_visibility_buffer

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS, šŸ”“ MESHLET_VISIBILITY_BUFFER_RASTER_PASS_OUTPUT

@group(0)
@binding(7)
var meshlet_visibility_buffer: texture_storage_2d<r32uint, atomic>

view

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

@group(0)
@binding(8)
var<uniform> view: View

meshlet_visibility_buffer

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(0)
var meshlet_visibility_buffer: texture_storage_2d<r64uint, read>

meshlet_raster_clusters

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(1)
var<storage, read> meshlet_raster_clusters: array<InstancedOffset>

meshlets

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(2)
var<storage, read> meshlets: array<Meshlet>

meshlet_indices

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(3)
var<storage, read> meshlet_indices: array<u32>

meshlet_vertex_positions

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(4)
var<storage, read> meshlet_vertex_positions: array<u32>

meshlet_vertex_normals

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(5)
var<storage, read> meshlet_vertex_normals: array<u32>

meshlet_vertex_uvs

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(6)
var<storage, read> meshlet_vertex_uvs: array<vec2<f32>>

meshlet_instance_uniforms

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

@group(2)
@binding(7)
var<storage, read> meshlet_instance_uniforms: array<Mesh>

Structures

BvhNode

#
struct BvhNode { }

Meshlet

#
struct Meshlet {
start_vertex_position_bit: u32 ,
start_vertex_attribute_id: u32 ,
start_index_id: u32 ,
packed_a: u32 ,
packed_b: u32 ,
min_vertex_position_channel_x: f32 ,
min_vertex_position_channel_y: f32 ,
min_vertex_position_channel_z: f32 ,
}

MeshletCullData

#
struct MeshletCullData {
lod_group_sphere: vec4<f32> ,
}

MeshletAabb

#
struct MeshletAabb {
center: vec3<f32> ,
half_extent: vec3<f32> ,
}

MeshletAabbErrorOffset

#
struct MeshletAabbErrorOffset {
center_and_error: vec4<f32> ,
half_extent_and_child_offset: vec4<f32> ,
}

DispatchIndirectArgs

#
struct DispatchIndirectArgs {
x: atomic<u32> ,
y: u32 ,
z: u32 ,
}

DrawIndirectArgs

#
struct DrawIndirectArgs {
vertex_count: u32 ,
instance_count: atomic<u32> ,
first_vertex: u32 ,
first_instance: u32 ,
}

InstancedOffset

#

Either a BVH node or a meshlet, along with the instance it is associated with. Refers to BVH nodes in meshlet_bvh_cull_queue and meshlet_second_pass_bvh_queue, where offset is the index into meshlet_bvh_nodes. Refers to meshlets in meshlet_meshlet_cull_queue and meshlet_raster_clusters. In meshlet_meshlet_cull_queue, offset is the index into meshlet_cull_data. In meshlet_raster_clusters, offset is the index into meshlets.

struct InstancedOffset {
instance_id: u32 ,
offset: u32 ,
}

Constants

#
struct Constants {
scene_instance_count: u32 , 🟢 MESHLET_INSTANCE_CULLING_PASS
}

Constants

#
struct Constants {
read_from_front: u32 , 🟢 MESHLET_BVH_CULLING_PASS
rightmost_slot: u32 , 🟢 MESHLET_BVH_CULLING_PASS
}

Constants

#
struct Constants {
rightmost_slot: u32 , 🟢 MESHLET_CLUSTER_CULLING_PASS
}

Functions

get_meshlet_vertex_count

#
fn get_meshlet_vertex_count ( ) -> u32

get_meshlet_triangle_count

#
fn get_meshlet_triangle_count ( ) -> u32

get_aabb

#

get_aabb_error

#
fn get_aabb_error ( ) -> f32

get_aabb_child_offset

#
fn get_aabb_child_offset ( ) -> u32

get_meshlet_vertex_id

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

fn get_meshlet_vertex_id (
index_id: u32
) -> u32

get_meshlet_vertex_position

#

Shader defs requirments:

🟢 MESHLET_VISIBILITY_BUFFER_RASTER_PASS

fn get_meshlet_vertex_position (
vertex_id: u32
) -> vec3<f32>

get_meshlet_vertex_id

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

fn get_meshlet_vertex_id (
index_id: u32
) -> u32

get_meshlet_vertex_position

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

fn get_meshlet_vertex_position (
vertex_id: u32
) -> vec3<f32>

get_meshlet_vertex_normal

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

fn get_meshlet_vertex_normal (
vertex_id: u32
) -> vec3<f32>

get_meshlet_vertex_uv

#

Shader defs requirments:

🟢 MESHLET_MESH_MATERIAL_PASS

fn get_meshlet_vertex_uv (
vertex_id: u32
) -> vec2<f32>