Add swiftshader workaround to resolve full MSAA image in dmsaa RenderPass.

Bug: b/303705884
Change-Id: Ie630c897b739530db1d61b055a9dfee3d03ca539
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/768298
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
diff --git a/gm/mesh.cpp b/gm/mesh.cpp
index 92c388b..9487439 100644
--- a/gm/mesh.cpp
+++ b/gm/mesh.cpp
@@ -1455,12 +1455,6 @@
             return DrawResult::kFail;
         }
 
-        // TODO(b/303705884): The call to `VertexBuffer::update` above has the side effect of
-        // preventing the canvas from being cleared in Ganesh's VKDMSAA mode. (Performing the update
-        // drops the currently-active op.) This causes garbage to appear in golden images,
-        // particularly in Swiftshader. Until this is fixed, we reissue the canvas clear here.
-        canvas->drawColor(SK_ColorWHITE, SkBlendMode::kSrc);
-
         SkPaint paint;
         paint.setShader(fPaintShader);
         canvas->drawMesh(result.mesh, SkBlender::Mode(SkBlendMode::kDstOver), paint);
diff --git a/src/gpu/ganesh/vk/GrVkCaps.cpp b/src/gpu/ganesh/vk/GrVkCaps.cpp
index 91e2f18..fc61c8e 100644
--- a/src/gpu/ganesh/vk/GrVkCaps.cpp
+++ b/src/gpu/ganesh/vk/GrVkCaps.cpp
@@ -572,7 +572,11 @@
     // On Qualcomm and Arm the gpu resolves an area larger than the render pass bounds when using
     // discardable msaa attachments. This causes the resolve to resolve uninitialized data from the
     // msaa image into the resolve image.
-    if (kQualcomm_VkVendor == properties.vendorID || kARM_VkVendor == properties.vendorID) {
+    // This also occurs on swiftshader: b/303705884
+    if (properties.vendorID == kQualcomm_VkVendor ||
+        properties.vendorID == kARM_VkVendor ||
+        (properties.vendorID == kGoogle_VkVendor &&
+         properties.deviceID == kSwiftshader_DeviceID)) {
         fMustLoadFullImageWithDiscardableMSAA = true;
     }
 
diff --git a/src/gpu/ganesh/vk/GrVkCaps.h b/src/gpu/ganesh/vk/GrVkCaps.h
index 21cec11..b1281f5d 100644
--- a/src/gpu/ganesh/vk/GrVkCaps.h
+++ b/src/gpu/ganesh/vk/GrVkCaps.h
@@ -277,6 +277,7 @@
     enum VkVendor {
         kAMD_VkVendor = 4098,
         kARM_VkVendor = 5045,
+        kGoogle_VkVendor = 0x1AE0,
         kImagination_VkVendor = 4112,
         kIntel_VkVendor = 32902,
         kNvidia_VkVendor = 4318,
@@ -298,6 +299,11 @@
         kOther
     };
 
+    enum DeviceID {
+        kSwiftshader_DeviceID = 0xC0DE, // As listed in Swiftshader code this may be a placeholder
+                                        // value but works for now.
+    };
+
     static IntelGPUType GetIntelGPUType(uint32_t deviceID);
     static int GetIntelGen(IntelGPUType type) {
         switch (type) {