From 635a268dd9454f31767b25c0c64bf8d4817f2965 Mon Sep 17 00:00:00 2001 From: Vladislav Belov Date: Tue, 28 Jan 2025 01:40:47 +0100 Subject: [PATCH] Disables GL storage buffers on Mesa. This is a workaround to avoid disabling GL storage buffers completely. Because they might not work or might lead to a decreased performance. We need to investigate that further when we have a local reproduce. --- source/renderer/backend/gl/Device.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/renderer/backend/gl/Device.cpp b/source/renderer/backend/gl/Device.cpp index 44ccd4bdf8..59e8651644 100644 --- a/source/renderer/backend/gl/Device.cpp +++ b/source/renderer/backend/gl/Device.cpp @@ -451,9 +451,16 @@ std::unique_ptr CDevice::Create(SDL_Window* window, const bool arb) GLint maxStorageBufferSize{0}; if (ogl_HaveExtension("GL_ARB_shader_storage_buffer_object")) glGetIntegerv(GL_MAX_SHADER_STORAGE_BLOCK_SIZE, &maxStorageBufferSize); + // Storage buffers might not work correctly on some Mesa drivers or might have + // decreased performance. We need to investigate it further but for now we + // disable storage buffers on Mesa. + const bool disableStorageForMesa{ + device->m_Name.find("Mesa") != std::string::npos + || device->m_DriverInformation.find("Mesa") != std::string::npos}; capabilities.storage = capabilities.computeShaders && maxStorageBufferSize > 0 && static_cast(maxStorageBufferSize) >= 128 * MiB + && !disableStorageForMesa && ogl_HaveExtension("GL_ARB_uniform_buffer_object") && ogl_HaveExtension("GL_ARB_shader_storage_buffer_object") && ogl_HaveExtension("GL_ARB_half_float_vertex")