[Mesa-dev] [PATCH] radv: handle image transitions for fmasks

Dave Airlie airlied at gmail.com
Thu Oct 20 23:37:23 UTC 2016


On 20 October 2016 at 15:07, Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl> wrote:
> On Thu, Oct 20, 2016 at 4:07 AM, Dave Airlie <airlied at gmail.com> wrote:
>> From: Dave Airlie <airlied at redhat.com>
>>
>> This fixes
>> dEQP-VK.pipeline.multisample.sampled_image*
>>
>> These all render to multisampled image, and then
>> sample from it, so we must transition it correctly.
>>
>> Cc: "13.0" <mesa-stable at lists.freedesktop.org>
>> Signed-off-by: Dave Airlie <airlied at redhat.com>
>> ---
>>  src/amd/vulkan/radv_cmd_buffer.c | 19 +++++++++++++++++++
>>  1 file changed, 19 insertions(+)
>>
>> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
>> index 3f1a6f4..64a87ac 100644
>> --- a/src/amd/vulkan/radv_cmd_buffer.c
>> +++ b/src/amd/vulkan/radv_cmd_buffer.c
>> @@ -2170,6 +2170,21 @@ static void radv_handle_cmask_image_transition(struct radv_cmd_buffer *cmd_buffe
>>         }
>>  }
>>
>> +static void radv_handle_fmask_image_transition(struct radv_cmd_buffer *cmd_buffer,
>> +                                              struct radv_image *image,
>> +                                              VkImageLayout src_layout,
>> +                                              VkImageLayout dst_layout,
>> +                                              VkImageSubresourceRange range,
>> +                                              VkImageAspectFlags pending_clears)
>> +{
>> +       /* fmask should be same conditions as cmask */
>> +       if (radv_layout_has_cmask(image, src_layout) &&
>> +           !radv_layout_has_cmask(image, dst_layout)) {
>> +
>> +               radv_fast_clear_flush_image_inplace(cmd_buffer, image);
>> +       }
>> +}
>> +
>>  void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer,
>>                          struct radv_image *image, uint32_t value)
>>  {
>> @@ -2217,6 +2232,10 @@ static void radv_handle_image_transition(struct radv_cmd_buffer *cmd_buffer,
>>                 radv_handle_cmask_image_transition(cmd_buffer, image, src_layout,
>>                                                    dst_layout, range, pending_clears);
>>
>> +       if (image->fmask.size)
>> +               radv_handle_fmask_image_transition(cmd_buffer, image, src_layout,
>> +                                                  dst_layout, range, pending_clears);
>> +
>
> Can we not do this if there is a cmask, as the cmask transition should
> take case of it? I wonder in which case you got a fmask without cmask?

Good point, it's the test for fast clears enabled that mess it up,
I'll just remove that.

New patch sent.

Dave.


More information about the mesa-dev mailing list