Mesa (master): anv/blorp: Encapsulate subpass id querying

Nanley Chery nchery at kemper.freedesktop.org
Thu Mar 2 21:18:27 UTC 2017


Module: Mesa
Branch: master
Commit: 9950774f8b451af9220916a0a859169d3b43f471
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9950774f8b451af9220916a0a859169d3b43f471

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Mon Feb 27 12:31:36 2017 -0800

anv/blorp: Encapsulate subpass id querying

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/intel/vulkan/anv_blorp.c   |  8 ++------
 src/intel/vulkan/anv_private.h | 15 +++++++++++++++
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 7472efc..d79c5e0 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1069,9 +1069,7 @@ attachment_needs_flush(struct anv_cmd_buffer *cmd_buffer,
                        enum subpass_stage stage)
 {
    struct anv_render_pass *pass = cmd_buffer->state.pass;
-   struct anv_subpass *subpass = cmd_buffer->state.subpass;
-   unsigned subpass_idx = subpass - pass->subpasses;
-   assert(subpass_idx < pass->subpass_count);
+   const uint32_t subpass_idx = anv_get_subpass_id(&cmd_buffer->state);
 
    /* We handle this subpass specially based on the current stage */
    enum anv_subpass_usage usage = att->subpass_usage[subpass_idx];
@@ -1407,9 +1405,7 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,
           att_state->aux_usage == ISL_AUX_USAGE_CCS_D);
 
    struct anv_render_pass *pass = cmd_buffer->state.pass;
-   struct anv_subpass *subpass = cmd_buffer->state.subpass;
-   unsigned subpass_idx = subpass - pass->subpasses;
-   assert(subpass_idx < pass->subpass_count);
+   const uint32_t subpass_idx = anv_get_subpass_id(&cmd_buffer->state);
 
    /* Scan forward to see what all ways this attachment will be used.
     * Ideally, we would like to resolve in the same subpass as the last write
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 455bf35..c73196a 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2009,6 +2009,21 @@ void anv_dump_finish(void);
 void anv_dump_add_framebuffer(struct anv_cmd_buffer *cmd_buffer,
                               struct anv_framebuffer *fb);
 
+static inline uint32_t
+anv_get_subpass_id(const struct anv_cmd_state * const cmd_state)
+{
+   /* This function must be called from within a subpass. */
+   assert(cmd_state->pass && cmd_state->subpass);
+
+   const uint32_t subpass_id = cmd_state->subpass - cmd_state->pass->subpasses;
+
+   /* The id of this subpass shouldn't exceed the number of subpasses in this
+    * render pass minus 1.
+    */
+   assert(subpass_id < cmd_state->pass->subpass_count);
+   return subpass_id;
+}
+
 #define ANV_DEFINE_HANDLE_CASTS(__anv_type, __VkType)                      \
                                                                            \
    static inline struct __anv_type *                                       \




More information about the mesa-commit mailing list