summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNanley Chery <nanley.g.chery@intel.com>2017-02-27 12:31:36 -0800
committerNanley Chery <nanley.g.chery@intel.com>2017-03-02 13:17:55 -0800
commit9950774f8b451af9220916a0a859169d3b43f471 (patch)
tree9e3ee261b35015a883d9cc8df7d58adea27c4dff /src
parentc78a959bcfab1ad20c3d5063886fb943c00db49e (diff)
anv/blorp: Encapsulate subpass id querying
Signed-off-by: Nanley Chery <nanley.g.chery@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Diffstat (limited to 'src')
-rw-r--r--src/intel/vulkan/anv_blorp.c8
-rw-r--r--src/intel/vulkan/anv_private.h15
2 files changed, 17 insertions, 6 deletions
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 7472efce6a..d79c5e0e8c 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 455bf3505c..c73196ab5e 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 * \