Provide some margin to static buffers when growing

This commit is contained in:
Héctor Ramón Jiménez 2023-02-09 06:54:51 +01:00
parent 0715d7d0c7
commit 2097a56b58
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
2 changed files with 9 additions and 6 deletions

View file

@ -2,8 +2,7 @@ use bytemuck::{Pod, Zeroable};
use std::marker::PhantomData; use std::marker::PhantomData;
use std::mem; use std::mem;
//128 triangles/indices const DEFAULT_COUNT: wgpu::BufferAddress = 128;
const DEFAULT_STATIC_BUFFER_COUNT: wgpu::BufferAddress = 1_000;
/// A generic buffer struct useful for items which have no alignment requirements /// A generic buffer struct useful for items which have no alignment requirements
/// (e.g. Vertex, Index buffers) & no dynamic offsets. /// (e.g. Vertex, Index buffers) & no dynamic offsets.
@ -25,7 +24,7 @@ impl<T: Pod + Zeroable> Buffer<T> {
label: &'static str, label: &'static str,
usages: wgpu::BufferUsages, usages: wgpu::BufferUsages,
) -> Self { ) -> Self {
let size = (mem::size_of::<T>() as u64) * DEFAULT_STATIC_BUFFER_COUNT; let size = (mem::size_of::<T>() as u64) * DEFAULT_COUNT;
Self { Self {
offsets: Vec::new(), offsets: Vec::new(),
@ -57,9 +56,13 @@ impl<T: Pod + Zeroable> Buffer<T> {
let size = (mem::size_of::<T>() * new_count) as u64; let size = (mem::size_of::<T>() * new_count) as u64;
if self.size < size { if self.size < size {
self.size =
(mem::size_of::<T>() * (new_count + new_count / 2)) as u64;
self.gpu =
Self::gpu_buffer(device, self.label, self.size, self.usages);
self.offsets.clear(); self.offsets.clear();
self.size = size;
self.gpu = Self::gpu_buffer(device, self.label, size, self.usages);
true true
} else { } else {
false false

View file

@ -43,7 +43,7 @@ impl Layer {
Self { Self {
index_buffer: Buffer::new( index_buffer: Buffer::new(
device, device,
"iced_wgpu::triangle vertex buffer", "iced_wgpu::triangle index buffer",
wgpu::BufferUsages::INDEX | wgpu::BufferUsages::COPY_DST, wgpu::BufferUsages::INDEX | wgpu::BufferUsages::COPY_DST,
), ),
index_strides: Vec::new(), index_strides: Vec::new(),