From d23fd17e1a2c7c617731d619020af021a7658e93 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 20 Jul 2017 15:25:41 +1000 Subject: Vulkan: Use VK_NV_glsl extension where available, and skip glslang Seems to produce faster ubershaders, at least. --- Source/Core/VideoBackends/Vulkan/Util.cpp | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/Util.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/Util.cpp b/Source/Core/VideoBackends/Vulkan/Util.cpp index dd676d0b6c..5ab32b5a25 100644 --- a/Source/Core/VideoBackends/Vulkan/Util.cpp +++ b/Source/Core/VideoBackends/Vulkan/Util.cpp @@ -275,50 +275,38 @@ VkShaderModule CreateShaderModule(const u32* spv, size_t spv_word_count) return module; } -VkShaderModule CompileAndCreateVertexShader(const std::string& source_code, bool prepend_header) +VkShaderModule CompileAndCreateVertexShader(const std::string& source_code) { ShaderCompiler::SPIRVCodeVector code; - if (!ShaderCompiler::CompileVertexShader(&code, source_code.c_str(), source_code.length(), - prepend_header)) - { + if (!ShaderCompiler::CompileVertexShader(&code, source_code.c_str(), source_code.length())) return VK_NULL_HANDLE; - } return CreateShaderModule(code.data(), code.size()); } -VkShaderModule CompileAndCreateGeometryShader(const std::string& source_code, bool prepend_header) +VkShaderModule CompileAndCreateGeometryShader(const std::string& source_code) { ShaderCompiler::SPIRVCodeVector code; - if (!ShaderCompiler::CompileGeometryShader(&code, source_code.c_str(), source_code.length(), - prepend_header)) - { + if (!ShaderCompiler::CompileGeometryShader(&code, source_code.c_str(), source_code.length())) return VK_NULL_HANDLE; - } return CreateShaderModule(code.data(), code.size()); } -VkShaderModule CompileAndCreateFragmentShader(const std::string& source_code, bool prepend_header) +VkShaderModule CompileAndCreateFragmentShader(const std::string& source_code) { ShaderCompiler::SPIRVCodeVector code; - if (!ShaderCompiler::CompileFragmentShader(&code, source_code.c_str(), source_code.length(), - prepend_header)) - { + if (!ShaderCompiler::CompileFragmentShader(&code, source_code.c_str(), source_code.length())) return VK_NULL_HANDLE; - } return CreateShaderModule(code.data(), code.size()); } -VkShaderModule CompileAndCreateComputeShader(const std::string& source_code, bool prepend_header) +VkShaderModule CompileAndCreateComputeShader(const std::string& source_code) { ShaderCompiler::SPIRVCodeVector code; - if (!ShaderCompiler::CompileComputeShader(&code, source_code.c_str(), source_code.length(), - prepend_header)) - { + if (!ShaderCompiler::CompileComputeShader(&code, source_code.c_str(), source_code.length())) return VK_NULL_HANDLE; - } return CreateShaderModule(code.data(), code.size()); } -- cgit v1.2.3 From aff44684a4b904974b2d01ba604976f4baac000e Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 20 Jul 2017 15:25:33 +1000 Subject: Vulkan: Move shader/pipeline-related methods to ShaderCache --- Source/Core/VideoBackends/Vulkan/Util.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoBackends/Vulkan/Util.cpp') diff --git a/Source/Core/VideoBackends/Vulkan/Util.cpp b/Source/Core/VideoBackends/Vulkan/Util.cpp index 5ab32b5a25..f1f4f42b1b 100644 --- a/Source/Core/VideoBackends/Vulkan/Util.cpp +++ b/Source/Core/VideoBackends/Vulkan/Util.cpp @@ -12,6 +12,7 @@ #include "VideoBackends/Vulkan/CommandBufferManager.h" #include "VideoBackends/Vulkan/ObjectCache.h" +#include "VideoBackends/Vulkan/ShaderCache.h" #include "VideoBackends/Vulkan/ShaderCompiler.h" #include "VideoBackends/Vulkan/StateTracker.h" #include "VideoBackends/Vulkan/StreamBuffer.h" @@ -720,7 +721,7 @@ void UtilityShaderDraw::BindDescriptors() bool UtilityShaderDraw::BindPipeline() { - VkPipeline pipeline = g_object_cache->GetPipeline(m_pipeline_info); + VkPipeline pipeline = g_shader_cache->GetPipeline(m_pipeline_info); if (pipeline == VK_NULL_HANDLE) { PanicAlert("Failed to get pipeline for backend shader draw"); @@ -873,7 +874,7 @@ void ComputeShaderDispatcher::BindDescriptors() bool ComputeShaderDispatcher::BindPipeline() { - VkPipeline pipeline = g_object_cache->GetComputePipeline(m_pipeline_info); + VkPipeline pipeline = g_shader_cache->GetComputePipeline(m_pipeline_info); if (pipeline == VK_NULL_HANDLE) { PanicAlert("Failed to get pipeline for backend compute dispatch"); -- cgit v1.2.3