radv: handle dcc in explicit image resolve path. (v2)
authorDave Airlie <airlied@redhat.com>
Tue, 7 Feb 2017 21:35:51 +0000 (21:35 +0000)
committerDave Airlie <airlied@redhat.com>
Tue, 7 Feb 2017 23:31:08 +0000 (23:31 +0000)
We need to initialize dcc like we do in the subpass path.

v2: fix initial/final layouts
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_meta_resolve.c

index 66f14667898c8686998f1a1bc5b3afb0d00462d7..23ca569d801b76600c12acc82bcff90a277c02af 100644 (file)
@@ -95,9 +95,11 @@ create_pass(struct radv_device *device)
                attachments[i].samples = 1;
                attachments[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
                attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
-               attachments[i].initialLayout = VK_IMAGE_LAYOUT_GENERAL;
-               attachments[i].finalLayout = VK_IMAGE_LAYOUT_GENERAL;
        }
+       attachments[0].initialLayout = VK_IMAGE_LAYOUT_GENERAL;
+       attachments[0].finalLayout = VK_IMAGE_LAYOUT_GENERAL;
+       attachments[1].initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
+       attachments[1].finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
 
        result = radv_CreateRenderPass(device_h,
                                       &(VkRenderPassCreateInfo) {
@@ -116,7 +118,7 @@ create_pass(struct radv_device *device)
                                                               },
                                                               {
                                                                       .attachment = 1,
-                                                                      .layout = VK_IMAGE_LAYOUT_GENERAL,
+                                                                      .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
                                                               },
                                                       },
                                                       .pResolveAttachments = NULL,
@@ -428,6 +430,9 @@ void radv_CmdResolveImage(
        if (src_image->array_size > 1)
                radv_finishme("vkCmdResolveImage: multisample array images");
 
+       if (dest_image->surface.dcc_size) {
+               radv_initialize_dcc(cmd_buffer, dest_image, 0xffffffff);
+       }
        for (uint32_t r = 0; r < region_count; ++r) {
                const VkImageResolve *region = &regions[r];