diff options
| author | 2015-01-25 23:34:14 -0500 | |
|---|---|---|
| committer | 2015-01-25 23:34:14 -0500 | |
| commit | ff83d23ed5a2b204a6768e853329204cb1dd1bd3 (patch) | |
| tree | 464bf8822bd09f9cc2e6a9d23e95cacf882459d7 /src | |
| parent | Merge pull request #484 from chinhodado/build (diff) | |
| download | yuzu-ff83d23ed5a2b204a6768e853329204cb1dd1bd3.tar.gz yuzu-ff83d23ed5a2b204a6768e853329204cb1dd1bd3.tar.xz yuzu-ff83d23ed5a2b204a6768e853329204cb1dd1bd3.zip | |
GPU: Implement the remaining depth testing functions.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/pica.h | 11 | ||||
| -rw-r--r-- | src/video_core/rasterizer.cpp | 20 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/video_core/pica.h b/src/video_core/pica.h index de1ce05b6..15850ba17 100644 --- a/src/video_core/pica.h +++ b/src/video_core/pica.h | |||
| @@ -311,9 +311,14 @@ struct Regs { | |||
| 311 | 311 | ||
| 312 | struct { | 312 | struct { |
| 313 | enum DepthFunc : u32 { | 313 | enum DepthFunc : u32 { |
| 314 | Always = 1, | 314 | Never = 0, |
| 315 | LessThan = 4, | 315 | Always = 1, |
| 316 | GreaterThan = 6, | 316 | Equal = 2, |
| 317 | NotEqual = 3, | ||
| 318 | LessThan = 4, | ||
| 319 | LessThanOrEqual = 5, | ||
| 320 | GreaterThan = 6, | ||
| 321 | GreaterThanOrEqual = 7, | ||
| 317 | }; | 322 | }; |
| 318 | 323 | ||
| 319 | union { | 324 | union { |
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index 025d4e484..219a1bbb7 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp | |||
| @@ -441,18 +441,38 @@ void ProcessTriangle(const VertexShader::OutputVertex& v0, | |||
| 441 | bool pass = false; | 441 | bool pass = false; |
| 442 | 442 | ||
| 443 | switch (registers.output_merger.depth_test_func) { | 443 | switch (registers.output_merger.depth_test_func) { |
| 444 | case registers.output_merger.Never: | ||
| 445 | pass = false; | ||
| 446 | break; | ||
| 447 | |||
| 444 | case registers.output_merger.Always: | 448 | case registers.output_merger.Always: |
| 445 | pass = true; | 449 | pass = true; |
| 446 | break; | 450 | break; |
| 447 | 451 | ||
| 452 | case registers.output_merger.Equal: | ||
| 453 | pass = z == ref_z; | ||
| 454 | break; | ||
| 455 | |||
| 456 | case registers.output_merger.NotEqual: | ||
| 457 | pass = z != ref_z; | ||
| 458 | break; | ||
| 459 | |||
| 448 | case registers.output_merger.LessThan: | 460 | case registers.output_merger.LessThan: |
| 449 | pass = z < ref_z; | 461 | pass = z < ref_z; |
| 450 | break; | 462 | break; |
| 451 | 463 | ||
| 464 | case registers.output_merger.LessThanOrEqual: | ||
| 465 | pass = z <= ref_z; | ||
| 466 | break; | ||
| 467 | |||
| 452 | case registers.output_merger.GreaterThan: | 468 | case registers.output_merger.GreaterThan: |
| 453 | pass = z > ref_z; | 469 | pass = z > ref_z; |
| 454 | break; | 470 | break; |
| 455 | 471 | ||
| 472 | case registers.output_merger.GreaterThanOrEqual: | ||
| 473 | pass = z >= ref_z; | ||
| 474 | break; | ||
| 475 | |||
| 456 | default: | 476 | default: |
| 457 | LOG_ERROR(HW_GPU, "Unknown depth test function %x", registers.output_merger.depth_test_func.Value()); | 477 | LOG_ERROR(HW_GPU, "Unknown depth test function %x", registers.output_merger.depth_test_func.Value()); |
| 458 | break; | 478 | break; |