diff --git a/src/gpu.rs b/src/gpu.rs index dde3ec1..460d53d 100644 --- a/src/gpu.rs +++ b/src/gpu.rs @@ -18,6 +18,7 @@ impl GpuVec { usage: wgpu::BufferUsages, initial_capacity: usize, label: Option, + uses_dynamic_offsets: bool, ) -> Self { let capacity_bytes = initial_capacity * std::mem::size_of::(); let usage = usage | wgpu::BufferUsages::COPY_DST; @@ -30,10 +31,14 @@ impl GpuVec { let data = Vec::with_capacity(initial_capacity); - let realign = if usage.contains(wgpu::BufferUsages::STORAGE) { - Some(device.limits().min_storage_buffer_offset_alignment as usize) - } else if usage.contains(wgpu::BufferUsages::UNIFORM) { - Some(device.limits().min_uniform_buffer_offset_alignment as usize) + let realign = if uses_dynamic_offsets { + if usage.contains(wgpu::BufferUsages::STORAGE) { + Some(device.limits().min_storage_buffer_offset_alignment as usize) + } else if usage.contains(wgpu::BufferUsages::UNIFORM) { + Some(device.limits().min_uniform_buffer_offset_alignment as usize) + } else { + None + } } else { None }; diff --git a/src/pass/mesh.rs b/src/pass/mesh.rs index 0e52bb6..ddb0618 100644 --- a/src/pass/mesh.rs +++ b/src/pass/mesh.rs @@ -153,7 +153,7 @@ impl MeshPass { let example_mesh = mesh_pool.load(example_mesh).unwrap(); let mut instances = Vec::new(); - let r = 10; + let r = 4; for x in -r..r { for y in -r..r { for z in -r..r { @@ -318,12 +318,14 @@ impl RenderPass for MeshPass { Vertex::get_usages(), 1024 * 128, Some("Skinned Vertices".to_string()), + false, ), skinning_uniforms: GpuVec::new( self.device.clone(), wgpu::BufferUsages::STORAGE, 1024 * 128, Some("Skinning Uniforms".to_string()), + true, ), groups: Default::default(), } @@ -427,8 +429,6 @@ impl RenderPass for MeshPass { data.groups.push(group); } - println!("commands: {:#?}", data.groups); - data.skinned_vertices.reserve(skinned_cursor); data.skinned_vertices.write(&queue); data.skinning_uniforms.write(&queue);