From: Joshua Simmons Date: Fri, 2 Dec 2022 21:24:27 +0000 (+0100) Subject: Add `create_buffer_with_data` helper X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=064e4ec3303a3269b8ceda29a6ec1274f4623bd6;p=josh%2Fnarcissus Add `create_buffer_with_data` helper --- diff --git a/narcissus-gpu/src/backend/vulkan/mod.rs b/narcissus-gpu/src/backend/vulkan/mod.rs index c7e553e..85cc1c6 100644 --- a/narcissus-gpu/src/backend/vulkan/mod.rs +++ b/narcissus-gpu/src/backend/vulkan/mod.rs @@ -1490,6 +1490,22 @@ impl Device for VulkanDevice { Buffer(handle) } + fn create_buffer_with_data(&self, desc: &BufferDesc, initial_data: &[u8]) -> Buffer { + let len = initial_data.len(); + + assert!(len <= desc.size, "initial data larger than buffer"); + assert!(desc.location == MemoryLocation::HostMapped); + let buffer = self.create_buffer(desc); + + unsafe { + let dst = std::slice::from_raw_parts_mut(self.map_buffer(buffer), len); + dst.copy_from_slice(initial_data); + self.unmap_buffer(buffer); + } + + buffer + } + fn create_image(&self, desc: &ImageDesc) -> Image { debug_assert_ne!(desc.layer_count, 0, "layers must be at least one"); debug_assert_ne!(desc.width, 0, "width must be at least one"); diff --git a/narcissus-gpu/src/lib.rs b/narcissus-gpu/src/lib.rs index bcd5df1..574af5e 100644 --- a/narcissus-gpu/src/lib.rs +++ b/narcissus-gpu/src/lib.rs @@ -634,6 +634,7 @@ impl std::error::Error for SwapchainOutOfDateError {} pub trait Device { fn create_buffer(&self, desc: &BufferDesc) -> Buffer; + fn create_buffer_with_data(&self, desc: &BufferDesc, inital_data: &[u8]) -> Buffer; fn create_image(&self, desc: &ImageDesc) -> Image; fn create_image_view(&self, desc: &ImageViewDesc) -> Image; fn create_sampler(&self, desc: &SamplerDesc) -> Sampler;