]> git.nega.tv - josh/narcissus/commitdiff
narcissus-gpu: Add support for indirect buffers
authorJosh Simmons <josh@nega.tv>
Mon, 4 Nov 2024 07:31:58 +0000 (08:31 +0100)
committerJosh Simmons <josh@nega.tv>
Mon, 4 Nov 2024 21:13:27 +0000 (22:13 +0100)
Additionally, always enable shader device address flags on buffers.

engine/narcissus-gpu/src/backend/vulkan/convert.rs
engine/narcissus-gpu/src/backend/vulkan/mod.rs
engine/narcissus-gpu/src/lib.rs

index 3813cbe39aaf9adb3fca325ce598b0fb165a690c..c4d323fc7e4344c6ad60823ccbb3c263a63cec68 100644 (file)
@@ -95,6 +95,10 @@ pub fn vulkan_buffer_usage_flags(usage: BufferUsageFlags) -> vk::BufferUsageFlag
     if usage.contains(BufferUsageFlags::TRANSFER) {
         usage_flags |= vk::BufferUsageFlags::TRANSFER_SRC | vk::BufferUsageFlags::TRANSFER_DST;
     }
+    if usage.contains(BufferUsageFlags::INDIRECT) {
+        usage_flags |= vk::BufferUsageFlags::INDIRECT_BUFFER;
+    }
+    usage_flags |= vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS;
     usage_flags
 }
 
index c386b95ccfe55d4f759836ab6bf12260fe04c840..7c07dc98ec7d3efbc8420a5f5847a3dae4af1a01 100644 (file)
@@ -944,8 +944,7 @@ impl Device for VulkanDevice {
 
         let create_info = vk::BufferCreateInfo {
             size: desc.size as u64,
-            usage: vulkan_buffer_usage_flags(desc.usage)
-                | vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS,
+            usage: vulkan_buffer_usage_flags(desc.usage),
             queue_family_indices: queue_family_indices.into(),
             sharing_mode: vk::SharingMode::Exclusive,
             ..default()
@@ -2856,12 +2855,13 @@ impl VulkanDevice {
         // need a single collection of temporary buffers.
         let create_info = vk::BufferCreateInfo {
             size: VULKAN_CONSTANTS.transient_buffer_size,
-            usage: vk::BufferUsageFlags::TRANSFER_DST
-                | vk::BufferUsageFlags::TRANSFER_SRC
-                | vk::BufferUsageFlags::INDEX_BUFFER
+            usage: vk::BufferUsageFlags::INDEX_BUFFER
+                | vk::BufferUsageFlags::INDIRECT_BUFFER
+                | vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS
                 | vk::BufferUsageFlags::STORAGE_BUFFER
-                | vk::BufferUsageFlags::UNIFORM_BUFFER
-                | vk::BufferUsageFlags::SHADER_DEVICE_ADDRESS,
+                | vk::BufferUsageFlags::TRANSFER_DST
+                | vk::BufferUsageFlags::TRANSFER_SRC
+                | vk::BufferUsageFlags::UNIFORM_BUFFER,
             queue_family_indices: queue_family_indices.into(),
             sharing_mode: vk::SharingMode::Exclusive,
             ..default()
index ac7d3bcf2833e319fdbbc5cfcc7a6d41228ba7c3..cb8a85d07f631db2e74d078e0095f2f0e34c0899 100644 (file)
@@ -215,6 +215,7 @@ impl BufferUsageFlags {
     pub const STORAGE: Self = Self(1 << 1);
     pub const INDEX: Self = Self(1 << 2);
     pub const TRANSFER: Self = Self(1 << 3);
+    pub const INDIRECT: Self = Self(1 << 4);
 }
 
 pub struct BufferDesc {