diff options
| author | 2016-03-06 11:16:21 -0500 | |
|---|---|---|
| committer | 2016-03-06 11:16:21 -0500 | |
| commit | 6436d101b5d623aa7c5a854bf3b28fbefe2d5198 (patch) | |
| tree | 7f3146a9a8062a7b29c11ab5c2499f81e9d2b1e6 /src | |
| parent | Merge pull request #1463 from yuriks/non-app-region (diff) | |
| parent | Pica: Write depth value even when depth test is disabled (diff) | |
| download | yuzu-6436d101b5d623aa7c5a854bf3b28fbefe2d5198.tar.gz yuzu-6436d101b5d623aa7c5a854bf3b28fbefe2d5198.tar.xz yuzu-6436d101b5d623aa7c5a854bf3b28fbefe2d5198.zip | |
Merge pull request #1462 from yuriks/depth-test-write
Pica: Write depth value even when depth test is disabled
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/rasterizer.cpp | 16 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 6 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index dd1604a38..fd02aa652 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp | |||
| @@ -858,12 +858,12 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0, | |||
| 858 | } | 858 | } |
| 859 | } | 859 | } |
| 860 | 860 | ||
| 861 | // TODO: Does depth indeed only get written even if depth testing is enabled? | 861 | unsigned num_bits = Regs::DepthBitsPerPixel(regs.framebuffer.depth_format); |
| 862 | u32 z = (u32)((v0.screenpos[2].ToFloat32() * w0 + | ||
| 863 | v1.screenpos[2].ToFloat32() * w1 + | ||
| 864 | v2.screenpos[2].ToFloat32() * w2) * ((1 << num_bits) - 1) / wsum); | ||
| 865 | |||
| 862 | if (output_merger.depth_test_enable) { | 866 | if (output_merger.depth_test_enable) { |
| 863 | unsigned num_bits = Regs::DepthBitsPerPixel(regs.framebuffer.depth_format); | ||
| 864 | u32 z = (u32)((v0.screenpos[2].ToFloat32() * w0 + | ||
| 865 | v1.screenpos[2].ToFloat32() * w1 + | ||
| 866 | v2.screenpos[2].ToFloat32() * w2) * ((1 << num_bits) - 1) / wsum); | ||
| 867 | u32 ref_z = GetDepth(x >> 4, y >> 4); | 867 | u32 ref_z = GetDepth(x >> 4, y >> 4); |
| 868 | 868 | ||
| 869 | bool pass = false; | 869 | bool pass = false; |
| @@ -907,11 +907,11 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0, | |||
| 907 | UpdateStencil(stencil_test.action_depth_fail); | 907 | UpdateStencil(stencil_test.action_depth_fail); |
| 908 | continue; | 908 | continue; |
| 909 | } | 909 | } |
| 910 | |||
| 911 | if (output_merger.depth_write_enable) | ||
| 912 | SetDepth(x >> 4, y >> 4, z); | ||
| 913 | } | 910 | } |
| 914 | 911 | ||
| 912 | if (output_merger.depth_write_enable) | ||
| 913 | SetDepth(x >> 4, y >> 4, z); | ||
| 914 | |||
| 915 | // The stencil depth_pass action is executed even if depth testing is disabled | 915 | // The stencil depth_pass action is executed even if depth testing is disabled |
| 916 | if (stencil_action_enable) | 916 | if (stencil_action_enable) |
| 917 | UpdateStencil(stencil_test.action_depth_pass); | 917 | UpdateStencil(stencil_test.action_depth_pass); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 0f864b617..b3dc6aa19 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -887,8 +887,10 @@ void RasterizerOpenGL::SyncStencilTest() { | |||
| 887 | 887 | ||
| 888 | void RasterizerOpenGL::SyncDepthTest() { | 888 | void RasterizerOpenGL::SyncDepthTest() { |
| 889 | const auto& regs = Pica::g_state.regs; | 889 | const auto& regs = Pica::g_state.regs; |
| 890 | state.depth.test_enabled = (regs.output_merger.depth_test_enable == 1); | 890 | state.depth.test_enabled = regs.output_merger.depth_test_enable == 1 || |
| 891 | state.depth.test_func = PicaToGL::CompareFunc(regs.output_merger.depth_test_func); | 891 | regs.output_merger.depth_write_enable == 1; |
| 892 | state.depth.test_func = regs.output_merger.depth_test_enable == 1 ? | ||
| 893 | PicaToGL::CompareFunc(regs.output_merger.depth_test_func) : GL_ALWAYS; | ||
| 892 | state.color_mask.red_enabled = regs.output_merger.red_enable; | 894 | state.color_mask.red_enabled = regs.output_merger.red_enable; |
| 893 | state.color_mask.green_enabled = regs.output_merger.green_enable; | 895 | state.color_mask.green_enabled = regs.output_merger.green_enable; |
| 894 | state.color_mask.blue_enabled = regs.output_merger.blue_enable; | 896 | state.color_mask.blue_enabled = regs.output_merger.blue_enable; |