diff options
| author | Stenzek <stenzek@gmail.com> | 2017-07-20 15:25:41 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2017-07-30 12:38:49 +1000 |
| commit | d23fd17e1a2c7c617731d619020af021a7658e93 (patch) | |
| tree | 493fe38e4abc720f98f9de83e603d87d7076ca50 /Source/Core/VideoBackends/Vulkan/VulkanContext.cpp | |
| parent | 416afa065ce635d1fc9618542b02dd8f24a5f42b (diff) | |
Vulkan: Use VK_NV_glsl extension where available, and skip glslang
Seems to produce faster ubershaders, at least.
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/VulkanContext.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Vulkan/VulkanContext.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp index 8978cd2df6..8ab3245455 100644 --- a/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp +++ b/Source/Core/VideoBackends/Vulkan/VulkanContext.cpp @@ -397,7 +397,8 @@ bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool e for (const auto& extension_properties : available_extension_list) INFO_LOG(VIDEO, "Available extension: %s", extension_properties.extensionName); - auto CheckForExtension = [&](const char* name, bool required) -> bool { + auto CheckForExtension = [&](const char* name, bool required, + bool* has_extension = nullptr) -> bool { if (std::find_if(available_extension_list.begin(), available_extension_list.end(), [&](const VkExtensionProperties& properties) { return !strcmp(name, properties.extensionName); @@ -405,9 +406,14 @@ bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool e { INFO_LOG(VIDEO, "Enabling extension: %s", name); extension_list->push_back(name); + if (has_extension) + *has_extension = true; return true; } + if (has_extension) + *has_extension = false; + if (required) { ERROR_LOG(VIDEO, "Vulkan: Missing required extension %s.", name); @@ -420,6 +426,7 @@ bool VulkanContext::SelectDeviceExtensions(ExtensionList* extension_list, bool e if (enable_surface && !CheckForExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME, true)) return false; + CheckForExtension(VK_NV_GLSL_SHADER_EXTENSION_NAME, false, &m_supports_nv_glsl_extension); return true; } |
