mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-21 12:05:23 +00:00
vk: Avoid constantly reinitializing the SH context when compiling SPIRV. Speedup
This commit is contained in:
parent
5f180e0b30
commit
6013b0782e
3 changed files with 21 additions and 6 deletions
|
@ -6,6 +6,8 @@
|
|||
|
||||
namespace vk
|
||||
{
|
||||
static TBuiltInResource g_default_config;
|
||||
|
||||
std::string getFloatTypeNameImpl(size_t elementCount)
|
||||
{
|
||||
switch (elementCount)
|
||||
|
@ -273,20 +275,16 @@ namespace vk
|
|||
{
|
||||
EShLanguage lang = (domain == glsl::glsl_fragment_program) ? EShLangFragment : EShLangVertex;
|
||||
|
||||
glslang::InitializeProcess();
|
||||
glslang::TProgram program;
|
||||
glslang::TShader shader_object(lang);
|
||||
|
||||
bool success = false;
|
||||
const char *shader_text = shader.data();
|
||||
|
||||
TBuiltInResource rsc;
|
||||
init_default_resources(rsc);
|
||||
|
||||
shader_object.setStrings(&shader_text, 1);
|
||||
|
||||
EShMessages msg = (EShMessages)(EShMsgVulkanRules | EShMsgSpvRules);
|
||||
if (shader_object.parse(&rsc, 400, EProfile::ECoreProfile, false, true, msg))
|
||||
if (shader_object.parse(&g_default_config, 400, EProfile::ECoreProfile, false, true, msg))
|
||||
{
|
||||
program.addShader(&shader_object);
|
||||
success = program.link(EShMsgVulkanRules);
|
||||
|
@ -302,7 +300,17 @@ namespace vk
|
|||
LOG_ERROR(RSX, "%s", shader_object.getInfoDebugLog());
|
||||
}
|
||||
|
||||
glslang::FinalizeProcess();
|
||||
return success;
|
||||
}
|
||||
|
||||
void initialize_compiler_context()
|
||||
{
|
||||
glslang::InitializeProcess();
|
||||
init_default_resources(g_default_config);
|
||||
}
|
||||
|
||||
void finalize_compiler_context()
|
||||
{
|
||||
glslang::FinalizeProcess();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,4 +17,7 @@ namespace vk
|
|||
|
||||
const varying_register_t& get_varying_register(const std::string& name);
|
||||
bool compile_glsl_to_spv(std::string& shader, glsl::program_domain domain, std::vector<u32> &spv);
|
||||
|
||||
void initialize_compiler_context();
|
||||
void finalize_compiler_context();
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "../rsx_utils.h"
|
||||
#include "../Common/BufferUtils.h"
|
||||
#include "VKFormats.h"
|
||||
#include "VKCommonDecompiler.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -1019,11 +1020,14 @@ void VKGSRender::on_init_thread()
|
|||
|
||||
GSRender::on_init_thread();
|
||||
rsx_thread = std::this_thread::get_id();
|
||||
|
||||
vk::initialize_compiler_context();
|
||||
}
|
||||
|
||||
void VKGSRender::on_exit()
|
||||
{
|
||||
m_texture_cache.destroy();
|
||||
vk::finalize_compiler_context();
|
||||
|
||||
return GSRender::on_exit();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue