diff options
author | Subv <subv2112@gmail.com> | 2015-12-02 19:23:51 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2016-06-28 06:14:13 +0200 |
commit | f9be06b15f08cb559580e1d19b43158640a37d67 (patch) | |
tree | 9b20e75d7ef02e0feac2be0cb96843ebbb6814f8 /src/video_core/renderer_opengl/gl_shader_gen.cpp | |
parent | Merge pull request #1930 from scurest/superfluous-moves (diff) | |
download | yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar.gz yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar.bz2 yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar.lz yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar.xz yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.tar.zst yuzu-f9be06b15f08cb559580e1d19b43158640a37d67.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_gen.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 3bace7f01..10bb44210 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -539,6 +539,8 @@ in float texcoord0_w; in vec4 normquat; in vec3 view; +in vec4 gl_FragCoord; + out vec4 color; struct LightSrc { @@ -555,6 +557,10 @@ layout (std140) uniform shader_data { int alphatest_ref; float depth_scale; float depth_offset; + int scissor_right; + int scissor_bottom; + int scissor_left; + int scissor_top; vec3 fog_color; vec3 lighting_global_ambient; LightSrc light_src[NUM_LIGHTS]; @@ -582,6 +588,16 @@ vec4 secondary_fragment_color = vec4(0.0); return out; } + // Append the scissor test + if (state.scissor_test_mode == Regs::ScissorMode::Include || state.scissor_test_mode == Regs::ScissorMode::Exclude) { + out += "if (scissor_left <= scissor_right || scissor_top <= scissor_bottom) discard;\n"; + out += "if ("; + // Negate the condition if we have to keep only the pixels outside the scissor box + if (state.scissor_test_mode == Regs::ScissorMode::Include) + out += "!"; + out += "(gl_FragCoord.x >= scissor_right && gl_FragCoord.x <= scissor_left && gl_FragCoord.y >= scissor_bottom && gl_FragCoord.y <= scissor_top)) discard;\n"; + } + out += "float z_over_w = 1.0 - gl_FragCoord.z * 2.0;\n"; out += "float depth = z_over_w * depth_scale + depth_offset;\n"; if (state.depthmap_enable == Pica::Regs::DepthBuffering::WBuffering) { |