From 21ace5616039116c6d34cbc7bdccffdce67d6aff Mon Sep 17 00:00:00 2001 From: Andy1210 Date: Fri, 7 Aug 2026 17:09:46 +0200 Subject: [PATCH] VideoBackends/OGL: Don't call glMemoryBarrier without ARB_shader_image_load_store glMemoryBarrier comes from ARB_shader_image_load_store, so on a desktop context below GL 4.2 the pointer is null. bSupportsBBox is set from bSupportsFragmentStoresAndAtomics, which such a driver can still have, so saving a state reads the bounding box and calls a null pointer. UsePersistentStagingBuffers() in OGLTexture.cpp already guards the same call with bSupportsImageLoadStore. --- Source/Core/VideoBackends/OGL/OGLBoundingBox.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Core/VideoBackends/OGL/OGLBoundingBox.cpp b/Source/Core/VideoBackends/OGL/OGLBoundingBox.cpp index 673e308d53..19b3d0197f 100644 --- a/Source/Core/VideoBackends/OGL/OGLBoundingBox.cpp +++ b/Source/Core/VideoBackends/OGL/OGLBoundingBox.cpp @@ -5,6 +5,7 @@ #include +#include "VideoBackends/OGL/OGLConfig.h" #include "VideoBackends/OGL/OGLGfx.h" #include "VideoCommon/DriverDetails.h" @@ -37,7 +38,7 @@ std::vector OGLBoundingBox::Read(u32 index, u32 length) // on nVidia drivers. This is more noticeable at higher internal resolutions. // Using glGetBufferSubData instead does not seem to exhibit this slowdown. if (!DriverDetails::HasBug(DriverDetails::BUG_SLOW_GETBUFFERSUBDATA) && - !static_cast(g_gfx.get())->IsGLES()) + !static_cast(g_gfx.get())->IsGLES() && g_ogl_config.bSupportsImageLoadStore) { // We also need to ensure the the CPU does not receive stale values which have been updated by // the GPU. Apparently the buffer here is not coherent on NVIDIA drivers. Not sure if this is a