From 4c860ddb7080b3ab3ad54057c3bffd6766cd77cd Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 4 Dec 2016 00:23:30 +1000 Subject: Vulkan: Fix typo in PopulateBackendInfoMultisampleModes --- Source/Core/VideoBackends/Vulkan/VulkanContext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp index 8a732c5983..59bc2d6f74 100644 --- a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp +++ b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp @@ -294,7 +294,7 @@ void VulkanContext::PopulateBackendInfoMultisampleModes( VkSampleCountFlags supported_sample_counts = properties.limits.framebufferColorSampleCounts & properties.limits.framebufferDepthSampleCounts & efb_color_properties.sampleCounts & - efb_color_properties.sampleCounts; + efb_depth_properties.sampleCounts; // No AA config->backend_info.AAModes.clear(); -- cgit v1.2.3 From 4e9018049ddefff9d83eacd2a05579e82aeff36f Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 4 Dec 2016 19:36:48 +1000 Subject: 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. --- Source/Core/VideoBackends/Vulkan/VulkanContext.cpp | 24 ++++++++++------------ 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp index 59bc2d6f74..c10243af73 100644 --- a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp +++ b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp @@ -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::Create(VkInstance instance, VkPhysicalDevice gpu, VkSurfaceKHR surface, VideoConfig* config, + bool enable_debug_reports, bool enable_validation_layer) { std::unique_ptr context = std::make_unique(instance, gpu); @@ -338,8 +340,8 @@ std::unique_ptr VulkanContext::Create(VkInstance instance, VkPhys static_cast(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::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; -- cgit v1.2.3 From 8f97a2490488a8d55f8d306e302d7821fa1d4c18 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 4 Dec 2016 20:53:49 +1000 Subject: Vulkan: Enable GS instancing --- Source/Core/VideoBackends/Vulkan/VulkanContext.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp index c10243af73..e3fe3ff799 100644 --- a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp +++ b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp @@ -268,10 +268,10 @@ void VulkanContext::PopulateBackendInfoFeatures(VideoConfig* config, VkPhysicalD // Disable geometry shader when shaderTessellationAndGeometryPointSize is not supported. // Seems this is needed for gl_Layer. if (!features.shaderTessellationAndGeometryPointSize) + { config->backend_info.bSupportsGeometryShaders = VK_FALSE; - - // TODO: Investigate if there's a feature we can enable for GS instancing. - config->backend_info.bSupportsGSInstancing = VK_FALSE; + config->backend_info.bSupportsGSInstancing = VK_FALSE; + } // Depth clamping implies shaderClipDistance and depthClamp config->backend_info.bSupportsDepthClamp = -- cgit v1.2.3