summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-10-21 23:19:44 -0700
committerJason Ekstrand <[email protected]>2016-11-16 10:32:20 -0800
commite50bf059b01499a54d2ff7bd4624e39e0fee9098 (patch)
treee3b35a8901a647c80a85dc2f88b5b14a741626e5
parent633677194f1d33f0dfbdfdfb7ac5b4f1b4dffdcb (diff)
anv/blorp: Handle VK_ATTACHMENT_UNUSED in CmdClearAttachments
From the Vulkan 1.0.29 spec for vkCmdClearAttachments: "If the subpass’s depth/stencil attachment is VK_ATTACHMENT_UNUSED, then the clear has no effect." and "If colorAttachment is VK_ATTACHMENT_UNUSED then the clear has no effect." I have no idea why it's spec'd this way; it seems very anti-Vulkan to me, but that's what it says and it's really not much work to support. Signed-off-by: Jason Ekstrand <[email protected]> Reviewed-by: Nanley Chery <[email protected]>
-rw-r--r--src/intel/vulkan/anv_blorp.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index ae746ed9b2d..2429a964f3e 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -932,6 +932,10 @@ clear_color_attachment(struct anv_cmd_buffer *cmd_buffer,
const struct anv_subpass *subpass = cmd_buffer->state.subpass;
const uint32_t color_att = attachment->colorAttachment;
const uint32_t att_idx = subpass->color_attachments[color_att];
+
+ if (att_idx == VK_ATTACHMENT_UNUSED)
+ return;
+
struct anv_render_pass_attachment *pass_att =
&cmd_buffer->state.pass->attachments[att_idx];
struct anv_attachment_state *att_state =
@@ -966,6 +970,10 @@ clear_depth_stencil_attachment(struct anv_cmd_buffer *cmd_buffer,
static const union isl_color_value color_value = { .u32 = { 0, } };
const struct anv_subpass *subpass = cmd_buffer->state.subpass;
const uint32_t att_idx = subpass->depth_stencil_attachment;
+
+ if (att_idx == VK_ATTACHMENT_UNUSED)
+ return;
+
struct anv_render_pass_attachment *pass_att =
&cmd_buffer->state.pass->attachments[att_idx];