diff options
| author | Stenzek <stenzek@gmail.com> | 2019-04-20 23:39:54 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-04-21 14:28:14 +1000 |
| commit | 5c95dc61fcc11126694bfb8c963dfe418bdaa692 (patch) | |
| tree | 9cf08222eb36b96a6447bd274a442f3d10430b1b /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | |
| parent | bbd1ae16db4932e4fb024d6feccb01bc52ed1d87 (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.cpp | 21 |
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; |
