aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/video_core/rasterizer.cpp
diff options
context:
space:
mode:
authorGravatar bunnei <bunneidev@gmail.com>2015-01-25 23:34:14 -0500
committerGravatar bunnei <bunneidev@gmail.com>2015-01-25 23:34:14 -0500
commitff83d23ed5a2b204a6768e853329204cb1dd1bd3 (patch)
tree464bf8822bd09f9cc2e6a9d23e95cacf882459d7 /src/video_core/rasterizer.cpp
parentad666ac47a03f63aa7c2b5ecfe9a7d76c6a033d2 (diff)
GPU: Implement the remaining depth testing functions.
Diffstat (limited to 'src/video_core/rasterizer.cpp')
-rw-r--r--src/video_core/rasterizer.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp
index 025d4e48..219a1bbb 100644
--- a/src/video_core/rasterizer.cpp
+++ b/src/video_core/rasterizer.cpp
@@ -441,18 +441,38 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0,
bool pass = false;
switch (registers.output_merger.depth_test_func) {
+ case registers.output_merger.Never:
+ pass = false;
+ break;
+
case registers.output_merger.Always:
pass = true;
break;
+ case registers.output_merger.Equal:
+ pass = z == ref_z;
+ break;
+
+ case registers.output_merger.NotEqual:
+ pass = z != ref_z;
+ break;
+
case registers.output_merger.LessThan:
pass = z < ref_z;
break;
+ case registers.output_merger.LessThanOrEqual:
+ pass = z <= ref_z;
+ break;
+
case registers.output_merger.GreaterThan:
pass = z > ref_z;
break;
+ case registers.output_merger.GreaterThanOrEqual:
+ pass = z >= ref_z;
+ break;
+
default:
LOG_ERROR(HW_GPU, "Unknown depth test function %x", registers.output_merger.depth_test_func.Value());
break;