From e08d05e221272e26e01716e087facc223a1b10ad Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sun, 8 Feb 2026 20:00:21 +0100 Subject: [PATCH 1/3] DetectGLVendors: move the Amber Nouveau comment next to Nouveau --- src/engine/renderer/DetectGLVendors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/renderer/DetectGLVendors.cpp b/src/engine/renderer/DetectGLVendors.cpp index 2ca55c80f0..b9399b304e 100644 --- a/src/engine/renderer/DetectGLVendors.cpp +++ b/src/engine/renderer/DetectGLVendors.cpp @@ -117,10 +117,10 @@ void DetectGLVendors( // Mesa Panfrost, newer Panfrost uses "Mesa" instead. { "Panfrost", { glDriverVendor_t::MESA, glHardwareVendor_t::ARM } }, // Mesa Nvidia for supported OpenGL 2+ hardware. + // Mesa Amber also provides "Nouveau", but this is for unsupported pre-OpenGL 2 Nvidia. { "nouveau", { glDriverVendor_t::MESA, glHardwareVendor_t::NVIDIA } }, // Proprietary Nvidia drivers on all systems like Linux, Windows, and macOS. { "NVIDIA Corporation", { glDriverVendor_t::NVIDIA, glHardwareVendor_t::NVIDIA } }, - // Mesa Amber also provides "Nouveau", but this is for unsupported pre-OpenGL 2 Nvidia. }; auto it = vendorDriverHardware.find( vendorString ); From 2ea1236e41391f5c8972154f76e4f2d8cb452bf1 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sun, 8 Feb 2026 20:00:13 +0100 Subject: [PATCH 2/3] DetectGLVendors: detect Moore Threads --- src/engine/renderer/DetectGLVendors.cpp | 4 ++++ src/engine/renderer/DetectGLVendors.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/engine/renderer/DetectGLVendors.cpp b/src/engine/renderer/DetectGLVendors.cpp index b9399b304e..93326acb72 100644 --- a/src/engine/renderer/DetectGLVendors.cpp +++ b/src/engine/renderer/DetectGLVendors.cpp @@ -46,6 +46,7 @@ std::string GetGLHardwareVendorName( glHardwareVendor_t hardwareVendor ) "Broadcom", "Intel", "Nvidia", + "Moore Threads", "OutOfRange", }; @@ -71,6 +72,7 @@ std::string GetGLDriverVendorName( glDriverVendor_t driverVendor ) "Intel", "Mesa", "Nvidia", + "Moore Threads", "OutOfRange", }; @@ -121,6 +123,8 @@ void DetectGLVendors( { "nouveau", { glDriverVendor_t::MESA, glHardwareVendor_t::NVIDIA } }, // Proprietary Nvidia drivers on all systems like Linux, Windows, and macOS. { "NVIDIA Corporation", { glDriverVendor_t::NVIDIA, glHardwareVendor_t::NVIDIA } }, + // Moore Threads drivers on Linux and Windows. + { "Moore Threads", { glDriverVendor_t::MTHREADS, glHardwareVendor_t::MTHREADS } }, }; auto it = vendorDriverHardware.find( vendorString ); diff --git a/src/engine/renderer/DetectGLVendors.h b/src/engine/renderer/DetectGLVendors.h index fb494747d6..414372b381 100644 --- a/src/engine/renderer/DetectGLVendors.h +++ b/src/engine/renderer/DetectGLVendors.h @@ -56,6 +56,7 @@ enum class glHardwareVendor_t BROADCOM, INTEL, NVIDIA, + MTHREADS, NUM_HARDWARE_VENDORS, }; @@ -67,6 +68,7 @@ enum class glDriverVendor_t INTEL, MESA, NVIDIA, + MTHREADS, NUM_DRIVER_VENDORS, }; From ef499116782e51688dd39eca7405c56491c63754 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 10 Feb 2026 04:13:13 +0100 Subject: [PATCH 3/3] sdl_glimp: disable ARB_texture_barrier on Moore Threads hardware --- src/engine/sys/sdl_glimp.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/engine/sys/sdl_glimp.cpp b/src/engine/sys/sdl_glimp.cpp index 0d0f49ff43..f3e17e7bb3 100644 --- a/src/engine/sys/sdl_glimp.cpp +++ b/src/engine/sys/sdl_glimp.cpp @@ -185,6 +185,10 @@ static Cvar::Cvar workaround_glHardware_intel_useFirstProvokinVertex( "workaround.glHardware.intel.useFirstProvokinVertex", "Use first provoking vertex on Intel hardware supporting ARB_provoking_vertex", Cvar::NONE, true ); +static Cvar::Cvar workaround_glHardware_mthreads_disableTextureBarrier( + "workaround.glHardware.mthreads.disableTextureBarrier", + "Disable ARB_texture_barrier on Moore Threads hardware", + Cvar::NONE, true ); SDL_Window *window = nullptr; static SDL_PropertiesID windowProperties; @@ -2376,6 +2380,26 @@ static void GLimp_InitExtensions() // made required in OpenGL 4.5 glConfig.textureBarrierAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_texture_barrier, r_arb_texture_barrier.Get() ); + if ( glConfig.textureBarrierAvailable + && glConfig.hardwareVendor == glHardwareVendor_t::MTHREADS + && workaround_glHardware_mthreads_disableTextureBarrier.Get() ) + { + /* Texture barrier doesn't make sense on a tiled GPU architecture, + so implementing it on Moore Threads hardware would be meaningless, + see: https://github.com/DaemonEngine/Daemon/pull/1890#issuecomment-3872010479 + + It's still possible for drivers to implement unoptimal emulation just + to provide compliance. + + It happens that the implementation of the MTT actually produces garbage + on screen, see: https://github.com/DaemonEngine/Daemon/issues/1891 + + Either being unoptimal, or the implementation being buggy, we better + disable the feature on such hardware. */ + logger.Warn( "Found Moore Threads hardware with tiled architecture, disabling ARB_texture_barrier."); + glConfig.textureBarrierAvailable = false; + } + // made required in OpenGL 4.3 glConfig.computeShaderAvailable = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, ARB_compute_shader, r_arb_compute_shader.Get() ); @@ -2679,6 +2703,7 @@ bool GLimp_Init() Cvar::Latch( workaround_glExtension_glsl120_disableShaderDrawParameters ); Cvar::Latch( workaround_glExtension_glsl120_disableGpuShader4 ); Cvar::Latch( workaround_glHardware_intel_useFirstProvokinVertex ); + Cvar::Latch( workaround_glHardware_mthreads_disableTextureBarrier ); /* Enable S3TC on Mesa even if libtxc-dxtn is not available The environment variables is currently always set,