diff --git a/docs/debug_markers.md b/docs/debug_markers.md
index 8b2404a..d7fd266 100644
--- a/docs/debug_markers.md
+++ b/docs/debug_markers.md
@@ -33,7 +33,7 @@
 
 ## Vulkan
 
-Debug markers on Vulkan are implemented with [VK_EXT_debug_marker](https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VK_EXT_debug_marker).
+Debug markers on Vulkan are implemented with [VK_EXT_debug_utils](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_debug_utils.html).
 
 To enable marker functionality, you must launch your application from your debugging tool. Attaching to an already running application is not supported.
 
diff --git a/src/dawn_native/vulkan/BackendVk.cpp b/src/dawn_native/vulkan/BackendVk.cpp
index 613f0a0..d725d98 100644
--- a/src/dawn_native/vulkan/BackendVk.cpp
+++ b/src/dawn_native/vulkan/BackendVk.cpp
@@ -20,6 +20,7 @@
 #include "dawn_native/Instance.h"
 #include "dawn_native/VulkanBackend.h"
 #include "dawn_native/vulkan/AdapterVk.h"
+#include "dawn_native/vulkan/UtilsVulkan.h"
 #include "dawn_native/vulkan/VulkanError.h"
 
 // TODO(crbug.com/dawn/283): Link against the Vulkan Loader and remove this.
