From bbffe729a3ec8e3d1637045b4fdcc10dcff56266 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Tue, 28 Apr 2026 21:27:28 +1000 Subject: [PATCH] OpenGLDevice: Disable PBOs completely on NVIDIA Using PBOs for texture uploads in RGB5A1 format is **incredibly** slow on NVIDIA. It causes stalls for 16ms+ when creating or waiting for syncs. It looks like the driver gets stuck contended on a lock with a worker thread, where the worker thread is buzzing away rotating 16-bit words right by one bit. Even weirder, it looks like it's in jitted code???? And it's not even vectorized???? This is the sort of rubbish I'd expect from Adreno or Mali, seeing it on NVIDIA is very wtf. --- src/util/opengl_device.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/util/opengl_device.cpp b/src/util/opengl_device.cpp index 593e9a4f0..8eaa60c3d 100644 --- a/src/util/opengl_device.cpp +++ b/src/util/opengl_device.cpp @@ -502,6 +502,14 @@ bool OpenGLDevice::CheckFeatures(CreateFlags create_flags) { // glReadPixels() is about 2x as fast as glGetTextureSubImage() on NVIDIA drivers. m_use_get_texture_sub_image = false; + + // Using PBOs for texture uploads in RGB5A1 format is **incredibly** slow on NVIDIA. + // It causes stalls for 16ms+ when creating or waiting for syncs. It looks like the driver gets + // stuck contended on a lock with a worker thread, where the worker thread is buzzing away + // rotating 16-bit words right by one bit. Even weirder, it looks like it's in jitted code???? + // And it's not even vectorized???? This is the sort of rubbish I'd expect from Adreno or Mali, + // seeing it on NVIDIA is very wtf. + m_disable_pbo = true; } return true;