mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
OGL: Store shader source in OGLShader
So it can be dumped with info log when linking fails.
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user