From: Josh Simmons Date: Sun, 2 Jun 2024 12:14:55 +0000 (+0200) Subject: narcissus-gpu: Add compute-only resource barrier X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=0ee11cac8dfe781d748da275cb6dedb437da2fd2;p=josh%2Fnarcissus narcissus-gpu: Add compute-only resource barrier --- diff --git a/engine/narcissus-gpu/src/backend/vulkan/barrier.rs b/engine/narcissus-gpu/src/backend/vulkan/barrier.rs index 4c80bb5..9e32275 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/barrier.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/barrier.rs @@ -80,6 +80,12 @@ pub fn vulkan_access_info(access: Access) -> VulkanAccessInfo { layout: vk::ImageLayout::AttachmentOptimal, }, + Access::ComputeOtherRead => VulkanAccessInfo { + stages: vk::PipelineStageFlags2::COMPUTE_SHADER, + access: vk::AccessFlags2::SHADER_READ, + layout: vk::ImageLayout::General, + }, + Access::ShaderUniformBufferRead => VulkanAccessInfo { stages: vk::PipelineStageFlags2::ALL_COMMANDS, access: vk::AccessFlags2::UNIFORM_READ, @@ -139,6 +145,13 @@ pub fn vulkan_access_info(access: Access) -> VulkanAccessInfo { access: vk::AccessFlags2::DEPTH_STENCIL_ATTACHMENT_WRITE, layout: vk::ImageLayout::DepthAttachmentOptimal, }, + + Access::ComputeWrite => VulkanAccessInfo { + stages: vk::PipelineStageFlags2::COMPUTE_SHADER, + access: vk::AccessFlags2::SHADER_WRITE, + layout: vk::ImageLayout::General, + }, + Access::ShaderWrite => VulkanAccessInfo { stages: vk::PipelineStageFlags2::ALL_COMMANDS, access: vk::AccessFlags2::SHADER_WRITE, diff --git a/engine/narcissus-gpu/src/lib.rs b/engine/narcissus-gpu/src/lib.rs index 26447b1..0212256 100644 --- a/engine/narcissus-gpu/src/lib.rs +++ b/engine/narcissus-gpu/src/lib.rs @@ -561,6 +561,9 @@ pub enum Access { /// Read as a depth-stencil attachment. DepthStencilAttachmentRead, + /// Read as any other resource in a compute shader. + ComputeOtherRead, + /// Read as a uniform buffer in any shader. ShaderUniformBufferRead, /// Read as a uniform buffer or vertex buffer in any shader. @@ -588,6 +591,9 @@ pub enum Access { /// Written as a depth-stencil attachment during rendering. DepthStencilAttachmentWrite, + /// Written as a resource in a compute shader. + ComputeWrite, + /// Written as any resource in any shader. ShaderWrite, @@ -621,6 +627,7 @@ impl Access { Access::FragmentShaderOtherRead => true, Access::ColorAttachmentRead => true, Access::DepthStencilAttachmentRead => true, + Access::ComputeOtherRead => true, Access::ShaderUniformBufferRead => true, Access::ShaderUniformBufferOrVertexBufferRead => true, Access::ShaderSampledImageRead => true, @@ -632,6 +639,7 @@ impl Access { Access::FragmentShaderWrite => false, Access::ColorAttachmentWrite => false, Access::DepthStencilAttachmentWrite => false, + Access::ComputeWrite => true, Access::ShaderWrite => false, Access::TransferWrite => false, Access::HostPreInitializedWrite => false,