radv: decompress fmask before reading using texture unit
authorDave Airlie <airlied@redhat.com>
Wed, 19 Oct 2016 07:34:28 +0000 (17:34 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 19 Oct 2016 07:39:47 +0000 (17:39 +1000)
Before we can read the fmask using the compute shader, we need
to decompress the fmask in place.

This fixes a bunch of remaining failure and hopefully multisampling
in Talos.

src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_meta_fast_clear.c
src/amd/vulkan/radv_meta_resolve.c

index 690c739c2aba8c4a3bf0806f64249891d6c34945..3f1a6f42527ac5c5f2ad0ff13f6030015cb5030c 100644 (file)
@@ -2163,6 +2163,9 @@ static void radv_handle_cmask_image_transition(struct radv_cmd_buffer *cmd_buffe
                        radv_initialise_cmask(cmd_buffer, image, 0xffffffffu);
        } else if (radv_layout_has_cmask(image, src_layout) &&
                   !radv_layout_has_cmask(image, dst_layout)) {
+
+               if (!cmd_buffer->device->allow_fast_clears)
+                       return;
                radv_fast_clear_flush_image_inplace(cmd_buffer, image);
        }
 }
index c0fa922c25c618d629962be70858c4bf007c34a5..15c9bbcb1e41bdd279305661141f2002c63f293b 100644 (file)
@@ -419,12 +419,6 @@ radv_fast_clear_flush_image_inplace(struct radv_cmd_buffer *cmd_buffer,
        VkDevice device_h = radv_device_to_handle(cmd_buffer->device);
        VkCommandBuffer cmd_buffer_h = radv_cmd_buffer_to_handle(cmd_buffer);
 
-       if (!image->cmask.size)
-               return;
-
-       if (!cmd_buffer->device->allow_fast_clears)
-               return;
-
        radv_meta_save_pass(&saved_pass_state, cmd_buffer);
        radv_meta_save_graphics_reset_vport_scissor(&saved_state, cmd_buffer);
 
index 6b0540fb6298840a2e72be26b8b11aa08dc38abb..da813eb565a4d978e08a91555faac1794aa3a320 100644 (file)
@@ -439,6 +439,8 @@ void radv_CmdResolveImage(
                use_compute_resolve = true;
 
        if (use_compute_resolve) {
+
+               radv_fast_clear_flush_image_inplace(cmd_buffer, src_image);
                radv_meta_resolve_compute_image(cmd_buffer,
                                                src_image,
                                                src_image_layout,