summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_cache.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp24
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) {