diff --git a/rpcs3/Emu/RSX/GL/GLDraw.cpp b/rpcs3/Emu/RSX/GL/GLDraw.cpp index 49a19acd3b..dabd821c36 100644 --- a/rpcs3/Emu/RSX/GL/GLDraw.cpp +++ b/rpcs3/Emu/RSX/GL/GLDraw.cpp @@ -267,7 +267,7 @@ void GLGSRender::update_draw_state() // Check details in VKDraw.cpp about behaviour of RSX vs desktop D24X8 implementations // TLDR, RSX expects R = 16,777,215 (2^24 - 1) const auto& caps = gl::get_driver_caps(); - if (caps.vendor_NVIDIA) + if (caps.vendor_NVIDIA || caps.vendor_MESA) { // R derived to be 8388607 (2^23 - 1) poly_offset_bias *= 0.5f; diff --git a/rpcs3/Emu/RSX/GL/glutils/capabilities.hpp b/rpcs3/Emu/RSX/GL/glutils/capabilities.hpp index 39de9ebf18..1a9e1ad01c 100644 --- a/rpcs3/Emu/RSX/GL/glutils/capabilities.hpp +++ b/rpcs3/Emu/RSX/GL/glutils/capabilities.hpp @@ -30,6 +30,8 @@ namespace gl bool vendor_AMD = false; // has broken ARB_multidraw bool vendor_NVIDIA = false; // has NaN poisoning issues bool vendor_MESA = false; // requires CLIENT_STORAGE bit set for streaming buffers + bool subvendor_RADEONSI = false; + bool subvendor_NOUVEAU = false; bool check(const std::string& ext_name, const char* test) { @@ -174,6 +176,15 @@ namespace gl if (version_string.find("Mesa") != umax || renderer_string.find("Mesa") != umax) { vendor_MESA = true; + + if (vendor_string.find("nouveau") != umax) + { + subvendor_NOUVEAU = true; + } + else if (vendor_string.find("AMD") != umax) + { + subvendor_RADEONSI = true; + } } // Workaround for intel drivers which have terrible capability reporting