tu: Support multisample image clears
authorConnor Abbott <cwabbott0@gmail.com>
Fri, 7 Feb 2020 12:43:48 +0000 (13:43 +0100)
committerJonathan Marek <jonathan@marek.ca>
Thu, 13 Feb 2020 02:31:57 +0000 (21:31 -0500)
We may need shader workarounds for some formats, but for now this seems
to work at least as well as the gmem path for clearing multisample
attachments. And soon we'll start calling this even on the gmem path,
since we leave the final decision of whether to use sysmem or not up
till the end, so we can't have it assert or otherwise working tests
would assert.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3713>

src/freedreno/vulkan/tu_blit.c

index 302a8d4f3f205ea8454e2736936f2423c27b6b12..9baca8e582fca3c94da984fbb33e63db709bcddc 100644 (file)
@@ -268,7 +268,12 @@ void tu_blit(struct tu_cmd_buffer *cmdbuf, struct tu_cs *cs,
       /* unsupported format cleared as UINT32 */
       if (blt->dst.fmt == VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)
          blt->dst.fmt = VK_FORMAT_R32_UINT;
-      assert(blt->dst.samples == 1); /* TODO */
+      /* TODO: multisample image clearing also seems not to work with certain
+       * formats. The blob uses a shader-based clear in these cases.
+       */
+      blt->dst.x *= blt->dst.samples;
+      blt->dst.width *= blt->dst.samples;
+      blt->dst.samples = 1;
       blt->src = blt->dst;
       break;
    default: