diff options
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_cache.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index f4e99e5f4..ccb8b4805 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp @@ -94,6 +94,10 @@ CachedShader::CachedShader(VAddr addr, Maxwell::ShaderProgram program_type) // Store shader's code to lazily build it on draw geometry_programs.code = program_result.first; } + + if (program_type == Maxwell::ShaderProgram::Fragment) { + SaveAlphaTestingLocations(); + } } GLuint CachedShader::GetProgramResourceIndex(const GLShader::ConstBufferEntry& buffer) { @@ -134,16 +138,20 @@ GLuint CachedShader::LazyGeometryProgram(OGLProgram& target_program, return target_program.handle; }; -GLint CachedShader::GetAlphaTestingEnableLocation() { - return glGetUniformLocation(program.handle, "alpha_testing_enable"); -} - -GLint CachedShader::GetAlphaTestingFuncLocation() { - return glGetUniformLocation(program.handle, "alpha_testing_func"); +void CachedShader::SetAlphaTesting(const bool enable, const float ref, const u32 func) { + if (program_type == Maxwell::ShaderProgram::Fragment) { + glProgramUniform1ui(program.handle, alpha_test.enable_loc, + (enable ? 1 : 0)); + glProgramUniform1f(program.handle, alpha_test.ref_loc, + ref); + glProgramUniform1ui(program.handle, alpha_test.func_loc, func); + } } -GLint CachedShader::GetAlphaTestingRefLocation() { - return glGetUniformLocation(program.handle, "alpha_testing_ref"); +void CachedShader::SaveAlphaTestingLocations() { + alpha_test.enable_loc = glGetUniformLocation(program.handle, "alpha_testing_enable"); + alpha_test.ref_loc = glGetUniformLocation(program.handle, "alpha_testing_ref"); + alpha_test.func_loc = glGetUniformLocation(program.handle, "alpha_testing_func"); } Shader ShaderCacheOpenGL::GetStageProgram(Maxwell::ShaderProgram program) { |