Use shading table allocator in brickmap

This commit is contained in:
Jarrod Doyle 2023-05-05 14:49:07 +01:00
parent e86af05a1f
commit f3f10d5513
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
1 changed files with 9 additions and 1 deletions

View File

@ -28,6 +28,7 @@ pub struct BrickmapManager {
brickmap_buffer: wgpu::Buffer, brickmap_buffer: wgpu::Buffer,
shading_table: Vec<u32>, shading_table: Vec<u32>,
shading_table_buffer: wgpu::Buffer, shading_table_buffer: wgpu::Buffer,
shading_table_allocator: ShadingTableAllocator,
feedback_buffer: wgpu::Buffer, feedback_buffer: wgpu::Buffer,
feedback_result_buffer: wgpu::Buffer, feedback_result_buffer: wgpu::Buffer,
} }
@ -77,6 +78,8 @@ impl BrickmapManager {
let mut shading_table = Vec::<u32>::with_capacity(100000000); let mut shading_table = Vec::<u32>::with_capacity(100000000);
shading_table.resize(shading_table.capacity(), 0); shading_table.resize(shading_table.capacity(), 0);
let shading_table_allocator = ShadingTableAllocator::new(4, u32::pow(2, 24));
let mut arr = [0u32; 1028]; let mut arr = [0u32; 1028];
arr[0] = 256; arr[0] = 256;
let feedback_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { let feedback_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
@ -103,6 +106,7 @@ impl BrickmapManager {
brickmap_buffer, brickmap_buffer,
shading_table, shading_table,
shading_table_buffer, shading_table_buffer,
shading_table_allocator,
feedback_buffer, feedback_buffer,
feedback_result_buffer, feedback_result_buffer,
} }
@ -255,7 +259,11 @@ impl BrickmapManager {
self.update_brickgrid_element(context, chunk_idx, brickgrid_element); self.update_brickgrid_element(context, chunk_idx, brickgrid_element);
// Update the shading table // Update the shading table
let shading_idx = self.brickmap_cache_idx * 512; let shading_idx = self
.shading_table_allocator
.try_alloc(albedo_data.len() as u32)
.unwrap() as usize;
// let shading_idx = self.brickmap_cache_idx * 512;
self.shading_table.splice( self.shading_table.splice(
shading_idx..(shading_idx + albedo_data.len()), shading_idx..(shading_idx + albedo_data.len()),
albedo_data.clone(), albedo_data.clone(),