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>
This commit is contained in:
Corentin Wallez 2021-01-20 19:19:08 +00:00 committed by Commit Bot service account
parent 55af59b47f
commit f83df90fae
10 changed files with 166 additions and 139 deletions

View File

@ -33,7 +33,7 @@ Unfortunately, PIX's UI does does not lend itself to capturing single frame appl
## Vulkan ## 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. To enable marker functionality, you must launch your application from your debugging tool. Attaching to an already running application is not supported.

View File

@ -20,6 +20,7 @@
#include "dawn_native/Instance.h" #include "dawn_native/Instance.h"
#include "dawn_native/VulkanBackend.h" #include "dawn_native/VulkanBackend.h"
#include "dawn_native/vulkan/AdapterVk.h" #include "dawn_native/vulkan/AdapterVk.h"
#include "dawn_native/vulkan/UtilsVulkan.h"
#include "dawn_native/vulkan/VulkanError.h" #include "dawn_native/vulkan/VulkanError.h"
// TODO(crbug.com/dawn/283): Link against the Vulkan Loader and remove this. // TODO(crbug.com/dawn/283): Link against the Vulkan Loader and remove this.
@ -53,14 +54,41 @@ constexpr char kVulkanLibName[] = "libvulkan.so";
namespace dawn_native { namespace vulkan { 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) Backend::Backend(InstanceBase* instance)
: BackendConnection(instance, wgpu::BackendType::Vulkan) { : BackendConnection(instance, wgpu::BackendType::Vulkan) {
} }
Backend::~Backend() { Backend::~Backend() {
if (mDebugReportCallback != VK_NULL_HANDLE) { if (mDebugUtilsMessenger != VK_NULL_HANDLE) {
mFunctions.DestroyDebugReportCallbackEXT(mInstance, mDebugReportCallback, nullptr); mFunctions.DestroyDebugUtilsMessengerEXT(mInstance, mDebugUtilsMessenger, nullptr);
mDebugReportCallback = VK_NULL_HANDLE; mDebugUtilsMessenger = VK_NULL_HANDLE;
} }
// VkPhysicalDevices are destroyed when the VkInstance is destroyed // VkPhysicalDevices are destroyed when the VkInstance is destroyed
@ -150,8 +178,8 @@ namespace dawn_native { namespace vulkan {
DAWN_TRY(mFunctions.LoadInstanceProcs(mInstance, mGlobalInfo)); DAWN_TRY(mFunctions.LoadInstanceProcs(mInstance, mGlobalInfo));
if (usedGlobalKnobs.HasExt(InstanceExt::DebugReport)) { if (usedGlobalKnobs.HasExt(InstanceExt::DebugUtils)) {
DAWN_TRY(RegisterDebugReport()); DAWN_TRY(RegisterDebugUtils());
} }
DAWN_TRY_ASSIGN(mPhysicalDevices, GetPhysicalDevices(*this)); DAWN_TRY_ASSIGN(mPhysicalDevices, GetPhysicalDevices(*this));
@ -209,10 +237,6 @@ namespace dawn_native { namespace vulkan {
// Available and known instance extensions default to being requested, but some special // Available and known instance extensions default to being requested, but some special
// cases are removed. // cases are removed.
InstanceExtSet extensionsToRequest = mGlobalInfo.extensions; InstanceExtSet extensionsToRequest = mGlobalInfo.extensions;
if (!GetInstance()->IsBackendValidationEnabled()) {
extensionsToRequest.Set(InstanceExt::DebugReport, false);
}
usedKnobs.extensions = extensionsToRequest; usedKnobs.extensions = extensionsToRequest;
std::vector<const char*> extensionNames; std::vector<const char*> extensionNames;
@ -253,38 +277,46 @@ namespace dawn_native { namespace vulkan {
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensionNames.size()); createInfo.enabledExtensionCount = static_cast<uint32_t>(extensionNames.size());
createInfo.ppEnabledExtensionNames = extensionNames.data(); 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), DAWN_TRY(CheckVkSuccess(mFunctions.CreateInstance(&createInfo, nullptr, &mInstance),
"vkCreateInstance")); "vkCreateInstance"));
return usedKnobs; return usedKnobs;
} }
MaybeError Backend::RegisterDebugReport() { MaybeError Backend::RegisterDebugUtils() {
VkDebugReportCallbackCreateInfoEXT createInfo; VkDebugUtilsMessengerCreateInfoEXT createInfo;
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT; createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
createInfo.pNext = nullptr; createInfo.pNext = nullptr;
createInfo.flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT; createInfo.flags = 0;
createInfo.pfnCallback = Backend::OnDebugReportCallback; createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT |
createInfo.pUserData = this; 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( return CheckVkSuccess(mFunctions.CreateDebugUtilsMessengerEXT(
mInstance, &createInfo, nullptr, &*mDebugReportCallback), mInstance, &createInfo, nullptr, &*mDebugUtilsMessenger),
"vkCreateDebugReportcallback"); "vkCreateDebugUtilsMessengerEXT");
}
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;
} }
BackendConnection* Connect(InstanceBase* instance, bool useSwiftshader) { BackendConnection* Connect(InstanceBase* instance, bool useSwiftshader) {

View File

@ -40,23 +40,14 @@ namespace dawn_native { namespace vulkan {
MaybeError LoadVulkan(bool useSwiftshader); MaybeError LoadVulkan(bool useSwiftshader);
ResultOrError<VulkanGlobalKnobs> CreateInstance(); ResultOrError<VulkanGlobalKnobs> CreateInstance();
MaybeError RegisterDebugReport(); MaybeError RegisterDebugUtils();
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);
DynamicLib mVulkanLib; DynamicLib mVulkanLib;
VulkanGlobalInfo mGlobalInfo = {}; VulkanGlobalInfo mGlobalInfo = {};
VkInstance mInstance = VK_NULL_HANDLE; VkInstance mInstance = VK_NULL_HANDLE;
VulkanFunctions mFunctions; VulkanFunctions mFunctions;
VkDebugReportCallbackEXT mDebugReportCallback = VK_NULL_HANDLE; VkDebugUtilsMessengerEXT mDebugUtilsMessenger = VK_NULL_HANDLE;
std::vector<VkPhysicalDevice> mPhysicalDevices; std::vector<VkPhysicalDevice> mPhysicalDevices;
}; };

View File

@ -743,18 +743,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::InsertDebugMarker: { case Command::InsertDebugMarker: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>(); InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
const char* label = mCommands.NextData<char>(cmd->length + 1); const char* label = mCommands.NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo{}; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pMarkerName = label; utilsLabel.pNext = nullptr;
utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo); device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(&mCommands, Command::InsertDebugMarker); SkipCommand(&mCommands, Command::InsertDebugMarker);
} }
@ -762,9 +763,9 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PopDebugGroup: { case Command::PopDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
mCommands.NextCommand<PopDebugGroupCmd>(); mCommands.NextCommand<PopDebugGroupCmd>();
device->fn.CmdDebugMarkerEndEXT(commands); device->fn.CmdEndDebugUtilsLabelEXT(commands);
} else { } else {
SkipCommand(&mCommands, Command::PopDebugGroup); SkipCommand(&mCommands, Command::PopDebugGroup);
} }
@ -772,18 +773,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PushDebugGroup: { case Command::PushDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>(); PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
const char* label = mCommands.NextData<char>(cmd->length + 1); const char* label = mCommands.NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo{}; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pMarkerName = label; utilsLabel.pNext = nullptr;
utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo); device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(&mCommands, Command::PushDebugGroup); SkipCommand(&mCommands, Command::PushDebugGroup);
} }
@ -858,19 +860,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::InsertDebugMarker: { case Command::InsertDebugMarker: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>(); InsertDebugMarkerCmd* cmd = mCommands.NextCommand<InsertDebugMarkerCmd>();
const char* label = mCommands.NextData<char>(cmd->length + 1); const char* label = mCommands.NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pNext = nullptr; utilsLabel.pNext = nullptr;
markerInfo.pMarkerName = label; utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo); device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(&mCommands, Command::InsertDebugMarker); SkipCommand(&mCommands, Command::InsertDebugMarker);
} }
@ -878,9 +880,9 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PopDebugGroup: { case Command::PopDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
mCommands.NextCommand<PopDebugGroupCmd>(); mCommands.NextCommand<PopDebugGroupCmd>();
device->fn.CmdDebugMarkerEndEXT(commands); device->fn.CmdEndDebugUtilsLabelEXT(commands);
} else { } else {
SkipCommand(&mCommands, Command::PopDebugGroup); SkipCommand(&mCommands, Command::PopDebugGroup);
} }
@ -888,19 +890,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PushDebugGroup: { case Command::PushDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>(); PushDebugGroupCmd* cmd = mCommands.NextCommand<PushDebugGroupCmd>();
const char* label = mCommands.NextData<char>(cmd->length + 1); const char* label = mCommands.NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pNext = nullptr; utilsLabel.pNext = nullptr;
markerInfo.pMarkerName = label; utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo); device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(&mCommands, Command::PushDebugGroup); SkipCommand(&mCommands, Command::PushDebugGroup);
} }
@ -1010,19 +1012,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::InsertDebugMarker: { case Command::InsertDebugMarker: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
InsertDebugMarkerCmd* cmd = iter->NextCommand<InsertDebugMarkerCmd>(); InsertDebugMarkerCmd* cmd = iter->NextCommand<InsertDebugMarkerCmd>();
const char* label = iter->NextData<char>(cmd->length + 1); const char* label = iter->NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pNext = nullptr; utilsLabel.pNext = nullptr;
markerInfo.pMarkerName = label; utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerInsertEXT(commands, &markerInfo); device->fn.CmdInsertDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(iter, Command::InsertDebugMarker); SkipCommand(iter, Command::InsertDebugMarker);
} }
@ -1030,9 +1032,9 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PopDebugGroup: { case Command::PopDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
iter->NextCommand<PopDebugGroupCmd>(); iter->NextCommand<PopDebugGroupCmd>();
device->fn.CmdDebugMarkerEndEXT(commands); device->fn.CmdEndDebugUtilsLabelEXT(commands);
} else { } else {
SkipCommand(iter, Command::PopDebugGroup); SkipCommand(iter, Command::PopDebugGroup);
} }
@ -1040,19 +1042,19 @@ namespace dawn_native { namespace vulkan {
} }
case Command::PushDebugGroup: { case Command::PushDebugGroup: {
if (device->GetDeviceInfo().HasExt(DeviceExt::DebugMarker)) { if (device->GetGlobalInfo().HasExt(InstanceExt::DebugUtils)) {
PushDebugGroupCmd* cmd = iter->NextCommand<PushDebugGroupCmd>(); PushDebugGroupCmd* cmd = iter->NextCommand<PushDebugGroupCmd>();
const char* label = iter->NextData<char>(cmd->length + 1); const char* label = iter->NextData<char>(cmd->length + 1);
VkDebugMarkerMarkerInfoEXT markerInfo; VkDebugUtilsLabelEXT utilsLabel;
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; utilsLabel.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT;
markerInfo.pNext = nullptr; utilsLabel.pNext = nullptr;
markerInfo.pMarkerName = label; utilsLabel.pLabelName = label;
// Default color to black // Default color to black
markerInfo.color[0] = 0.0; utilsLabel.color[0] = 0.0;
markerInfo.color[1] = 0.0; utilsLabel.color[1] = 0.0;
markerInfo.color[2] = 0.0; utilsLabel.color[2] = 0.0;
markerInfo.color[3] = 1.0; utilsLabel.color[3] = 1.0;
device->fn.CmdDebugMarkerBeginEXT(commands, &markerInfo); device->fn.CmdBeginDebugUtilsLabelEXT(commands, &utilsLabel);
} else { } else {
SkipCommand(iter, Command::PushDebugGroup); SkipCommand(iter, Command::PushDebugGroup);
} }

View File

@ -187,6 +187,10 @@ namespace dawn_native { namespace vulkan {
return mDeviceInfo; return mDeviceInfo;
} }
const VulkanGlobalInfo& Device::GetGlobalInfo() const {
return ToBackend(GetAdapter())->GetBackend()->GetGlobalInfo();
}
VkDevice Device::GetVkDevice() const { VkDevice Device::GetVkDevice() const {
return mVkDevice; return mVkDevice;
} }

View File

@ -52,6 +52,7 @@ namespace dawn_native { namespace vulkan {
VkInstance GetVkInstance() const; VkInstance GetVkInstance() const;
const VulkanDeviceInfo& GetDeviceInfo() const; const VulkanDeviceInfo& GetDeviceInfo() const;
const VulkanGlobalInfo& GetGlobalInfo() const;
VkDevice GetVkDevice() const; VkDevice GetVkDevice() const;
uint32_t GetGraphicsQueueFamily() const; uint32_t GetGraphicsQueueFamily() const;
VkQueue GetQueue() const; VkQueue GetQueue() const;

View File

@ -47,7 +47,7 @@ namespace dawn_native { namespace vulkan {
{InstanceExt::XcbSurface, "VK_KHR_xcb_surface", NeverPromoted}, {InstanceExt::XcbSurface, "VK_KHR_xcb_surface", NeverPromoted},
{InstanceExt::XlibSurface, "VK_KHR_xlib_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 @@ namespace dawn_native { namespace vulkan {
switch (ext) { switch (ext) {
case InstanceExt::GetPhysicalDeviceProperties2: case InstanceExt::GetPhysicalDeviceProperties2:
case InstanceExt::Surface: case InstanceExt::Surface:
case InstanceExt::DebugReport: case InstanceExt::DebugUtils:
hasDependencies = true; hasDependencies = true;
break; break;
@ -161,7 +161,6 @@ namespace dawn_native { namespace vulkan {
{DeviceExt::ExternalSemaphoreFD, "VK_KHR_external_semaphore_fd", NeverPromoted}, {DeviceExt::ExternalSemaphoreFD, "VK_KHR_external_semaphore_fd", NeverPromoted},
{DeviceExt::ExternalSemaphoreZirconHandle, "VK_FUCHSIA_external_semaphore", 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::ImageDrmFormatModifier, "VK_EXT_image_drm_format_modifier", NeverPromoted},
{DeviceExt::Swapchain, "VK_KHR_swapchain", NeverPromoted}, {DeviceExt::Swapchain, "VK_KHR_swapchain", NeverPromoted},
{DeviceExt::SubgroupSizeControl, "VK_EXT_subgroup_size_control", NeverPromoted}, {DeviceExt::SubgroupSizeControl, "VK_EXT_subgroup_size_control", NeverPromoted},
@ -235,12 +234,6 @@ namespace dawn_native { namespace vulkan {
HasDep(DeviceExt::GetPhysicalDeviceProperties2); HasDep(DeviceExt::GetPhysicalDeviceProperties2);
break; 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: case DeviceExt::ImageDrmFormatModifier:
hasDependencies = HasDep(DeviceExt::BindMemory2) && hasDependencies = HasDep(DeviceExt::BindMemory2) &&
HasDep(DeviceExt::GetPhysicalDeviceProperties2) && HasDep(DeviceExt::GetPhysicalDeviceProperties2) &&

View File

@ -38,7 +38,7 @@ namespace dawn_native { namespace vulkan {
XlibSurface, XlibSurface,
// Others // Others
DebugReport, DebugUtils,
EnumCount, EnumCount,
}; };
@ -99,7 +99,6 @@ namespace dawn_native { namespace vulkan {
ExternalSemaphoreZirconHandle, ExternalSemaphoreZirconHandle,
// Others // Others
DebugMarker,
ImageDrmFormatModifier, ImageDrmFormatModifier,
Swapchain, Swapchain,
SubgroupSizeControl, SubgroupSizeControl,

View File

@ -74,10 +74,18 @@ namespace dawn_native { namespace vulkan {
GET_INSTANCE_PROC(GetPhysicalDeviceQueueFamilyProperties); GET_INSTANCE_PROC(GetPhysicalDeviceQueueFamilyProperties);
GET_INSTANCE_PROC(GetPhysicalDeviceSparseImageFormatProperties); GET_INSTANCE_PROC(GetPhysicalDeviceSparseImageFormatProperties);
if (globalInfo.HasExt(InstanceExt::DebugReport)) { if (globalInfo.HasExt(InstanceExt::DebugUtils)) {
GET_INSTANCE_PROC(CreateDebugReportCallbackEXT); GET_INSTANCE_PROC(CmdBeginDebugUtilsLabelEXT);
GET_INSTANCE_PROC(DebugReportMessageEXT); GET_INSTANCE_PROC(CmdEndDebugUtilsLabelEXT);
GET_INSTANCE_PROC(DestroyDebugReportCallbackEXT); 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 // Vulkan 1.1 is not required to report promoted extensions from 1.0 and is not required to
@ -278,12 +286,6 @@ namespace dawn_native { namespace vulkan {
GET_DEVICE_PROC(UpdateDescriptorSets); GET_DEVICE_PROC(UpdateDescriptorSets);
GET_DEVICE_PROC(WaitForFences); 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)) { if (deviceInfo.HasExt(DeviceExt::ExternalMemoryFD)) {
GET_DEVICE_PROC(GetMemoryFdKHR); GET_DEVICE_PROC(GetMemoryFdKHR);
GET_DEVICE_PROC(GetMemoryFdPropertiesKHR); GET_DEVICE_PROC(GetMemoryFdPropertiesKHR);

View File

@ -70,10 +70,18 @@ namespace dawn_native { namespace vulkan {
// device is created. // device is created.
PFN_vkDestroyDevice DestroyDevice = nullptr; PFN_vkDestroyDevice DestroyDevice = nullptr;
// VK_EXT_debug_report // VK_EXT_debug_utils
PFN_vkCreateDebugReportCallbackEXT CreateDebugReportCallbackEXT = nullptr; PFN_vkCmdBeginDebugUtilsLabelEXT CmdBeginDebugUtilsLabelEXT = nullptr;
PFN_vkDebugReportMessageEXT DebugReportMessageEXT = nullptr; PFN_vkCmdEndDebugUtilsLabelEXT CmdEndDebugUtilsLabelEXT = nullptr;
PFN_vkDestroyDebugReportCallbackEXT DestroyDebugReportCallbackEXT = 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 // VK_KHR_surface
PFN_vkDestroySurfaceKHR DestroySurfaceKHR = nullptr; PFN_vkDestroySurfaceKHR DestroySurfaceKHR = nullptr;
@ -254,11 +262,6 @@ namespace dawn_native { namespace vulkan {
PFN_vkUpdateDescriptorSets UpdateDescriptorSets = nullptr; PFN_vkUpdateDescriptorSets UpdateDescriptorSets = nullptr;
PFN_vkWaitForFences WaitForFences = nullptr; PFN_vkWaitForFences WaitForFences = nullptr;
// VK_EXT_debug_marker
PFN_vkCmdDebugMarkerBeginEXT CmdDebugMarkerBeginEXT = nullptr;
PFN_vkCmdDebugMarkerEndEXT CmdDebugMarkerEndEXT = nullptr;
PFN_vkCmdDebugMarkerInsertEXT CmdDebugMarkerInsertEXT = nullptr;
// VK_KHR_swapchain // VK_KHR_swapchain
PFN_vkCreateSwapchainKHR CreateSwapchainKHR = nullptr; PFN_vkCreateSwapchainKHR CreateSwapchainKHR = nullptr;
PFN_vkDestroySwapchainKHR DestroySwapchainKHR = nullptr; PFN_vkDestroySwapchainKHR DestroySwapchainKHR = nullptr;