@@ -53,14 +54,41 @@
 
 namespace dawn_native { namespace vulkan {
 
+    namespace {
+
+        VKAPI_ATTR VkBool32 VKAPI_CALL
+        OnDebugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+                             VkDebugUtilsMessageTypeFlagsEXT /* messageTypes */,
+                             const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
+                             void* /* pUserData */) {
+            dawn::WarningLog() << pCallbackData->pMessage;
+            ASSERT((messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) == 0);
+
+            return VK_FALSE;
+        }
+
+        // A debug callback specifically for instance creation so that we don't fire an ASSERT when
+        // the instance fails creation in an expected manner (for example the system not having
+        // Vulkan drivers).
+        VKAPI_ATTR VkBool32 VKAPI_CALL OnInstanceCreationDebugUtilsCallback(
+            VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+            VkDebugUtilsMessageTypeFlagsEXT /* messageTypes */,
+            const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
+            void* /* pUserData */) {
+            dawn::WarningLog() << pCallbackData->pMessage;
+            return VK_FALSE;
+        }
+
+    }  // anonymous namespace
+
     Backend::Backend(InstanceBase* instance)
         : BackendConnection(instance, wgpu::BackendType::Vulkan) {
     }
 
     Backend::~Backend() {
-        if (mDebugReportCallback != VK_NULL_HANDLE) {
-            mFunctions.DestroyDebugReportCallbackEXT(mInstance, mDebugReportCallback, nullptr);
-            mDebugReportCallback = VK_NULL_HANDLE;
+        if (mDebugUtilsMessenger != VK_NULL_HANDLE) {
+            mFunctions.DestroyDebugUtilsMessengerEXT(mInstance, mDebugUtilsMessenger, nullptr);
+            mDebugUtilsMessenger = VK_NULL_HANDLE;
         }
 
         // VkPhysicalDevices are destroyed when the VkInstance is destroyed
@@ -150,8 +178,8 @@
 
         DAWN_TRY(mFunctions.LoadInstanceProcs(mInstance, mGlobalInfo));
 
-        if (usedGlobalKnobs.HasExt(InstanceExt::DebugReport)) {
-            DAWN_TRY(RegisterDebugReport());
+        if (usedGlobalKnobs.HasExt(InstanceExt::DebugUtils)) {
+            DAWN_TRY(RegisterDebugUtils());
         }
 
         DAWN_TRY_ASSIGN(mPhysicalDevices, GetPhysicalDevices(*this));
@@ -209,10 +237,6 @@
         // Available and known instance extensions default to being requested, but some special
         // cases are removed.
         InstanceExtSet extensionsToRequest = mGlobalInfo.extensions;
-
-        if (!GetInstance()->IsBackendValidationEnabled()) {
-            extensionsToRequest.Set(InstanceExt::DebugReport, false);
-        }
         usedKnobs.extensions = extensionsToRequest;
 
         std::vector<const char*> extensionNames;
@@ -253,38 +277,46 @@
         createInfo.enabledExtensionCount = static_cast<uint32_t>(extensionNames.size());
         createInfo.ppEnabledExtensionNames = extensionNames.data();
 
+        PNextChainBuilder createInfoChain(&createInfo);
+
+        // Register the debug callback for instance creation so we receive message for any errors
+        // (validation or other).
+        VkDebugUtilsMessengerCreateInfoEXT utilsMessengerCreateInfo;
+        if (mGlobalInfo.HasExt(InstanceExt::DebugUtils)) {
+            utilsMessengerCreateInfo.flags = 0;
+            utilsMessengerCreateInfo.messageSeverity =
+                VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |
+                VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
+            utilsMessengerCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
+                                                   VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
+            utilsMessengerCreateInfo.pfnUserCallback = OnInstanceCreationDebugUtilsCallback;
+            utilsMessengerCreateInfo.pUserData = nullptr;
+
+            createInfoChain.Add(&utilsMessengerCreateInfo,
+                                VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT);
+        }
+
         DAWN_TRY(CheckVkSuccess(mFunctions.CreateInstance(&createInfo, nullptr, &mInstance),
                                 "vkCreateInstance"));
 
         return usedKnobs;
     }
 
-    MaybeError Backend::RegisterDebugReport() {
-        VkDebugReportCallbackCreateInfoEXT createInfo;
-        createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT;
+    MaybeError Backend::RegisterDebugUtils() {
+        VkDebugUtilsMessengerCreateInfoEXT createInfo;
+        createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
         createInfo.pNext = nullptr;
-        createInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT;
-        createInfo.pfnCallback = Backend::OnDebugReportCallback;
-        createInfo.pUserData = this;
+        createInfo.flags = 0;
+        createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |
+                                     VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
+        createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
+                                 VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
+        createInfo.pfnUserCallback = OnDebugUtilsCallback;
+        createInfo.pUserData = nullptr;
 
-        return CheckVkSuccess(mFunctions.CreateDebugReportCallbackEXT(
-                                  mInstance, &createInfo, nullptr, &*mDebugReportCallback),
-                              "vkCreateDebugReportcallback");
-    }
-
-    VKAPI_ATTR VkBool32 VKAPI_CALL
-    Backend::OnDebugReportCallback(VkDebugReportFlagsEXT flags,
-                                   VkDebugReportObjectTypeEXT /*objectType*/,
-                                   uint64_t /*object*/,
-                                   size_t /*location*/,
-                                   int32_t /*messageCode*/,
-                                   const char* /*pLayerPrefix*/,
-                                   const char* pMessage,
-                                   void* /*pUserdata*/) {
-        dawn::WarningLog() << pMessage;
-        ASSERT((flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) == 0);
-
-        return VK_FALSE;
+        return CheckVkSuccess(mFunctions.CreateDebugUtilsMessengerEXT(
+                                  mInstance, &createInfo, nullptr, &*mDebugUtilsMessenger),
+                              "vkCreateDebugUtilsMessengerEXT");
     }
 
     BackendConnection* Connect(InstanceBase* instance, bool useSwiftshader) {
diff --git a/src/dawn_native/vulkan/BackendVk.h b/src/dawn_native/vulkan/BackendVk.h
index 7d22b67..37690bc 100644
--- a/src/dawn_native/vulkan/BackendVk.h
+++ b/src/dawn_native/vulkan/BackendVk.h
@@ -40,23 +40,14 @@
         MaybeError LoadVulkan(bool useSwiftshader);
         ResultOrError<VulkanGlobalKnobs> CreateInstance();
 
-        MaybeError RegisterDebugReport();
-        static VKAPI_ATTR VkBool32 VKAPI_CALL
-        OnDebugReportCallback(VkDebugReportFlagsEXT flags,
-                              VkDebugReportObjectTypeEXT objectType,
-                              uint64_t object,
-                              size_t location,
-                              int32_t messageCode,
-                              const char* pLayerPrefix,
-                              const char* pMessage,
-                              void* pUserdata);
+        MaybeError RegisterDebugUtils();
 
         DynamicLib mVulkanLib;
         VulkanGlobalInfo mGlobalInfo = {};
         VkInstance mInstance = VK_NULL_HANDLE;
         VulkanFunctions mFunctions;
 
-        VkDebugReportCallbackEXT mDebugReportCallback = VK_NULL_HANDLE;
+        VkDebugUtilsMessengerEXT mDebugUtilsMessenger = VK_NULL_HANDLE;
 
         std::vector<VkPhysicalDevice> mPhysicalDevices;
     };
diff --git a/src/dawn_native/vulkan/CommandBufferVk.cpp b/src/dawn_native/vulkan/CommandBufferVk.cpp
index afd9144..44ed9c6 100644
--- a/src/dawn_native/vulkan/CommandBufferVk.cpp
+++ b/src/dawn_native/vulkan/CommandBufferVk.cpp
@@ -743,18 +743,19 @@
                 }
 
                 case Command::InsertDebugMarker: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
                         const char* label = mCommands.NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo{};
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(&mCommands, Command::InsertDebugMarker);
                     }
@@ -762,9 +763,9 @@
                 }
 
                 case Command::PopDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         mCommands.NextCommand<PopDebugGroupCmd>();
-                        device->fn.CmdDebugMarkerEndEXT(commands);
+                        device->fn.CmdEndDebugUtilsLabelEXT(commands);
                     } else {
                         SkipCommand(&mCommands, Command::PopDebugGroup);
                     }
@@ -772,18 +773,19 @@
                 }
 
                 case Command::PushDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
                         const char* label = mCommands.NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo{};
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(&mCommands, Command::PushDebugGroup);
                     }
@@ -858,19 +860,19 @@
                 }
 
                 case Command::InsertDebugMarker: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
                         const char* label = mCommands.NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo;
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pNext = nullptr;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(&mCommands, Command::InsertDebugMarker);
                     }
@@ -878,9 +880,9 @@
                 }
 
                 case Command::PopDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         mCommands.NextCommand<PopDebugGroupCmd>();
-                        device->fn.CmdDebugMarkerEndEXT(commands);
+                        device->fn.CmdEndDebugUtilsLabelEXT(commands);
                     } else {
                         SkipCommand(&mCommands, Command::PopDebugGroup);
                     }
@@ -888,19 +890,19 @@
                 }
 
                 case Command::PushDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
                         const char* label = mCommands.NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo;
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pNext = nullptr;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(&mCommands, Command::PushDebugGroup);
                     }
@@ -1010,19 +1012,19 @@
                 }
 
                 case Command::InsertDebugMarker: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         InsertDebugMarkerCmd* cmd = iter->NextCommand<InsertDebugMarkerCmd>();
                         const char* label = iter->NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo;
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pNext = nullptr;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(iter, Command::InsertDebugMarker);
                     }
@@ -1030,9 +1032,9 @@
                 }
 
                 case Command::PopDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         iter->NextCommand<PopDebugGroupCmd>();
-                        device->fn.CmdDebugMarkerEndEXT(commands);
+                        device->fn.CmdEndDebugUtilsLabelEXT(commands);
                     } else {
                         SkipCommand(iter, Command::PopDebugGroup);
                     }
@@ -1040,19 +1042,19 @@
                 }
 
                 case Command::PushDebugGroup: {
-                    if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) {
+                    if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
                         PushDebugGroupCmd* cmd = iter->NextCommand<PushDebugGroupCmd>();
                         const char* label = iter->NextData<char>(cmd->length + 1);
-                        VkDebugMarkerMarkerInfoEXT markerInfo;
-                        markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
-                        markerInfo.pNext = nullptr;
-                        markerInfo.pMarkerName = label;
+                        VkDebugUtilsLabelEXT utilsLabel;
+                        utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
+                        utilsLabel.pNext = nullptr;
+                        utilsLabel.pLabelName = label;
                         // Default color to black
-                        markerInfo.color[0] = 0.0;
-                        markerInfo.color[1] = 0.0;
-                        markerInfo.color[2] = 0.0;
-                        markerInfo.color[3] = 1.0;
-                        device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo);
+                        utilsLabel.color[0] = 0.0;
+                        utilsLabel.color[1] = 0.0;
+                        utilsLabel.color[2] = 0.0;
+                        utilsLabel.color[3] = 1.0;
+                        device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
                     } else {
                         SkipCommand(iter, Command::PushDebugGroup);
                     }
diff --git a/src/dawn_native/vulkan/DeviceVk.cpp b/src/dawn_native/vulkan/DeviceVk.cpp
index 3096ce4..4ad8210 100644
--- a/src/dawn_native/vulkan/DeviceVk.cpp
+++ b/src/dawn_native/vulkan/DeviceVk.cpp
@@ -187,6 +187,10 @@
         return mDeviceInfo;
     }
 
