From 46eef313119f0d08e674ee7f6f9934e75303892b Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 19 Jan 2016 15:52:03 -0800 Subject: [PATCH] anv/meta_clear: Call emit_clear directly in ClearImage Using the load op means that we end up with recursive meta. We shouldn't be doing that. --- src/vulkan/anv_meta_clear.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/vulkan/anv_meta_clear.c b/src/vulkan/anv_meta_clear.c index b5e257b1602..1bc470fb5de 100644 --- a/src/vulkan/anv_meta_clear.c +++ b/src/vulkan/anv_meta_clear.c @@ -888,18 +888,9 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer, }; if (range->aspectMask & VK_IMAGE_ASPECT_COLOR_BIT) { - att_desc.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - subpass_desc.colorAttachmentCount = 1; subpass_desc.pColorAttachments = &att_ref; } else { - if (range->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) { - att_desc.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - } - if (range->aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) { - att_desc.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; - } - subpass_desc.pDepthStencilAttachment = &att_ref; } @@ -927,11 +918,28 @@ anv_cmd_clear_image(struct anv_cmd_buffer *cmd_buffer, }, .renderPass = pass, .framebuffer = fb, - .clearValueCount = 1, - .pClearValues = clear_value, + .clearValueCount = 0, + .pClearValues = NULL, }, VK_SUBPASS_CONTENTS_INLINE); + VkClearAttachment clear_att = { + .aspectMask = range->aspectMask, + .colorAttachment = 0, + .clearValue = *clear_value, + }; + + VkClearRect clear_rect = { + .rect = { + .offset = { 0, 0 }, + .extent = { iview.extent.width, iview.extent.height }, + }, + .baseArrayLayer = range->baseArrayLayer, + .layerCount = 1, /* FINISHME: clear multi-layer framebuffer */ + }; + + emit_clear(cmd_buffer, &clear_att, &clear_rect); + ANV_CALL(CmdEndRenderPass)(anv_cmd_buffer_to_handle(cmd_buffer)); ANV_CALL(DestroyRenderPass)(device_h, pass, &cmd_buffer->pool->alloc); -- 2.30.2