summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2019-04-20 23:39:54 +1000
committerStenzek <stenzek@gmail.com>2019-04-21 14:28:14 +1000
commit5c95dc61fcc11126694bfb8c963dfe418bdaa692 (patch)
tree9cf08222eb36b96a6447bd274a442f3d10430b1b /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parentbbd1ae16db4932e4fb024d6feccb01bc52ed1d87 (diff)
OGL: Store shader source in OGLShader
So it can be dumped with info log when linking fails.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 6afdfd05a9..85084979c3 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -291,7 +291,7 @@ bool ProgramShaderCache::CompileComputeShader(SHADER& shader, const std::string&
// original shaders aren't needed any more
glDeleteShader(shader_id);
- if (!CheckProgramLinkResult(shader.glprogid, full_code, "", ""))
+ if (!CheckProgramLinkResult(shader.glprogid, &full_code, nullptr, nullptr))
{
shader.Destroy();
return false;
@@ -374,8 +374,8 @@ bool ProgramShaderCache::CheckShaderCompileResult(GLuint id, GLenum type, const
return true;
}
-bool ProgramShaderCache::CheckProgramLinkResult(GLuint id, const std::string& vcode,
- const std::string& pcode, const std::string& gcode)
+bool ProgramShaderCache::CheckProgramLinkResult(GLuint id, const std::string* vcode,
+ const std::string* pcode, const std::string* gcode)
{
GLint linkStatus;
glGetProgramiv(id, GL_LINK_STATUS, &linkStatus);
@@ -393,9 +393,13 @@ bool ProgramShaderCache::CheckProgramLinkResult(GLuint id, const std::string& vc
StringFromFormat("%sbad_p_%d.txt", File::GetUserPath(D_DUMP_IDX).c_str(), num_failures++);
std::ofstream file;
File::OpenFStream(file, filename, std::ios_base::out);
- file << s_glsl_header << vcode << s_glsl_header << pcode;
- if (!gcode.empty())
- file << s_glsl_header << gcode;
+ if (vcode)
+ file << s_glsl_header << *vcode << '\n';
+ if (gcode)
+ file << s_glsl_header << *gcode << '\n';
+ if (pcode)
+ file << s_glsl_header << *pcode << '\n';
+
file << info_log;
file.close();
@@ -573,7 +577,10 @@ PipelineProgram* ProgramShaderCache::GetPipelineProgram(const GLVertexFormat* ve
if (!s_is_shared_context && vao != s_last_VAO)
glBindVertexArray(s_last_VAO);
- if (!ProgramShaderCache::CheckProgramLinkResult(prog->shader.glprogid, {}, {}, {}))
+ if (!ProgramShaderCache::CheckProgramLinkResult(
+ prog->shader.glprogid, vertex_shader ? &vertex_shader->GetSource() : nullptr,
+ geometry_shader ? &geometry_shader->GetSource() : nullptr,
+ pixel_shader ? &pixel_shader->GetSource() : nullptr))
{
prog->shader.Destroy();
return nullptr;