diff options
| author | 2019-01-13 22:12:23 -0300 | |
|---|---|---|
| committer | 2019-02-06 22:20:57 -0300 | |
| commit | 8b113686712d4418fdd2e5898ee25d8919b118db (patch) | |
| tree | 5ac5ac6d299ad574c26ba038ebc4c8b217ef32f8 /src | |
| parent | rasterizer_interface: Add disk cache entry for the rasterizer (diff) | |
| download | yuzu-8b113686712d4418fdd2e5898ee25d8919b118db.tar.gz yuzu-8b113686712d4418fdd2e5898ee25d8919b118db.tar.xz yuzu-8b113686712d4418fdd2e5898ee25d8919b118db.zip | |
gl_shader_util: Add parameter to handle retrievable programs
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_resource_manager.cpp | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_resource_manager.h | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_util.h | 5 |
3 files changed, 10 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.cpp b/src/video_core/renderer_opengl/gl_resource_manager.cpp index 4170cbd3c..bfe666a73 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.cpp +++ b/src/video_core/renderer_opengl/gl_resource_manager.cpp | |||
| @@ -71,7 +71,8 @@ void OGLShader::Release() { | |||
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shader, | 73 | void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shader, |
| 74 | const char* frag_shader, bool separable_program) { | 74 | const char* frag_shader, bool separable_program, |
| 75 | bool hint_retrievable) { | ||
| 75 | OGLShader vert, geo, frag; | 76 | OGLShader vert, geo, frag; |
| 76 | if (vert_shader) | 77 | if (vert_shader) |
| 77 | vert.Create(vert_shader, GL_VERTEX_SHADER); | 78 | vert.Create(vert_shader, GL_VERTEX_SHADER); |
| @@ -81,7 +82,7 @@ void OGLProgram::CreateFromSource(const char* vert_shader, const char* geo_shade | |||
| 81 | frag.Create(frag_shader, GL_FRAGMENT_SHADER); | 82 | frag.Create(frag_shader, GL_FRAGMENT_SHADER); |
| 82 | 83 | ||
| 83 | MICROPROFILE_SCOPE(OpenGL_ResourceCreation); | 84 | MICROPROFILE_SCOPE(OpenGL_ResourceCreation); |
| 84 | Create(separable_program, vert.handle, geo.handle, frag.handle); | 85 | Create(separable_program, hint_retrievable, vert.handle, geo.handle, frag.handle); |
| 85 | } | 86 | } |
| 86 | 87 | ||
| 87 | void OGLProgram::Release() { | 88 | void OGLProgram::Release() { |
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h index df76cbc4b..fbb93ee49 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.h +++ b/src/video_core/renderer_opengl/gl_resource_manager.h | |||
| @@ -101,15 +101,15 @@ public: | |||
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | template <typename... T> | 103 | template <typename... T> |
| 104 | void Create(bool separable_program, T... shaders) { | 104 | void Create(bool separable_program, bool hint_retrievable, T... shaders) { |
| 105 | if (handle != 0) | 105 | if (handle != 0) |
| 106 | return; | 106 | return; |
| 107 | handle = GLShader::LoadProgram(separable_program, shaders...); | 107 | handle = GLShader::LoadProgram(separable_program, hint_retrievable, shaders...); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | /// Creates a new internal OpenGL resource and stores the handle | 110 | /// Creates a new internal OpenGL resource and stores the handle |
| 111 | void CreateFromSource(const char* vert_shader, const char* geo_shader, const char* frag_shader, | 111 | void CreateFromSource(const char* vert_shader, const char* geo_shader, const char* frag_shader, |
| 112 | bool separable_program = false); | 112 | bool separable_program = false, bool hint_retrievable = false); |
| 113 | 113 | ||
| 114 | /// Deletes the internal OpenGL resource | 114 | /// Deletes the internal OpenGL resource |
| 115 | void Release(); | 115 | void Release(); |
diff --git a/src/video_core/renderer_opengl/gl_shader_util.h b/src/video_core/renderer_opengl/gl_shader_util.h index 285594f50..03b7548c2 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.h +++ b/src/video_core/renderer_opengl/gl_shader_util.h | |||
| @@ -47,7 +47,7 @@ GLuint LoadShader(const char* source, GLenum type); | |||
| 47 | * @returns Handle of the newly created OpenGL program object | 47 | * @returns Handle of the newly created OpenGL program object |
| 48 | */ | 48 | */ |
| 49 | template <typename... T> | 49 | template <typename... T> |
| 50 | GLuint LoadProgram(bool separable_program, T... shaders) { | 50 | GLuint LoadProgram(bool separable_program, bool hint_retrievable, T... shaders) { |
| 51 | // Link the program | 51 | // Link the program |
| 52 | LOG_DEBUG(Render_OpenGL, "Linking program..."); | 52 | LOG_DEBUG(Render_OpenGL, "Linking program..."); |
| 53 | 53 | ||
| @@ -58,6 +58,9 @@ GLuint LoadProgram(bool separable_program, T... shaders) { | |||
| 58 | if (separable_program) { | 58 | if (separable_program) { |
| 59 | glProgramParameteri(program_id, GL_PROGRAM_SEPARABLE, GL_TRUE); | 59 | glProgramParameteri(program_id, GL_PROGRAM_SEPARABLE, GL_TRUE); |
| 60 | } | 60 | } |
| 61 | if (hint_retrievable) { | ||
| 62 | glProgramParameteri(program_id, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE); | ||
| 63 | } | ||
| 61 | 64 | ||
| 62 | glLinkProgram(program_id); | 65 | glLinkProgram(program_id); |
| 63 | 66 | ||