panvk: Pass the render target index to panvk_meta_clear_attachment()

The attachment index and render target don't necessarily match. We need
to explicitly pass the render target index to
panvk_meta_clear_attachment() so it can select the correct shader and
emit a valid RSD.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13136>
This commit is contained in:
Boris Brezillon 2021-09-30 11:36:50 +02:00 committed by Marge Bot
parent 3ba34f6633
commit 555e6626c2
1 changed files with 8 additions and 9 deletions

View File

@ -287,7 +287,7 @@ panvk_meta_get_format_type(enum pipe_format format)
static void static void
panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf, panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf,
uint32_t attachment, unsigned attachment, unsigned rt,
VkImageAspectFlags mask, VkImageAspectFlags mask,
const VkClearValue *clear_value, const VkClearValue *clear_value,
const VkClearRect *clear_rect) const VkClearRect *clear_rect)
@ -324,15 +324,14 @@ panvk_meta_clear_attachment(struct panvk_cmd_buffer *cmdbuf,
rect, sizeof(rect), 64); rect, sizeof(rect), 64);
enum glsl_base_type base_type = panvk_meta_get_format_type(att->format); enum glsl_base_type base_type = panvk_meta_get_format_type(att->format);
mali_ptr shader = meta->clear_attachment[attachment][base_type].shader; mali_ptr shader = meta->clear_attachment[rt][base_type].shader;
struct pan_shader_info *shader_info = struct pan_shader_info *shader_info =
&meta->clear_attachment[attachment][base_type].shader_info; &meta->clear_attachment[rt][base_type].shader_info;
mali_ptr rsd = mali_ptr rsd =
panvk_meta_clear_attachments_emit_rsd(pdev, panvk_meta_clear_attachments_emit_rsd(pdev,
&cmdbuf->desc_pool.base, &cmdbuf->desc_pool.base,
att->format, att->format, rt,
attachment,
shader_info, shader_info,
shader); shader);
@ -514,10 +513,10 @@ panvk_per_arch(CmdClearAttachments)(VkCommandBuffer commandBuffer,
for (unsigned i = 0; i < attachmentCount; i++) { for (unsigned i = 0; i < attachmentCount; i++) {
for (unsigned j = 0; j < rectCount; j++) { for (unsigned j = 0; j < rectCount; j++) {
uint32_t attachment; uint32_t attachment, rt = 0;
if (pAttachments[i].aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) { if (pAttachments[i].aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) {
unsigned idx = pAttachments[i].colorAttachment; rt = pAttachments[i].colorAttachment;
attachment = subpass->color_attachments[idx].idx; attachment = subpass->color_attachments[rt].idx;
} else { } else {
attachment = subpass->zs_attachment.idx; attachment = subpass->zs_attachment.idx;
} }
@ -525,7 +524,7 @@ panvk_per_arch(CmdClearAttachments)(VkCommandBuffer commandBuffer,
if (attachment == VK_ATTACHMENT_UNUSED) if (attachment == VK_ATTACHMENT_UNUSED)
continue; continue;
panvk_meta_clear_attachment(cmdbuf, attachment, panvk_meta_clear_attachment(cmdbuf, attachment, rt,
pAttachments[i].aspectMask, pAttachments[i].aspectMask,
&pAttachments[i].clearValue, &pAttachments[i].clearValue,
&pRects[j]); &pRects[j]);