From 4804efc17dd9a432363267ac097b4b2e32468191 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 25 Feb 2018 12:46:27 +0300 Subject: [PATCH] rsx: Clear up confusion on depth writes. According to the NV_fragment_program spec, its not feasible to have 16-bit depth wries NOTE: NV_fragement_program precedes NV_fragment_program2 which is very close to what RSX consumes. It is hardware from that era afterall --- rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp | 8 ++------ rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp | 7 ++----- rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp | 7 ++----- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp index 8ce3ba7a91..54b18a99ed 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp @@ -306,12 +306,8 @@ void D3D12FragmentDecompiler::insertMainEnd(std::stringstream & OS) { if (m_parr.HasParam(PF_PARAM_NONE, "vec4", "r1")) { - /** - * Note: Naruto Shippuden : Ultimate Ninja Storm 2 sets CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS in a shader - * but it writes depth in r1.z and not h2.z. - * Maybe there's a different flag for depth ? - */ - // OS << " Out.depth = " << ((m_ctrl & CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS) ? "r1.z;" : "h2.z;") << "\n"; + //Depth writes are always from a fp32 register. See issues section on nvidia's NV_fragment_program spec + //https://www.khronos.org/registry/OpenGL/extensions/NV/NV_fragment_program.txt OS << " Out.depth = r1.z;\n"; } else diff --git a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp index ab9db54365..7043cd433d 100644 --- a/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/GL/GLFragmentProgram.cpp @@ -411,11 +411,8 @@ void GLFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) { if (m_parr.HasParam(PF_PARAM_NONE, "vec4", "r1")) { - /** Note: Naruto Shippuden : Ultimate Ninja Storm 2 sets CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS in a shader - * but it writes depth in r1.z and not h2.z. - * Maybe there's a different flag for depth ? - */ - //OS << ((m_ctrl & CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS) ? "\tgl_FragDepth = r1.z;\n" : "\tgl_FragDepth = h0.z;\n") << "\n"; + //Depth writes are always from a fp32 register. See issues section on nvidia's NV_fragment_program spec + //https://www.khronos.org/registry/OpenGL/extensions/NV/NV_fragment_program.txt OS << " gl_FragDepth = r1.z;\n"; } else diff --git a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp index 2e13b9cac3..0ea35c0208 100644 --- a/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp +++ b/rpcs3/Emu/RSX/VK/VKFragmentProgram.cpp @@ -406,11 +406,8 @@ void VKFragmentDecompilerThread::insertMainEnd(std::stringstream & OS) { if (m_parr.HasParam(PF_PARAM_NONE, "vec4", "r1")) { - /** Note: Naruto Shippuden : Ultimate Ninja Storm 2 sets CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS in a shader - * but it writes depth in r1.z and not h2.z. - * Maybe there's a different flag for depth ? - */ - //OS << ((m_ctrl & CELL_GCM_SHADER_CONTROL_32_BITS_EXPORTS) ? "\tgl_FragDepth = r1.z;\n" : "\tgl_FragDepth = h0.z;\n") << "\n"; + //Depth writes are always from a fp32 register. See issues section on nvidia's NV_fragment_program spec + //https://www.khronos.org/registry/OpenGL/extensions/NV/NV_fragment_program.txt OS << " gl_FragDepth = r1.z;\n"; } else