mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 22:29:39 -06:00
Vulkan: Support logging debug reports without enabling validation layers
There is a caveat, Host GPU must be checked prior to starting the game, as we can't enable the extension at runtime without recreating the instance.
This commit is contained in:
@ -82,10 +82,11 @@ bool VulkanContext::CheckValidationLayerAvailablility()
|
||||
}) != layer_list.end());
|
||||
}
|
||||
|
||||
VkInstance VulkanContext::CreateVulkanInstance(bool enable_surface, bool enable_validation_layer)
|
||||
VkInstance VulkanContext::CreateVulkanInstance(bool enable_surface, bool enable_debug_report,
|
||||
bool enable_validation_layer)
|
||||
{
|
||||
ExtensionList enabled_extensions;
|
||||
if (!SelectInstanceExtensions(&enabled_extensions, enable_surface, enable_validation_layer))
|
||||
if (!SelectInstanceExtensions(&enabled_extensions, enable_surface, enable_debug_report))
|
||||
return VK_NULL_HANDLE;
|
||||
|
||||
VkApplicationInfo app_info = {};
|
||||
@ -127,7 +128,7 @@ VkInstance VulkanContext::CreateVulkanInstance(bool enable_surface, bool enable_
|
||||
}
|
||||
|
||||
bool VulkanContext::SelectInstanceExtensions(ExtensionList* extension_list, bool enable_surface,
|
||||
bool enable_validation_layer)
|
||||
bool enable_debug_report)
|
||||
{
|
||||
u32 extension_count = 0;
|
||||
VkResult res = vkEnumerateInstanceExtensionProperties(nullptr, &extension_count, nullptr);
|
||||
@ -192,8 +193,8 @@ bool VulkanContext::SelectInstanceExtensions(ExtensionList* extension_list, bool
|
||||
#endif
|
||||
|
||||
// VK_EXT_debug_report
|
||||
if (enable_validation_layer && !CheckForExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, true))
|
||||
return false;
|
||||
if (enable_debug_report && !CheckForExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME, true))
|
||||
WARN_LOG(VIDEO, "Vulkan: Debug report requested, but extension is not available.");
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -327,6 +328,7 @@ void VulkanContext::PopulateBackendInfoMultisampleModes(
|
||||
|
||||
std::unique_ptr<VulkanContext> VulkanContext::Create(VkInstance instance, VkPhysicalDevice gpu,
|
||||
VkSurfaceKHR surface, VideoConfig* config,
|
||||
bool enable_debug_reports,
|
||||
bool enable_validation_layer)
|
||||
{
|
||||
std::unique_ptr<VulkanContext> context = std::make_unique<VulkanContext>(instance, gpu);
|
||||
@ -338,8 +340,8 @@ std::unique_ptr<VulkanContext> VulkanContext::Create(VkInstance instance, VkPhys
|
||||
static_cast<double>(context->m_device_properties.driverVersion),
|
||||
DriverDetails::Family::UNKNOWN);
|
||||
|
||||
// Enable debug reports if validation layer is enabled.
|
||||
if (enable_validation_layer)
|
||||
// Enable debug reports if the "Host GPU" log category is enabled.
|
||||
if (enable_debug_reports)
|
||||
context->EnableDebugReports();
|
||||
|
||||
// Attempt to create the device.
|
||||
@ -358,8 +360,7 @@ std::unique_ptr<VulkanContext> VulkanContext::Create(VkInstance instance, VkPhys
|
||||
return context;
|
||||
}
|
||||
|
||||
bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool enable_surface,
|
||||
bool enable_validation_layer)
|
||||
bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool enable_surface)
|
||||
{
|
||||
u32 extension_count = 0;
|
||||
VkResult res =
|
||||
@ -405,9 +406,7 @@ bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool e
|
||||
};
|
||||
|
||||
if (enable_surface && !CheckForExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME, true))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -527,8 +526,7 @@ bool VulkanContext::CreateDevice(VkSurfaceKHR surface, bool enable_validation_la
|
||||
device_info.pQueueCreateInfos = &queue_info;
|
||||
|
||||
ExtensionList enabled_extensions;
|
||||
if (!SelectDeviceExtensions(&enabled_extensions, (surface != VK_NULL_HANDLE),
|
||||
enable_validation_layer))
|
||||
if (!SelectDeviceExtensions(&enabled_extensions, surface != VK_NULL_HANDLE))
|
||||
return false;
|
||||
|
||||
device_info.enabledLayerCount = 0;
|
||||
|
Reference in New Issue
Block a user