From f6d2409b2082ead31366b61c5974dcdff49e4ca5 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Wed, 27 Jan 2016 00:30:34 +0100 Subject: [PATCH] rsx/common/d3d12: Support for shader window setting. --- rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp | 2 ++ rpcs3/Emu/RSX/RSXThread.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp index ff13535dbd..1976b4c958 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp @@ -191,6 +191,8 @@ void D3D12FragmentDecompiler::insertMainStart(std::stringstream & OS) } // A bit unclean, but works. OS << " " << "float4 gl_Position = In.Position;" << std::endl; + if (m_prog.origin_mode == rsx::window_origin::bottom) + OS << " gl_Position.y = (" << std::to_string(m_prog.height) << " - gl_Position.y);\n"; // Declare output for (const ParamType &PT : m_parr.params[PF_PARAM_NONE]) { diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 9f502913c3..3d5698cc0f 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -665,6 +665,10 @@ namespace rsx result.addr = vm::base(rsx::get_address(result.offset, (shader_program & 0x3) - 1)); result.ctrl = rsx::method_registers[NV4097_SET_SHADER_CONTROL]; result.unnormalized_coords = 0; + u32 shader_window = rsx::method_registers[NV4097_SET_SHADER_WINDOW]; + result.origin_mode = rsx::to_window_origin((shader_window >> 12) & 0xF); + result.pixel_center_mode = rsx::to_window_pixel_center((shader_window >> 16) & 0xF); + result.height = shader_window & 0xFFF; std::array texture_dimensions; for (u32 i = 0; i < rsx::limits::textures_count; ++i)