Suppress specific Vulkan validation messages

Adds UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (0x4dae5635)
initially, since we can see that it's causing issues with the WebGPU CTS
tests.

Change-Id: I862e3986d59ae590458f9011a16cc824bf752e72
Bug: dawn:785
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/50423
Commit-Queue: Brandon Jones <bajones@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/src/dawn_native/vulkan/BackendVk.cpp b/src/dawn_native/vulkan/BackendVk.cpp
index c9bcdcc..7fc8542 100644
--- a/src/dawn_native/vulkan/BackendVk.cpp
+++ b/src/dawn_native/vulkan/BackendVk.cpp
@@ -52,6 +52,12 @@
 #    error "Unimplemented Vulkan backend platform"
 #endif
 
+// List of Vulkan MessageIdNames to suppress validation messages for. These should be used sparingly
+// but may be useful to temporarily quiet issues while a fix is in the works.
+constexpr const char* kSuppressedValidationMessageNames[] = {
+    "UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout",  // (ISSUE: dawn:785)
+};
+
 namespace dawn_native { namespace vulkan {
 
     namespace {
@@ -61,6 +67,13 @@
                              VkDebugUtilsMessageTypeFlagsEXT /* messageTypes */,
                              const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
                              void* /* pUserData */) {
+            // If the message is of a suppressed type, ignore it.
+            for (const char* msgName : kSuppressedValidationMessageNames) {
+                if (strstr(pCallbackData->pMessageIdName, msgName) != nullptr) {
+                    return VK_FALSE;
+                }
+            }
+
             dawn::WarningLog() << pCallbackData->pMessage;
             ASSERT((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) == 0);