From: Josh Simmons Date: Mon, 4 Nov 2024 07:31:58 +0000 (+0100) Subject: narcissus-gpu: Add support for indirect buffers X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=684b46688162913e3666115a64a92d02693900e8;p=josh%2Fnarcissus narcissus-gpu: Add support for indirect buffers Additionally, always enable shader device address flags on buffers. --- diff --git a/engine/narcissus-gpu/src/backend/vulkan/convert.rs b/engine/narcissus-gpu/src/backend/vulkan/convert.rs index 3813cbe..c4d323f 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/convert.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/convert.rs @@ -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 } diff --git a/engine/narcissus-gpu/src/backend/vulkan/mod.rs b/engine/narcissus-gpu/src/backend/vulkan/mod.rs index c386b95..7c07dc9 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/mod.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/mod.rs @@ -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() diff --git a/engine/narcissus-gpu/src/lib.rs b/engine/narcissus-gpu/src/lib.rs index ac7d3bc..cb8a85d 100644 --- a/engine/narcissus-gpu/src/lib.rs +++ b/engine/narcissus-gpu/src/lib.rs @@ -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 {