]> git.nega.tv - josh/narcissus/commitdiff
narcissus-gpu: Add compute-only resource barrier
authorJosh Simmons <josh@nega.tv>
Sun, 2 Jun 2024 12:14:55 +0000 (14:14 +0200)
committerJosh Simmons <josh@nega.tv>
Sun, 2 Jun 2024 12:14:55 +0000 (14:14 +0200)
engine/narcissus-gpu/src/backend/vulkan/barrier.rs
engine/narcissus-gpu/src/lib.rs

index 4c80bb599af924fcdc694174ecaf6c3d64fcf177..9e32275b704b3d321ae016a20bcac4eb9994a26c 100644 (file)
@@ -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,
index 26447b1f5de7d107382e877fc740f1312cad078c..02122568ea7906277352718d162a28cddcaaa82d 100644 (file)
@@ -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,