anv/pass: Move some dependency setup into a helper
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 24 Apr 2018 19:57:39 +0000 (12:57 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 9 Jul 2018 17:11:53 +0000 (10:11 -0700)
This new helper takes a VkSubpassDependency2KHR for future-proofing.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_pass.c

index fe9b3d69819a708befb911a2d268765b8312714c..b70de87a82b1a1ece6c44d516b919c0860aefa17 100644 (file)
 
 #include "vk_util.h"
 
+static void
+anv_render_pass_add_subpass_dep(struct anv_render_pass *pass,
+                                const VkSubpassDependency2KHR *dep)
+{
+   if (dep->dstSubpass == VK_SUBPASS_EXTERNAL) {
+      pass->subpass_flushes[pass->subpass_count] |=
+         anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
+   } else {
+      assert(dep->dstSubpass < pass->subpass_count);
+      pass->subpass_flushes[dep->dstSubpass] |=
+         anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
+   }
+
+   if (dep->srcSubpass == VK_SUBPASS_EXTERNAL) {
+      pass->subpass_flushes[0] |=
+         anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
+   } else {
+      assert(dep->srcSubpass < pass->subpass_count);
+      pass->subpass_flushes[dep->srcSubpass + 1] |=
+         anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
+   }
+}
+
 /* Do a second "compile" step on a render pass */
 static void
 anv_render_pass_compile(struct anv_render_pass *pass)
@@ -223,24 +246,17 @@ VkResult anv_CreateRenderPass(
    }
 
    for (uint32_t i = 0; i < pCreateInfo->dependencyCount; i++) {
-      const VkSubpassDependency *dep = &pCreateInfo->pDependencies[i];
-      if (dep->dstSubpass == VK_SUBPASS_EXTERNAL) {
-         pass->subpass_flushes[pass->subpass_count] |=
-            anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
-      } else {
-         assert(dep->dstSubpass < pass->subpass_count);
-         pass->subpass_flushes[dep->dstSubpass] |=
-            anv_pipe_invalidate_bits_for_access_flags(dep->dstAccessMask);
-      }
-
-      if (dep->srcSubpass == VK_SUBPASS_EXTERNAL) {
-         pass->subpass_flushes[0] |=
-            anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
-      } else {
-         assert(dep->srcSubpass < pass->subpass_count);
-         pass->subpass_flushes[dep->srcSubpass + 1] |=
-            anv_pipe_flush_bits_for_access_flags(dep->srcAccessMask);
-      }
+      /* Convert to a Dependency2KHR */
+      struct VkSubpassDependency2KHR dep2 = {
+         .srcSubpass       = pCreateInfo->pDependencies[i].srcSubpass,
+         .dstSubpass       = pCreateInfo->pDependencies[i].dstSubpass,
+         .srcStageMask     = pCreateInfo->pDependencies[i].srcStageMask,
+         .dstStageMask     = pCreateInfo->pDependencies[i].dstStageMask,
+         .srcAccessMask    = pCreateInfo->pDependencies[i].srcAccessMask,
+         .dstAccessMask    = pCreateInfo->pDependencies[i].dstAccessMask,
+         .dependencyFlags  = pCreateInfo->pDependencies[i].dependencyFlags,
+      };
+      anv_render_pass_add_subpass_dep(pass, &dep2);
    }
 
    /* From the Vulkan 1.0.39 spec: