Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_pbr/src/meshlet/fill_counts.wgsl
6600 views
/// Copies the counts of meshlets in the hardware and software buckets, resetting the counters in the process.

struct DispatchIndirectArgs {
    x: u32,
    y: u32,
    z: u32,
}

struct DrawIndirectArgs {
    vertex_count: u32,
    instance_count: u32,
    first_vertex: u32,
    first_instance: u32,
}

@group(0) @binding(0) var<storage, read_write> meshlet_software_raster_indirect_args: DispatchIndirectArgs;
@group(0) @binding(1) var<storage, read_write> meshlet_hardware_raster_indirect_args: DrawIndirectArgs;
@group(0) @binding(2) var<storage, read_write> meshlet_previous_raster_counts: array<u32>;
#ifdef MESHLET_2D_DISPATCH
@group(0) @binding(3) var<storage, read_write> meshlet_software_raster_cluster_count: u32;
#endif

@compute
@workgroup_size(1, 1, 1)
fn fill_counts() {
#ifdef MESHLET_2D_DISPATCH
    meshlet_previous_raster_counts[0] += meshlet_software_raster_cluster_count;
#else
    meshlet_previous_raster_counts[0] += meshlet_software_raster_indirect_args.x;
#endif
    meshlet_software_raster_indirect_args.x = 0;

    meshlet_previous_raster_counts[1] += meshlet_hardware_raster_indirect_args.instance_count;
    meshlet_hardware_raster_indirect_args.instance_count = 0;
}