]> git.nega.tv - josh/narcissus/commitdiff
narcissus-gpu: Add `_with_data` helper for transient buffers
authorJoshua Simmons <josh@nega.tv>
Mon, 17 Jul 2023 15:34:59 +0000 (17:34 +0200)
committerJoshua Simmons <josh@nega.tv>
Mon, 17 Jul 2023 15:34:59 +0000 (17:34 +0200)
bins/narcissus/src/main.rs
libs/narcissus-gpu/src/lib.rs

index f4cd9fd4b8684e6401e0aa1cf927daf5e204c8cc..9b8bbff7fb1605892c0845d90a23167fa4c28e29 100644 (file)
@@ -148,15 +148,13 @@ pub fn main() {
     {
         let frame = device.begin_frame();
 
-        let mut blåhaj_buffer = device.request_transient_buffer(
+        let blåhaj_buffer = device.request_transient_buffer_with_data(
             &frame,
             &thread_token,
             BufferUsageFlags::TRANSFER,
-            blåhaj_image_data.as_slice().len(),
+            blåhaj_image_data.as_slice(),
         );
 
-        blåhaj_buffer.copy_from_slice(blåhaj_image_data.as_slice());
-
         let mut cmd_buffer = device.create_cmd_buffer(&frame, &thread_token);
         device.cmd_barrier(
             &mut cmd_buffer,
@@ -453,15 +451,13 @@ pub fn main() {
             let height = atlas_height;
             let image = glyph_atlas;
 
-            let mut buffer = device.request_transient_buffer(
+            let buffer = device.request_transient_buffer_with_data(
                 &frame,
                 &thread_token,
                 BufferUsageFlags::TRANSFER,
-                texture.len(),
+                texture,
             );
 
-            buffer.copy_from_slice(texture);
-
             device.cmd_barrier(
                 &mut cmd_buffer,
                 None,
index 7cafd680a9ef53a616dda5efe2137cdf56fa3686..1486bdc61b0324481f1b51b06ef74083eae3770d 100644 (file)
@@ -751,6 +751,20 @@ pub trait Device {
         size: usize,
     ) -> TransientBuffer<'a>;
 
+    #[must_use]
+    fn request_transient_buffer_with_data<'a>(
+        &self,
+        frame: &'a Frame<'a>,
+        thread_token: &'a ThreadToken,
+        usage: BufferUsageFlags,
+        data: &[u8],
+    ) -> TransientBuffer<'a> {
+        let mut transient_buffer =
+            self.request_transient_buffer(frame, thread_token, usage, data.len());
+        transient_buffer.copy_from_slice(data);
+        transient_buffer
+    }
+
     #[must_use]
     fn create_cmd_buffer<'a, 'thread>(
         &'a self,