mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-12-15 10:37:01 +00:00
immediately issue link call as well
This commit is contained in:
parent
7a4c539a00
commit
069fe64aa0
1 changed files with 15 additions and 9 deletions
|
|
@ -116,6 +116,13 @@ RendererShaderGL::RendererShaderGL(ShaderType type, uint64 baseHash, uint64 auxH
|
||||||
glObjectLabel(GL_SHADER, m_shader_object, objNameStr.size(), objNameStr.c_str());
|
glObjectLabel(GL_SHADER, m_shader_object, objNameStr.size(), objNameStr.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_program = glCreateProgram();
|
||||||
|
glProgramParameteri(m_program, GL_PROGRAM_SEPARABLE, GL_TRUE);
|
||||||
|
glProgramParameteri(m_program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
|
||||||
|
glAttachShader(m_program, m_shader_object);
|
||||||
|
m_shader_attached = true;
|
||||||
|
glLinkProgram(m_program);
|
||||||
|
|
||||||
// we can throw away the GLSL code to conserve RAM
|
// we can throw away the GLSL code to conserve RAM
|
||||||
m_glslSource.clear();
|
m_glslSource.clear();
|
||||||
m_glslSource.shrink_to_fit();
|
m_glslSource.shrink_to_fit();
|
||||||
|
|
@ -153,9 +160,12 @@ bool RendererShaderGL::IsCompiled()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLint isShaderComplete = 0;
|
GLint isShaderComplete = 0, isProgramComplete = 0;
|
||||||
glGetShaderiv(m_shader_object, GL_COMPLETION_STATUS_ARB, &isShaderComplete);
|
glGetShaderiv(m_shader_object, GL_COMPLETION_STATUS_ARB, &isShaderComplete);
|
||||||
if (isShaderComplete)
|
if(!isShaderComplete)
|
||||||
|
return false;
|
||||||
|
glGetProgramiv(m_program, GL_COMPLETION_STATUS_ARB, &isProgramComplete);
|
||||||
|
if (isProgramComplete)
|
||||||
WaitForCompiled(); // since COMPLETION_STATUS == true, this should be very fast
|
WaitForCompiled(); // since COMPLETION_STATUS == true, this should be very fast
|
||||||
return m_isCompiled;
|
return m_isCompiled;
|
||||||
}
|
}
|
||||||
|
|
@ -186,17 +196,13 @@ bool RendererShaderGL::WaitForCompiled()
|
||||||
|
|
||||||
if (m_shader_object != 0)
|
if (m_shader_object != 0)
|
||||||
glDeleteShader(m_shader_object);
|
glDeleteShader(m_shader_object);
|
||||||
|
if (m_program != 0)
|
||||||
|
glDeleteProgram(m_program);
|
||||||
|
m_program = m_shader_object = 0;
|
||||||
m_isCompiled = true;
|
m_isCompiled = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_program = glCreateProgram();
|
|
||||||
glProgramParameteri(m_program, GL_PROGRAM_SEPARABLE, GL_TRUE);
|
|
||||||
glProgramParameteri(m_program, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
|
|
||||||
glAttachShader(m_program, m_shader_object);
|
|
||||||
m_shader_attached = true;
|
|
||||||
glLinkProgram(m_program);
|
|
||||||
|
|
||||||
// get shader binary
|
// get shader binary
|
||||||
GLint linkStatus = GL_FALSE;
|
GLint linkStatus = GL_FALSE;
|
||||||
glGetProgramiv(m_program, GL_LINK_STATUS, &linkStatus);
|
glGetProgramiv(m_program, GL_LINK_STATUS, &linkStatus);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue