mirror of https://github.com/RPCS3/rpcs3.git
vk: Avoid constantly reinitializing the SH context when compiling SPIRV. Speedup
This commit is contained in:
parent
5f180e0b30
commit
6013b0782e
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
namespace vk
|
namespace vk
|
||||||
{
|
{
|
||||||
|
static TBuiltInResource g_default_config;
|
||||||
|
|
||||||
std::string getFloatTypeNameImpl(size_t elementCount)
|
std::string getFloatTypeNameImpl(size_t elementCount)
|
||||||
{
|
{
|
||||||
switch (elementCount)
|
switch (elementCount)
|
||||||
|
@ -273,20 +275,16 @@ namespace vk
|
||||||
{
|
{
|
||||||
EShLanguage lang = (domain == glsl::glsl_fragment_program) ? EShLangFragment : EShLangVertex;
|
EShLanguage lang = (domain == glsl::glsl_fragment_program) ? EShLangFragment : EShLangVertex;
|
||||||
|
|
||||||
glslang::InitializeProcess();
|
|
||||||
glslang::TProgram program;
|
glslang::TProgram program;
|
||||||
glslang::TShader shader_object(lang);
|
glslang::TShader shader_object(lang);
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
const char *shader_text = shader.data();
|
const char *shader_text = shader.data();
|
||||||
|
|
||||||
TBuiltInResource rsc;
|
|
||||||
init_default_resources(rsc);
|
|
||||||
|
|
||||||
shader_object.setStrings(&shader_text, 1);
|
shader_object.setStrings(&shader_text, 1);
|
||||||
|
|
||||||
EShMessages msg = (EShMessages)(EShMsgVulkanRules | EShMsgSpvRules);
|
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);
|
program.addShader(&shader_object);
|
||||||
success = program.link(EShMsgVulkanRules);
|
success = program.link(EShMsgVulkanRules);
|
||||||
|
@ -302,7 +300,17 @@ namespace vk
|
||||||
LOG_ERROR(RSX, "%s", shader_object.getInfoDebugLog());
|
LOG_ERROR(RSX, "%s", shader_object.getInfoDebugLog());
|
||||||
}
|
}
|
||||||
|
|
||||||
glslang::FinalizeProcess();
|
|
||||||
return success;
|
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);
|
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);
|
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 "../rsx_utils.h"
|
||||||
#include "../Common/BufferUtils.h"
|
#include "../Common/BufferUtils.h"
|
||||||
#include "VKFormats.h"
|
#include "VKFormats.h"
|
||||||
|
#include "VKCommonDecompiler.h"
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
@ -1019,11 +1020,14 @@ void VKGSRender::on_init_thread()
|
||||||
|
|
||||||
GSRender::on_init_thread();
|
GSRender::on_init_thread();
|
||||||
rsx_thread = std::this_thread::get_id();
|
rsx_thread = std::this_thread::get_id();
|
||||||
|
|
||||||
|
vk::initialize_compiler_context();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VKGSRender::on_exit()
|
void VKGSRender::on_exit()
|
||||||
{
|
{
|
||||||
m_texture_cache.destroy();
|
m_texture_cache.destroy();
|
||||||
|
vk::finalize_compiler_context();
|
||||||
|
|
||||||
return GSRender::on_exit();
|
return GSRender::on_exit();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue