diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index fad9bfb21c..d021a76052 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -1039,6 +1039,8 @@ void GLGSRender::update_draw_state() gl_state.depth_mask(rsx::method_registers.depth_write_enabled()); gl_state.stencil_mask(rsx::method_registers.stencil_mask()); + gl_state.enable(rsx::method_registers.depth_clamp_enabled(), GL_DEPTH_CLAMP); + if (gl_state.enable(rsx::method_registers.depth_test_enabled(), GL_DEPTH_TEST)) { gl_state.depth_func(comparison_op(rsx::method_registers.depth_func())); diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index def2fe3e21..eb84c0f93a 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -2243,7 +2243,7 @@ void VKGSRender::load_program(u32 vertex_count, u32 vertex_base) properties.rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; properties.rs.polygonMode = VK_POLYGON_MODE_FILL; - properties.rs.depthClampEnable = VK_FALSE; + properties.rs.depthClampEnable = rsx::method_registers.depth_clamp_enabled(); properties.rs.rasterizerDiscardEnable = VK_FALSE; //Disabled by setting factors to 0 as needed diff --git a/rpcs3/Emu/RSX/rsx_decode.h b/rpcs3/Emu/RSX/rsx_decode.h index b646b3e957..4b96fc2637 100644 --- a/rpcs3/Emu/RSX/rsx_decode.h +++ b/rpcs3/Emu/RSX/rsx_decode.h @@ -701,6 +701,32 @@ struct registers_decoder } }; +template<> +struct registers_decoder +{ + struct decoded_type + { + private: + union + { + u32 raw_value; + bitfield_decoder_t<4, 4> depth_clamp_enabled; + } m_data; + public: + decoded_type(u32 raw_value) { m_data.raw_value = raw_value; } + + bool depth_clamp_enabled() const + { + return bool(m_data.depth_clamp_enabled); + } + }; + + static std::string dump(decoded_type &&decoded_values) + { + return "Depth: clamp " + print_boolean(decoded_values.depth_clamp_enabled()); + } +}; + template<> struct registers_decoder { diff --git a/rpcs3/Emu/RSX/rsx_methods.h b/rpcs3/Emu/RSX/rsx_methods.h index 768a6d4956..1d9b8b0197 100644 --- a/rpcs3/Emu/RSX/rsx_methods.h +++ b/rpcs3/Emu/RSX/rsx_methods.h @@ -1201,6 +1201,11 @@ namespace rsx { return decode().msaa_alpha_to_one(); } + + bool depth_clamp_enabled() + { + return decode().depth_clamp_enabled(); + } }; extern rsx_state method_registers;