Vulkan: use VK_EXT_debug_utils instead of deprecated extensions.
The previous VK_EXT_debug_report and VK_EXT_debug_marker extensions were
both deprecated in favor of VK_EXT_debug_utils. This commit makes Dawn
follow the ecosystem and also adds more detailed reporting of why
vkCreateInstance fails that's now supported in VK_EXT_debug_utils.
Bug: dawn:635
Change-Id: I61c89da1fd55f26d7ccf91723feedfb354efbc16
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38020
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
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;