+    const VulkanGlobalInfo& Device::GetGlobalInfo() const {
+        return ToBackend(GetAdapter())->GetBackend()->GetGlobalInfo();
+    }
+
     VkDevice Device::GetVkDevice() const {
         return mVkDevice;
     }
diff --git a/src/dawn_native/vulkan/DeviceVk.h b/src/dawn_native/vulkan/DeviceVk.h
index 2a62779..e28c1b9 100644
--- a/src/dawn_native/vulkan/DeviceVk.h
+++ b/src/dawn_native/vulkan/DeviceVk.h
@@ -52,6 +52,7 @@
 
         VkInstance GetVkInstance() const;
         const VulkanDeviceInfo& GetDeviceInfo() const;
+        const VulkanGlobalInfo& GetGlobalInfo() const;
         VkDevice GetVkDevice() const;
         uint32_t GetGraphicsQueueFamily() const;
         VkQueue GetQueue() const;
diff --git a/src/dawn_native/vulkan/VulkanExtensions.cpp b/src/dawn_native/vulkan/VulkanExtensions.cpp
index 06ebd81..e12de93 100644
--- a/src/dawn_native/vulkan/VulkanExtensions.cpp
+++ b/src/dawn_native/vulkan/VulkanExtensions.cpp
@@ -47,7 +47,7 @@
         {InstanceExt::XcbSurface, "VK_KHR_xcb_surface", NeverPromoted},
         {InstanceExt::XlibSurface, "VK_KHR_xlib_surface", NeverPromoted},
 
-        {InstanceExt::DebugReport, "VK_EXT_debug_report", NeverPromoted}
+        {InstanceExt::DebugUtils, "VK_EXT_debug_utils", NeverPromoted},
         //
     }};
 
@@ -95,7 +95,7 @@
             switch (ext) {
                 case InstanceExt::GetPhysicalDeviceProperties2:
                 case InstanceExt::Surface:
-                case InstanceExt::DebugReport:
+                case InstanceExt::DebugUtils:
                     hasDependencies = true;
                     break;
 
@@ -161,7 +161,6 @@
         {DeviceExt::ExternalSemaphoreFD, "VK_KHR_external_semaphore_fd", NeverPromoted},
         {DeviceExt::ExternalSemaphoreZirconHandle, "VK_FUCHSIA_external_semaphore", NeverPromoted},
 
-        {DeviceExt::DebugMarker, "VK_EXT_debug_marker", NeverPromoted},
         {DeviceExt::ImageDrmFormatModifier, "VK_EXT_image_drm_format_modifier", NeverPromoted},
         {DeviceExt::Swapchain, "VK_KHR_swapchain", NeverPromoted},
         {DeviceExt::SubgroupSizeControl, "VK_EXT_subgroup_size_control", NeverPromoted},
@@ -235,12 +234,6 @@
                         HasDep(DeviceExt::GetPhysicalDeviceProperties2);
                     break;
 
-                case DeviceExt::DebugMarker:
-                    // TODO(cwallez@chromium.org): VK_KHR_debug_report is deprecated, switch to
-                    // using VK_KHR_debug_utils instead.
-                    hasDependencies = instanceExts.Has(InstanceExt::DebugReport);
-                    break;
-
                 case DeviceExt::ImageDrmFormatModifier:
                     hasDependencies = HasDep(DeviceExt::BindMemory2) &&
                                       HasDep(DeviceExt::GetPhysicalDeviceProperties2) &&
diff --git a/src/dawn_native/vulkan/VulkanExtensions.h b/src/dawn_native/vulkan/VulkanExtensions.h
index c5bb705..123c579 100644
--- a/src/dawn_native/vulkan/VulkanExtensions.h
+++ b/src/dawn_native/vulkan/VulkanExtensions.h
@@ -38,7 +38,7 @@
         XlibSurface,
 
         // Others
-        DebugReport,
+        DebugUtils,
 
         EnumCount,
     };
@@ -99,7 +99,6 @@
         ExternalSemaphoreZirconHandle,
 
         // Others
-        DebugMarker,
         ImageDrmFormatModifier,
         Swapchain,
         SubgroupSizeControl,
diff --git a/src/dawn_native/vulkan/VulkanFunctions.cpp b/src/dawn_native/vulkan/VulkanFunctions.cpp
index cc070f2..9584475 100644
--- a/src/dawn_native/vulkan/VulkanFunctions.cpp
+++ b/src/dawn_native/vulkan/VulkanFunctions.cpp
@@ -74,10 +74,18 @@
         GET_INSTANCE_PROC(GetPhysicalDeviceQueueFamilyProperties);
         GET_INSTANCE_PROC(GetPhysicalDeviceSparseImageFormatProperties);
 
-        if (globalInfo.HasExt(InstanceExt::DebugReport)) {
-            GET_INSTANCE_PROC(CreateDebugReportCallbackEXT);
-            GET_INSTANCE_PROC(DebugReportMessageEXT);
-            GET_INSTANCE_PROC(DestroyDebugReportCallbackEXT);
+        if (globalInfo.HasExt(InstanceExt::DebugUtils)) {
+            GET_INSTANCE_PROC(CmdBeginDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(CmdEndDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(CmdInsertDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(CreateDebugUtilsMessengerEXT);
+            GET_INSTANCE_PROC(DestroyDebugUtilsMessengerEXT);
+            GET_INSTANCE_PROC(QueueBeginDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(QueueEndDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(QueueInsertDebugUtilsLabelEXT);
+            GET_INSTANCE_PROC(SetDebugUtilsObjectNameEXT);
+            GET_INSTANCE_PROC(SetDebugUtilsObjectTagEXT);
+            GET_INSTANCE_PROC(SubmitDebugUtilsMessageEXT);
         }
 
         // Vulkan 1.1 is not required to report promoted extensions from 1.0 and is not required to
@@ -278,12 +286,6 @@
         GET_DEVICE_PROC(UpdateDescriptorSets);
         GET_DEVICE_PROC(WaitForFences);
 
-        if (deviceInfo.HasExt(DeviceExt::DebugMarker)) {
-            GET_DEVICE_PROC(CmdDebugMarkerBeginEXT);
-            GET_DEVICE_PROC(CmdDebugMarkerEndEXT);
-            GET_DEVICE_PROC(CmdDebugMarkerInsertEXT);
-        }
-
         if (deviceInfo.HasExt(DeviceExt::ExternalMemoryFD)) {
             GET_DEVICE_PROC(GetMemoryFdKHR);
             GET_DEVICE_PROC(GetMemoryFdPropertiesKHR);
diff --git a/src/dawn_native/vulkan/VulkanFunctions.h b/src/dawn_native/vulkan/VulkanFunctions.h
index 1f0a453..bb98b6d 100644
--- a/src/dawn_native/vulkan/VulkanFunctions.h
+++ b/src/dawn_native/vulkan/VulkanFunctions.h
@@ -70,10 +70,18 @@
         // device is created.
         PFN_vkDestroyDevice DestroyDevice = nullptr;
 
-        // VK_EXT_debug_report
-        PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT = nullptr;
-        PFN_vkDebugReportMessageEXT DebugReportMessageEXT = nullptr;
-        PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT = nullptr;
+        // VK_EXT_debug_utils
+        PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT = nullptr;
+        PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT = nullptr;
+        PFN_vkCmdInsertDebugUtilsLabelEXT CmdInsertDebugUtilsLabelEXT = nullptr;
+        PFN_vkCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT = nullptr;
+        PFN_vkDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT = nullptr;
+        PFN_vkQueueBeginDebugUtilsLabelEXT QueueBeginDebugUtilsLabelEXT = nullptr;
+        PFN_vkQueueEndDebugUtilsLabelEXT QueueEndDebugUtilsLabelEXT = nullptr;
+        PFN_vkQueueInsertDebugUtilsLabelEXT QueueInsertDebugUtilsLabelEXT = nullptr;
+        PFN_vkSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT = nullptr;
+        PFN_vkSetDebugUtilsObjectTagEXT SetDebugUtilsObjectTagEXT = nullptr;
+        PFN_vkSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT = nullptr;
 
         // VK_KHR_surface
         PFN_vkDestroySurfaceKHR DestroySurfaceKHR = nullptr;
@@ -254,11 +262,6 @@
         PFN_vkUpdateDescriptorSets UpdateDescriptorSets = nullptr;
         PFN_vkWaitForFences WaitForFences = nullptr;
 
-        // VK_EXT_debug_marker
-        PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT = nullptr;
-        PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT = nullptr;
-        PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT = nullptr;
-
         // VK_KHR_swapchain
         PFN_vkCreateSwapchainKHR CreateSwapchainKHR = nullptr;
         PFN_vkDestroySwapchainKHR DestroySwapchainKHR = nullptr;
