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:
parent
55af59b47f
commit
f83df90fae
|
@ -33,7 +33,7 @@ Unfortunately, PIX's UI does does not lend itself to capturing single frame appl
|
|||
|
||||
## 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.
|
||||
|
||||
|
|
|
@ -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 @@ constexpr char kVulkanLibName[] = "libvulkan.so";
|
|||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
// 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 @@ namespace dawn_native { namespace vulkan {
|
|||
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) {
|
||||
|
|
|
@ -40,23 +40,14 @@ namespace dawn_native { namespace vulkan {
|
|||
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;
|
||||
};
|
||||
|
|
|
@ -743,18 +743,19 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -187,6 +187,10 @@ namespace dawn_native { namespace vulkan {
|
|||
return mDeviceInfo;
|
||||
}
|
||||
|
||||
const VulkanGlobalInfo& Device::GetGlobalInfo() const {
|
||||
return ToBackend(GetAdapter())->GetBackend()->GetGlobalInfo();
|
||||
}
|
||||
|
||||
VkDevice Device::GetVkDevice() const {
|
||||
return mVkDevice;
|
||||
}
|
||||
|
|
|
@ -52,6 +52,7 @@ namespace dawn_native { namespace vulkan {
|
|||
|
||||
VkInstance GetVkInstance() const;
|
||||
const VulkanDeviceInfo& GetDeviceInfo() const;
|
||||
const VulkanGlobalInfo& GetGlobalInfo() const;
|
||||
VkDevice GetVkDevice() const;
|
||||
uint32_t GetGraphicsQueueFamily() const;
|
||||
VkQueue GetQueue() const;
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace dawn_native { namespace vulkan {
|
|||
{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 @@ namespace dawn_native { namespace vulkan {
|
|||
switch (ext) {
|
||||
case InstanceExt::GetPhysicalDeviceProperties2:
|
||||
case InstanceExt::Surface:
|
||||
case InstanceExt::DebugReport:
|
||||
case InstanceExt::DebugUtils:
|
||||
hasDependencies = true;
|
||||
break;
|
||||
|
||||
|
@ -161,7 +161,6 @@ namespace dawn_native { namespace vulkan {
|
|||
{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 @@ namespace dawn_native { namespace vulkan {
|
|||
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) &&
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace dawn_native { namespace vulkan {
|
|||
XlibSurface,
|
||||
|
||||
// Others
|
||||
DebugReport,
|
||||
DebugUtils,
|
||||
|
||||
EnumCount,
|
||||
};
|
||||
|
@ -99,7 +99,6 @@ namespace dawn_native { namespace vulkan {
|
|||
ExternalSemaphoreZirconHandle,
|
||||
|
||||
// Others
|
||||
DebugMarker,
|
||||
ImageDrmFormatModifier,
|
||||
Swapchain,
|
||||
SubgroupSizeControl,
|
||||
|
|
|
@ -74,10 +74,18 @@ namespace dawn_native { namespace vulkan {
|
|||
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 @@ namespace dawn_native { namespace vulkan {
|
|||
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);
|
||||
|
|
|
@ -70,10 +70,18 @@ namespace dawn_native { namespace vulkan {
|
|||
// 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 @@ namespace dawn_native { namespace vulkan {
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue