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
|
## 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.
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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) &&
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue