GPU: Implement the remaining depth testing functions.

This commit is contained in:
bunnei 2015-01-25 23:34:14 -05:00
parent ad666ac47a
commit ff83d23ed5
2 changed files with 28 additions and 3 deletions

View file

@ -311,9 +311,14 @@ struct Regs {
struct {
enum DepthFunc : u32 {
Always = 1,
LessThan = 4,
GreaterThan = 6,
Never = 0,
Always = 1,
Equal = 2,
NotEqual = 3,
LessThan = 4,
LessThanOrEqual = 5,
GreaterThan = 6,
GreaterThanOrEqual = 7,
};
union {

View file

@ -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;