summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorScott Mansell <phiren@gmail.com>2016-06-26 21:55:22 +1200
committerGitHub <noreply@github.com>2016-06-26 21:55:22 +1200
commitee9e3432cb980ff75b40b40b9f5729fa25a68fc2 (patch)
treeae43d36c26ba467b96847c8f0ed16af2a069a0f2 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parent2776bcbf55ccc256fd7b43008ee4349d59739cff (diff)
parent2f134c5c36c3a9c3c7a618635d98d0bf2191b9f2 (diff)
Merge pull request #3513 from phire/make_hdkr_happy
Get shadergen ready for Multithreadded generation of shaders.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp41
1 files changed, 8 insertions, 33 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 9ec9684224..58bd6c2a7b 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -36,9 +36,6 @@ static GLuint CurrentProgram = 0;
ProgramShaderCache::PCache ProgramShaderCache::pshaders;
ProgramShaderCache::PCacheEntry* ProgramShaderCache::last_entry;
SHADERUID ProgramShaderCache::last_uid;
-UidChecker<PixelShaderUid, ShaderCode> ProgramShaderCache::pixel_uid_checker;
-UidChecker<VertexShaderUid, ShaderCode> ProgramShaderCache::vertex_uid_checker;
-UidChecker<GeometryShaderUid, ShaderCode> ProgramShaderCache::geometry_uid_checker;
static std::string s_glsl_header = "";
@@ -209,19 +206,12 @@ SHADER* ProgramShaderCache::SetShader(DSTALPHA_MODE dstAlphaMode, u32 primitive_
last_entry = &newentry;
newentry.in_cache = 0;
- ShaderCode vcode = GenerateVertexShaderCode(API_OPENGL);
- ShaderCode pcode = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL);
+ ShaderCode vcode = GenerateVertexShaderCode(API_OPENGL, uid.vuid.GetUidData());
+ ShaderCode pcode = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL, uid.puid.GetUidData());
ShaderCode gcode;
if (g_ActiveConfig.backend_info.bSupportsGeometryShaders &&
!uid.guid.GetUidData()->IsPassthrough())
- gcode = GenerateGeometryShaderCode(primitive_type, API_OPENGL);
-
- if (g_ActiveConfig.bEnableShaderDebugging)
- {
- newentry.shader.strvprog = vcode.GetBuffer();
- newentry.shader.strpprog = pcode.GetBuffer();
- newentry.shader.strgprog = gcode.GetBuffer();
- }
+ gcode = GenerateGeometryShaderCode(API_OPENGL, uid.guid.GetUidData());
#if defined(_DEBUG) || defined(DEBUGFAST)
if (g_ActiveConfig.iLog & CONF_SAVESHADERS)
@@ -397,21 +387,9 @@ GLuint ProgramShaderCache::CompileSingleShader(GLuint type, const std::string& c
void ProgramShaderCache::GetShaderId(SHADERUID* uid, DSTALPHA_MODE dstAlphaMode, u32 primitive_type)
{
- uid->puid = GetPixelShaderUid(dstAlphaMode, API_OPENGL);
- uid->vuid = GetVertexShaderUid(API_OPENGL);
- uid->guid = GetGeometryShaderUid(primitive_type, API_OPENGL);
-
- if (g_ActiveConfig.bEnableShaderDebugging)
- {
- ShaderCode pcode = GeneratePixelShaderCode(dstAlphaMode, API_OPENGL);
- pixel_uid_checker.AddToIndexAndCheck(pcode, uid->puid, "Pixel", "p");
-
- ShaderCode vcode = GenerateVertexShaderCode(API_OPENGL);
- vertex_uid_checker.AddToIndexAndCheck(vcode, uid->vuid, "Vertex", "v");
-
- ShaderCode gcode = GenerateGeometryShaderCode(primitive_type, API_OPENGL);
- geometry_uid_checker.AddToIndexAndCheck(gcode, uid->guid, "Geometry", "g");
- }
+ uid->puid = GetPixelShaderUid(dstAlphaMode);
+ uid->vuid = GetVertexShaderUid();
+ uid->guid = GetGeometryShaderUid(primitive_type);
}
ProgramShaderCache::PCacheEntry ProgramShaderCache::GetShaderProgram()
@@ -436,7 +414,7 @@ void ProgramShaderCache::Init()
s_buffer = StreamBuffer::Create(GL_UNIFORM_BUFFER, UBO_LENGTH);
// Read our shader cache, only if supported
- if (g_ogl_config.bSupportsGLSLCache && !g_Config.bEnableShaderDebugging)
+ if (g_ogl_config.bSupportsGLSLCache)
{
GLint Supported;
glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &Supported);
@@ -470,7 +448,7 @@ void ProgramShaderCache::Init()
void ProgramShaderCache::Shutdown()
{
// store all shaders in cache on disk
- if (g_ogl_config.bSupportsGLSLCache && !g_Config.bEnableShaderDebugging)
+ if (g_ogl_config.bSupportsGLSLCache)
{
for (auto& entry : pshaders)
{
@@ -516,9 +494,6 @@ void ProgramShaderCache::Shutdown()
}
pshaders.clear();
- pixel_uid_checker.Invalidate();
- vertex_uid_checker.Invalidate();
-
s_buffer.reset();
}