Browse Source

gl_shader_util: Add parameter to handle retrievable programs

pull/15/merge
ReinUsesLisp 7 years ago
parent
commit
8b11368671
  1. 5
      src/video_core/renderer_opengl/gl_resource_manager.cpp
  2. 6
      src/video_core/renderer_opengl/gl_resource_manager.h
  3. 5
      src/video_core/renderer_opengl/gl_shader_util.h

5
src/video_core/renderer_opengl/gl_resource_manager.cpp

@ -71,7 +71,8 @@ void OGLShader::Release() {
} }
void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shader, void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shader,
const char* frag_shader, bool separable_program) {
const char* frag_shader, bool separable_program,
bool hint_retrievable) {
OGLShader vert, geo, frag; OGLShader vert, geo, frag;
if (vert_shader) if (vert_shader)
vert.Create(vert_shader, GL_VERTEX_SHADER); vert.Create(vert_shader, GL_VERTEX_SHADER);
@ -81,7 +82,7 @@ void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shade
frag.Create(frag_shader, GL_FRAGMENT_SHADER); frag.Create(frag_shader, GL_FRAGMENT_SHADER);
MICROPROFILE_SCOPE(OpenGL_ResourceCreation); MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
Create(separable_program, vert.handle, geo.handle, frag.handle);
Create(separable_program, hint_retrievable, vert.handle, geo.handle, frag.handle);
} }
void OGLProgram::Release() { void OGLProgram::Release() {

6
src/video_core/renderer_opengl/gl_resource_manager.h

@ -101,15 +101,15 @@ public:
} }
template <typename... T> template <typename... T>
void Create(bool separable_program, T... shaders) {
void Create(bool separable_program, bool hint_retrievable, T... shaders) {
if (handle != 0) if (handle != 0)
return; return;
handle = GLShader::LoadProgram(separable_program, shaders...);
handle = GLShader::LoadProgram(separable_program, hint_retrievable, shaders...);
} }
/// Creates a new internal OpenGL resource and stores the handle /// Creates a new internal OpenGL resource and stores the handle
void CreateFromSource(const char* vert_shader, const char* geo_shader, const char* frag_shader, void CreateFromSource(const char* vert_shader, const char* geo_shader, const char* frag_shader,
bool separable_program = false);
bool separable_program = false, bool hint_retrievable = false);
/// Deletes the internal OpenGL resource /// Deletes the internal OpenGL resource
void Release(); void Release();

5
src/video_core/renderer_opengl/gl_shader_util.h

@ -47,7 +47,7 @@ GLuint LoadShader(const char* source, GLenum type);
* @returns Handle of the newly created OpenGL program object * @returns Handle of the newly created OpenGL program object
*/ */
template <typename... T> template <typename... T>
GLuint LoadProgram(bool separable_program, T... shaders) {
GLuint LoadProgram(bool separable_program, bool hint_retrievable, T... shaders) {
// Link the program // Link the program
LOG_DEBUG(Render_OpenGL, "Linking program..."); LOG_DEBUG(Render_OpenGL, "Linking program...");
@ -58,6 +58,9 @@ GLuint LoadProgram(bool separable_program, T... shaders) {
if (separable_program) { if (separable_program) {
glProgramParameteri(program_id, GL_PROGRAM_SEPARABLE, GL_TRUE); glProgramParameteri(program_id, GL_PROGRAM_SEPARABLE, GL_TRUE);
} }
if (hint_retrievable) {
glProgramParameteri(program_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
}
glLinkProgram(program_id); glLinkProgram(program_id);

Loading…
Cancel
Save