struct ComputeUniforms {
uvec2 screen_resolution;
uvec2 atlas_resolution;
+ uvec2 tile_resolution;
uint num_primitives;
uint num_primitives_32;
layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main() {
- uniforms.tiles.values[gl_GlobalInvocationID.x * TILE_STRIDE + TILE_BITMAP_RANGE_OFFSET + 0] = 0xffffffff;
- uniforms.tiles.values[gl_GlobalInvocationID.x * TILE_STRIDE + TILE_BITMAP_RANGE_OFFSET + 1] = 0;
+ if (gl_GlobalInvocationID.x >= uniforms.tile_resolution.x * uniforms.tile_resolution.y) {
+ return;
+ }
+
+ const uint index = gl_GlobalInvocationID.x * TILE_STRIDE + TILE_BITMAP_RANGE_OFFSET;
+
+ uniforms.tiles.values[index + 0] = 0xffffffff;
+ uniforms.tiles.values[index + 1] = 0;
}
num_primitives,
num_primitives_32,
num_primitives_1024,
+ tile_resolution_x: self.tile_resolution_x,
+ tile_resolution_y: self.tile_resolution_y,
tile_stride: self.tile_resolution_x,
glyphs_buffer: gpu.get_buffer_address(glyph_buffer.to_arg()),
glyph_instances_buffer: gpu
pub struct PrimitiveUniforms {
pub screen_resolution_x: u32,
pub screen_resolution_y: u32,
+
pub atlas_resolution_x: u32,
pub atlas_resolution_y: u32,
+ pub tile_resolution_x: u32,
+ pub tile_resolution_y: u32,
+
pub num_primitives: u32,
pub num_primitives_32: u32,
pub num_primitives_1024: u32,
-
pub tile_stride: u32,
pub glyphs_buffer: u64,