anv/pass: Store the per-subpass view mask
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 21 Mar 2017 23:04:08 +0000 (16:04 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 3 May 2017 18:25:46 +0000 (11:25 -0700)
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/intel/vulkan/anv_pass.c
src/intel/vulkan/anv_private.h

index dcd9aafc64508884fd7cd5c0c51b16ba34cbcf40..93f14830cc5ec8381709a7ae2156510291f06d94 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "anv_private.h"
 
+#include "util/vk_util.h"
+
 static unsigned
 num_subpass_attachments(const VkSubpassDescription *desc)
 {
@@ -102,6 +104,7 @@ VkResult anv_CreateRenderPass(
       subpass->color_count = desc->colorAttachmentCount;
       subpass->attachment_count = num_subpass_attachments(desc);
       subpass->attachments = subpass_attachments;
+      subpass->view_mask = 0;
 
       if (desc->inputAttachmentCount > 0) {
          subpass->input_attachments = subpass_attachments;
@@ -261,6 +264,22 @@ VkResult anv_CreateRenderPass(
          ANV_PIPE_DEPTH_CACHE_FLUSH_BIT;
    }
 
+   vk_foreach_struct(ext, pCreateInfo->pNext) {
+      switch (ext->sType) {
+      case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHX: {
+         VkRenderPassMultiviewCreateInfoKHX *mv = (void *)ext;
+
+         for (uint32_t i = 0; i < mv->subpassCount; i++) {
+            pass->subpasses[i].view_mask = mv->pViewMasks[i];
+         }
+         break;
+      }
+
+      default:
+         anv_debug_ignored_stype(ext->sType);
+      }
+   }
+
    *pRenderPass = anv_render_pass_to_handle(pass);
 
    return VK_SUCCESS;
index f06da00580983d3fb6a4cef5cd53c0f5f9befa05..b12d4a55cc8cd7a1ef2e5a737999f029c424dec3 100644 (file)
@@ -2169,6 +2169,8 @@ struct anv_subpass {
 
    VkAttachmentReference                        depth_stencil_attachment;
 
+   uint32_t                                     view_mask;
+
    /** Subpass has a depth/stencil self-dependency */
    bool                                         has_ds_self_dep;