[Mesa-dev] [PATCH 12/22] anv: Store depth stencil layouts

Nanley Chery nanleychery at gmail.com
Thu Jan 12 01:54:58 UTC 2017


Store the current and requested depth stencil layouts so that we can
perform the appropriate HiZ resolves for a given transition while
recording a render pass.

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
---
 src/intel/vulkan/anv_pass.c        |  5 +++++
 src/intel/vulkan/anv_private.h     | 11 +++++++++++
 src/intel/vulkan/genX_cmd_buffer.c |  1 +
 3 files changed, 17 insertions(+)

diff --git a/src/intel/vulkan/anv_pass.c b/src/intel/vulkan/anv_pass.c
index c1c149b48b..ea86fa9ff2 100644
--- a/src/intel/vulkan/anv_pass.c
+++ b/src/intel/vulkan/anv_pass.c
@@ -74,6 +74,8 @@ VkResult anv_CreateRenderPass(
       att->load_op = pCreateInfo->pAttachments[i].loadOp;
       att->store_op = pCreateInfo->pAttachments[i].storeOp;
       att->stencil_load_op = pCreateInfo->pAttachments[i].stencilLoadOp;
+      att->initial_layout = pCreateInfo->pAttachments[i].initialLayout;
+      att->final_layout = pCreateInfo->pAttachments[i].finalLayout;
       att->subpass_usage = usages;
       usages += pass->subpass_count;
    }
@@ -161,6 +163,8 @@ VkResult anv_CreateRenderPass(
       if (desc->pDepthStencilAttachment) {
          uint32_t a = desc->pDepthStencilAttachment->attachment;
          subpass->depth_stencil_attachment = a;
+         subpass->depth_stencil_layout =
+            desc->pDepthStencilAttachment->layout;
          if (a != VK_ATTACHMENT_UNUSED) {
             pass->attachments[a].usage |=
                VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT;
@@ -168,6 +172,7 @@ VkResult anv_CreateRenderPass(
          }
       } else {
          subpass->depth_stencil_attachment = VK_ATTACHMENT_UNUSED;
+         subpass->depth_stencil_layout = VK_IMAGE_LAYOUT_UNDEFINED;
       }
    }
 
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 84cc15a0b5..f4034866a7 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1097,6 +1097,7 @@ struct anv_attachment_state {
    struct anv_state                             color_rt_state;
    struct anv_state                             input_att_state;
 
+   VkImageLayout                                current_layout;
    VkImageAspectFlags                           pending_clear_aspects;
    bool                                         fast_clear;
    VkClearValue                                 clear_value;
@@ -1727,7 +1728,12 @@ struct anv_subpass {
    uint32_t                                     color_count;
    uint32_t *                                   color_attachments;
    uint32_t *                                   resolve_attachments;
+
+   /* TODO: Consider storing the depth/stencil VkAttachmentReference
+    * instead of its two structure members (below) individually.
+    */
    uint32_t                                     depth_stencil_attachment;
+   VkImageLayout                                depth_stencil_layout;
 
    /** Subpass has a depth/stencil self-dependency */
    bool                                         has_ds_self_dep;
@@ -1744,12 +1750,17 @@ enum anv_subpass_usage {
 };
 
 struct anv_render_pass_attachment {
+   /* TODO: Consider using VkAttachmentDescription instead of storing each of
+    * its members individually.
+    */
    VkFormat                                     format;
    uint32_t                                     samples;
    VkImageUsageFlags                            usage;
    VkAttachmentLoadOp                           load_op;
    VkAttachmentStoreOp                          store_op;
    VkAttachmentLoadOp                           stencil_load_op;
+   VkImageLayout                                initial_layout;
+   VkImageLayout                                final_layout;
 
    /* An array, indexed by subpass id, of how the attachment will be used. */
    enum anv_subpass_usage *                     subpass_usage;
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index fff9bd37c0..95d0cfc983 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -480,6 +480,7 @@ genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer,
             }
          }
 
+         state->attachments[i].current_layout = att->initial_layout;
          state->attachments[i].pending_clear_aspects = clear_aspects;
          if (clear_aspects)
             state->attachments[i].clear_value = begin->pClearValues[i];
-- 
2.11.0



More information about the mesa-dev mailing list