Mesh: struct {
model: mat4x3f,
material_index: u32,
base_vertex_index: u32,
base_primitive_index: u32,
base_triangle_index: u32,
base_meshlet_index: u32,
meshlet_count: u32,
skinned_base_vertex_index: u32,
padding0: u32,
}
MeshData: struct {
meshes: Mesh[1024],
}
MaterialCount: struct {
material_count: atomicu32[1024],
}
mesh_data: descriptor<MeshData, 1, read>;
material_count_buffer: descriptor<MaterialCount, 1033, read_write>;
instance_index_render_target: descriptor<StorageImage<r32ui>, 1040, read>;
main: fn () -> void {
let coord: vec2u = thread_id();
guard_image_bounds(instance_index_render_target, coord);
let pixel_instance_index: u32 = image_load_u32(instance_index_render_target, coord);
if (pixel_instance_index < 4294967295 && pixel_instance_index < 1024) {
let material_index: u32 = mesh_data.meshes[pixel_instance_index].material_index;
if (material_index < 1024) {
atomic_add(material_count_buffer.material_count[material_index], 1);
}
}
}