From: Dave Airlie <[email protected]> We can only fast clear 128-bit images if the r/g/b channels are the same, and we are using DCC.
For DCC we'll bail out on translate if this isn't true, and we catch cmask clears explicitly. Signed-off-by: Dave Airlie <[email protected]> --- src/amd/vulkan/radv_formats.c | 7 +++++++ src/amd/vulkan/radv_meta_clear.c | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index b13adb9..0ca88ef 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -969,6 +969,13 @@ bool radv_format_pack_clear_color(VkFormat format, clear_vals[0] = fui(value->float32[0]); clear_vals[1] = fui(value->float32[1]); break; + case VK_FORMAT_R32G32B32A32_SFLOAT: + if (value->float32[0] != value->float32[1] || + value->float32[0] != value->float32[2]) + return false; + clear_vals[0] = fui(value->float32[0]); + clear_vals[1] = fui(value->float32[3]); + break; case VK_FORMAT_R32_SFLOAT: clear_vals[1] = 0; clear_vals[0] = fui(value->float32[0]); diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c index 0648513..002e126 100644 --- a/src/amd/vulkan/radv_meta_clear.c +++ b/src/amd/vulkan/radv_meta_clear.c @@ -938,6 +938,11 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer, iview->image->offset + iview->image->dcc_offset, iview->image->surface.dcc_size, 0x20202020); } else { + + if (iview->image->surface.bpe > 8) { + /* 128 bit formats not supported */ + return false; + } radv_fill_buffer(cmd_buffer, iview->image->bo, iview->image->offset + iview->image->cmask.offset, iview->image->cmask.size, 0); -- 2.9.4 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
