Failing to load Mesa3D on macOS instead of macOS provided OpenGL library

Hi,

I am working on a (java) software running on macOS for which I want to use MESA3D software rendering instead of MacOS provided native GL. Despite explicitely loading MESA libGL.dylib before anything else, I got the Apple Metal renderer used (and the macOS libGL loaded as well).

To force the use of MESA3D, I start my program with the following environment variable wich is supposed to ensure that Mesa’s libGL will be loaded instead of macOS libGL.

DYLD_INSERT_LIBRARIES=/opt/homebrew/Cellar/mesa/21.3.7/lib/libGL.dylib

My software then queries the OpenGL renderer to verify if I load Mesa’s GL or Apple GL.

gl.glGetString(GL.GL_RENDERER) = Apple M1

instead of the expected

gl.glGetString(GL.GL_RENDERER) = llvmpipe (...)

which is what I got on Ubuntu and Windows when MESA3D is properly enabled for software rendering.

To check which library is loaded first I enable

DYLD_PRINT_LIBRARIES=YES
DYLD_PRINT_BINDINGS=YES

I then can read logs in console

dyld: loaded: <3C537115-FC06-3645-A5B9-7300A12C63C3> /Library/Java/JavaVirtualMachines/zulu17.30.15-ca-jdk17.0.1-macosx_aarch64/zulu-17.jdk/Contents/Home/bin/java
dyld: loaded: <3E35E317-C590-329B-80B6-EF196B72D3B4> /opt/homebrew/Cellar/mesa/21.3.7/lib/libGL.dylib
dyld: loaded: <B0979A3D-EEF8-32FE-AF37-643FA12FEFA1> /usr/lib/libz.1.dylib
dyld: loaded: <A543B77E-5CD0-3214-A571-85774207BF2C> /Library/Java/JavaVirtualMachines/zulu17.30.15-ca-jdk17.0.1-macosx_aarch64/zulu-17.jdk/Contents/Home/bin/../lib/libjli.dylib
dyld: loaded: <72158147-592E-31AB-A1D5-800AC618735D> /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
...
dyld: loaded: <A216E56E-4166-3753-9DDA-285369A91C16> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
dyld: loaded: <5DC8E881-0092-37CE-945E-43392DC84245> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
dyld: loaded: <320BE048-A77E-3495-B42D-5E5B1ED6C035> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
dyld: loaded: <46B15C22-B004-3BE3-BE18-B070FBDCF2CF> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
...
dyld: bind: libGL.dylib:0x10489C720 = libglapi.0.dylib:__glapi_tls_Dispatch, *0x10489C720 = 0x104928108
dyld: bind: libGL.dylib:0x104894018 = libsystem_pthread.dylib:___chkstk_darwin, *0x104894018 = 0x1994FA5E4
dyld: bind: libGL.dylib:0x104894020 = libsystem_c.dylib:___stack_chk_guard, *0x104894020 = 0x20482C320
dyld: bind: libGL.dylib:0x104894028 = libsystem_c.dylib:___stderrp, *0x104894028 = 0x1F841BFA0
dyld: bind: libGL.dylib:0x10489C708 = libdyld.dylib:__tlv_bootstrap, *0x10489C708 = 0x19952169C
dyld: bind: libGL.dylib:0x104894030 = libdyld.dylib:dyld_stub_binder, *0x104894030 = 0x19951BBF8
dyld: bind: libGL.dylib:0x104894000 = libX11.6.dylib:__XLockMutex_fn, *0x104894000 = 0x104A21EC8
dyld: bind: libGL.dylib:0x104894008 = libX11.6.dylib:__XUnlockMutex_fn, *0x104894008 = 0x104A21ED0
dyld: bind: libGL.dylib:0x104894010 = libX11.6.dylib:__Xglobal_lock, *0x104894010 = 0x104A21EB0
...
dyld: loaded: <FEE476A4-722C-32E9-8AEF-E9F475BDD03A> /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLEngine.bundle/GLEngine
dyld: loaded: <9202ACAB-D360-3F63-90C1-3CAB807A279D> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLProgrammability.dylib
dyld: loaded: <A66467D5-806E-33EC-98A5-CF2E04E978E5> /System/Library/Extensions/AppleMetalOpenGLRenderer.bundle/Contents/MacOS/AppleMetalOpenGLRenderer
dyld: fixup: AppleMetalOpenGLRenderer:0x2a1aa8000 = 0x19959700c
dyld: fixup: AppleMetalOpenGLRenderer:0x2a1aa8008 = 0x19957e3cc
dyld: fixup: AppleMetalOpenGLRenderer:0x2a1aa8010 = 0x19957f54c
dyld: fixup: AppleMetalOpenGLRenderer:0x2a1aa8018 = 0x1995822ec
...
dyld: loaded: <B58FF098-8789-3D4B-98FD-78A0B1F549D0> /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLRendererFloat.bundle/GLRendererFloat
dyld: loaded: <B7F38BA5-84F4-3FC2-BF97-EA05FEAAAD16> /System/Library/Extensions/AGXMetal13_3.bundle/Contents/MacOS/AGXMetal13_3
dyld: loaded: <9A488340-95B1-3742-9D23-6F14BEF6CCDD> /System/Library/PrivateFrameworks/IOGPU.framework/Versions/A/IOGPU
dyld: fixup: AGXMetal13_3:0x2a20ec000 = 0x1feefa078
dyld: fixup: AGXMetal13_3:0x2a20ec008 = 0x1feef9f88
dyld: fixup: AGXMetal13_3:0x2a20ec010 = 0x1f8816e90
dyld: fixup: AGXMetal13_3:0x2a20ec018 = 0x1f8816e40
...
dyld: loaded: <CF360CA0-E351-316F-A250-4D1C290B5437> /System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/libmetal_timestamp.dylib
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B8038 = OpenGL:_CGLDescribeRenderer, *0x2A06B8038 = 0x1DB4FF898
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B8260 = libsystem_malloc.dylib:_malloc, *0x2A06B8260 = 0x1993219A4
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B8138 = libsystem_c.dylib:___memset_chk, *0x2A06B8138 = 0x1994453C4
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B8058 = OpenGL:_CGLDestroyRendererInfo, *0x2A06B8058 = 0x1DB4FF850
dyld: lazy bind: libnativewindow_macosx.dylib:0x2A0638018 = SkyLight:_CGDisplayCurrentMode, *0x2A0638018 = 0x19DFFA0B8
dyld: lazy bind: libnativewindow_macosx.dylib:0x2A0638000 = CoreFoundation:_CFDictionaryGetValue, *0x2A0638000 = 0x1995822EC
dyld: lazy bind: libnativewindow_macosx.dylib:0x2A0638008 = CoreFoundation:_CFNumberGetValue, *0x2A0638008 = 0x199597234
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B8080 = OpenGL:_CGLLockContext, *0x2A06B8080 = 0x1DB4FE4E8
dyld: lazy bind: libjogl_desktop.dylib:0x2A06B80B0 = OpenGL:_CGLUnlockContext, *0x2A06B80B0 = 0x1DB4FE528
dyld: lazy bind: libvtkRenderingOpenGL2Java.jnilib:0x16F6A0E78 = libvtkRenderingOpenGL2-9.1.1.dylib:__ZN28vtkGenericOpenGLRenderWindow3NewEv, *0x16F6A0E78 = 0x287FEC204
...

I am surprised that libGL provided by macOS gets loaded after the one provided by Mesa which is said to be loaded first.

Any idea how I can prevent Metal from handling OpenGL in favor of Mesa3D?

Trying the same on a macOS 10.12 lead to a different error where MESA GL and macOS GL seam to conflict with a DYLD error

dyld: Symbol not found: _gll_noop
  Referenced from: /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
  Expected in: /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
 in /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL

Complete DYLD logs :

dyld: loaded: /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home/bin/java
dyld: loaded: /usr/lib/libz.1.dylib
dyld: loaded: /Library/Java/JavaVirtualMachines/adoptopenjdk-14.jdk/Contents/Home/bin/../lib/libjli.dylib
dyld: loaded: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
dyld: loaded: /System/Library/Frameworks/Security.framework/Versions/A/Security
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices
dyld: loaded: /usr/lib/libSystem.B.dylib
dyld: loaded: /usr/lib/system/libcache.dylib
dyld: loaded: /usr/lib/system/libcommonCrypto.dylib
dyld: loaded: /usr/lib/system/libcompiler_rt.dylib
dyld: loaded: /usr/lib/system/libcopyfile.dylib
dyld: loaded: /usr/lib/system/libcorecrypto.dylib
dyld: loaded: /usr/lib/system/libdispatch.dylib
dyld: loaded: /usr/lib/system/libdyld.dylib
dyld: loaded: /usr/lib/system/libkeymgr.dylib
dyld: loaded: /usr/lib/system/liblaunch.dylib
dyld: loaded: /usr/lib/system/libmacho.dylib
dyld: loaded: /usr/lib/system/libquarantine.dylib
dyld: loaded: /usr/lib/system/libremovefile.dylib
dyld: loaded: /usr/lib/system/libsystem_asl.dylib
dyld: loaded: /usr/lib/system/libsystem_blocks.dylib
dyld: loaded: /usr/lib/system/libsystem_c.dylib
dyld: loaded: /usr/lib/system/libsystem_configuration.dylib
dyld: loaded: /usr/lib/system/libsystem_coreservices.dylib
dyld: loaded: /usr/lib/system/libsystem_coretls.dylib
dyld: loaded: /usr/lib/system/libsystem_dnssd.dylib
dyld: loaded: /usr/lib/system/libsystem_info.dylib
dyld: loaded: /usr/lib/system/libsystem_kernel.dylib
dyld: loaded: /usr/lib/system/libsystem_m.dylib
dyld: loaded: /usr/lib/system/libsystem_malloc.dylib
dyld: loaded: /usr/lib/system/libsystem_network.dylib
dyld: loaded: /usr/lib/system/libsystem_networkextension.dylib
dyld: loaded: /usr/lib/system/libsystem_notify.dylib
dyld: loaded: /usr/lib/system/libsystem_platform.dylib
dyld: loaded: /usr/lib/system/libsystem_pthread.dylib
dyld: loaded: /usr/lib/system/libsystem_sandbox.dylib
dyld: loaded: /usr/lib/system/libsystem_secinit.dylib
dyld: loaded: /usr/lib/system/libsystem_symptoms.dylib
dyld: loaded: /usr/lib/system/libsystem_trace.dylib
dyld: loaded: /usr/lib/system/libunwind.dylib
dyld: loaded: /usr/lib/system/libxpc.dylib
dyld: loaded: /usr/lib/libobjc.A.dylib
dyld: loaded: /usr/lib/libc++abi.dylib
dyld: loaded: /usr/lib/libc++.1.dylib
dyld: loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
dyld: loaded: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
dyld: loaded: /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
dyld: loaded: /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
dyld: loaded: /System/Library/PrivateFrameworks/RemoteViewServices.framework/Versions/A/RemoteViewServices
dyld: loaded: /System/Library/PrivateFrameworks/UIFoundation.framework/Versions/A/UIFoundation
dyld: loaded: /System/Library/PrivateFrameworks/DFRFoundation.framework/Versions/A/DFRFoundation
dyld: loaded: /usr/lib/libenergytrace.dylib
dyld: loaded: /System/Library/PrivateFrameworks/SkyLight.framework/Versions/A/SkyLight
dyld: loaded: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
dyld: loaded: /usr/lib/libScreenReader.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate
dyld: loaded: /System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface
dyld: loaded: /System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox
dyld: loaded: /System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit
dyld: loaded: /System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore
dyld: loaded: /System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
dyld: loaded: /usr/lib/libicucore.A.dylib
dyld: loaded: /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition
dyld: loaded: /usr/lib/libauto.dylib
dyld: loaded: /usr/lib/libxml2.2.dylib
dyld: loaded: /System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI
dyld: loaded: /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
dyld: loaded: /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
dyld: loaded: /usr/lib/liblangid.dylib
dyld: loaded: /System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport
dyld: loaded: /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
dyld: loaded: /System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/PerformanceAnalysis
dyld: loaded: /System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
dyld: loaded: /System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage
dyld: loaded: /System/Library/Frameworks/CoreText.framework/Versions/A/CoreText
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
dyld: loaded: /System/Library/PrivateFrameworks/Backup.framework/Versions/A/Backup
dyld: loaded: /usr/lib/libarchive.2.dylib
dyld: loaded: /System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
dyld: loaded: /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
dyld: loaded: /usr/lib/libCRFSuite.dylib
dyld: loaded: /usr/lib/libbsm.0.dylib
dyld: loaded: /usr/lib/system/libkxld.dylib
dyld: loaded: /usr/lib/libcoretls.dylib
dyld: loaded: /usr/lib/libcoretls_cfhelpers.dylib
dyld: loaded: /usr/lib/libOpenScriptingUtil.dylib
dyld: loaded: /usr/lib/libpam.2.dylib
dyld: loaded: /usr/lib/libsqlite3.dylib
dyld: loaded: /usr/lib/libxar.1.dylib
dyld: loaded: /usr/lib/libbz2.1.0.dylib
dyld: loaded: /usr/lib/liblzma.5.dylib
dyld: loaded: /usr/lib/libnetwork.dylib
dyld: loaded: /usr/lib/libpcap.A.dylib
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/FSEvents
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices
dyld: loaded: /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SharedFileList.framework/Versions/A/SharedFileList
dyld: loaded: /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
dyld: loaded: /System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth
dyld: loaded: /System/Library/PrivateFrameworks/login.framework/Versions/A/Frameworks/loginsupport.framework/Versions/A/loginsupport
dyld: loaded: /System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC
dyld: loaded: /usr/lib/libmecabra.dylib
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBNNS.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libQuadrature.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLinearAlgebra.dylib
dyld: loaded: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libSparseBLAS.dylib
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib
dyld: loaded: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib
dyld: loaded: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib
dyld: loaded: /usr/lib/libcompression.dylib
dyld: loaded: /System/Library/PrivateFrameworks/AppleJPEG.framework/Versions/A/AppleJPEG
dyld: loaded: /usr/lib/libcups.2.dylib
dyld: loaded: /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
dyld: loaded: /System/Library/Frameworks/GSS.framework/Versions/A/GSS
dyld: loaded: /usr/lib/libresolv.9.dylib
dyld: loaded: /usr/lib/libiconv.2.dylib
dyld: loaded: /System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal
dyld: loaded: /usr/lib/libheimdal-asn1.dylib
dyld: loaded: /System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory
dyld: loaded: /System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth
dyld: loaded: /System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory
dyld: loaded: /System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation
dyld: loaded: /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
dyld: loaded: /usr/lib/libmarisa.dylib
dyld: loaded: /usr/lib/libChineseTokenizer.dylib
dyld: loaded: /usr/lib/libcmph.dylib
dyld: loaded: /System/Library/PrivateFrameworks/CoreEmoji.framework/Versions/A/CoreEmoji
dyld: loaded: /System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement
dyld: loaded: /usr/lib/libxslt.1.dylib
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink
dyld: loaded: /System/Library/PrivateFrameworks/TextureIO.framework/Versions/A/TextureIO
dyld: loaded: /System/Library/Frameworks/Metal.framework/Versions/A/Metal
dyld: loaded: /usr/lib/libate.dylib
dyld: loaded: /System/Library/PrivateFrameworks/GPUCompiler.framework/libmetal_timestamp.dylib
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreFSCache.dylib
dyld: loaded: /System/Library/PrivateFrameworks/IOAccelerator.framework/Versions/A/IOAccelerator
dyld: loaded: /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo
dyld: loaded: /usr/lib/libFosl_dynamic.dylib
dyld: loaded: /System/Library/PrivateFrameworks/MetalPerformanceShaders.framework/Versions/A/MetalPerformanceShaders
dyld: loaded: /System/Library/PrivateFrameworks/FaceCore.framework/Versions/A/FaceCore
dyld: loaded: /System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
dyld: loaded: /usr/local/Cellar/mesa/21.1.2/lib/libGL.dylib
dyld: loaded: /usr/local/Cellar/mesa/21.1.2/lib/libglapi.0.dylib
dyld: loaded: /usr/local/opt/libx11/lib/libX11.6.dylib
dyld: loaded: /usr/local/opt/libxcb/lib/libxcb-glx.0.dylib
dyld: loaded: /usr/local/opt/libxcb/lib/libxcb.1.dylib
dyld: loaded: /usr/local/opt/libx11/lib/libX11-xcb.1.dylib
dyld: loaded: /usr/local/opt/libxext/lib/libXext.6.dylib
dyld: loaded: /usr/lib/libXplugin.1.dylib
dyld: loaded: /usr/local/opt/libxau/lib/libXau.6.dylib
dyld: loaded: /usr/local/opt/libxdmcp/lib/libXdmcp.6.dylib
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print
dyld: loaded: /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI
dyld: loaded: /System/Library/PrivateFrameworks/SpeechRecognitionCore.framework/Versions/A/SpeechRecognitionCore
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib
dyld: loaded: /System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport
dyld: loaded: /System/Library/PrivateFrameworks/Sharing.framework/Versions/A/Sharing
dyld: loaded: /System/Library/PrivateFrameworks/IconServices.framework/Versions/A/IconServices
dyld: loaded: /System/Library/PrivateFrameworks/ProtocolBuffer.framework/Versions/A/ProtocolBuffer
dyld: loaded: /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Apple80211
dyld: loaded: /System/Library/Frameworks/CoreWLAN.framework/Versions/A/CoreWLAN
dyld: loaded: /System/Library/PrivateFrameworks/CoreUtils.framework/Versions/A/CoreUtils
dyld: loaded: /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth
dyld: loaded: /System/Library/PrivateFrameworks/CoreWiFi.framework/Versions/A/CoreWiFi
dyld: loaded: /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth
dyld: loaded: /System/Library/Frameworks/CoreDisplay.framework/Versions/A/CoreDisplay
dyld: loaded: /System/Library/PrivateFrameworks/IOPresentment.framework/Versions/A/IOPresentment
dyld: loaded: /System/Library/PrivateFrameworks/DSExternalDisplay.framework/Versions/A/DSExternalDisplay
dyld: loaded: /System/Library/PrivateFrameworks/DebugSymbols.framework/Versions/A/DebugSymbols
dyld: loaded: /System/Library/PrivateFrameworks/CoreSymbolication.framework/Versions/A/CoreSymbolication
dyld: loaded: /System/Library/PrivateFrameworks/Symbolication.framework/Versions/A/Symbolication
dyld: loaded: /System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression
dyld: loaded: /System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary
dyld: Symbol not found: _gll_noop
  Referenced from: /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
  Expected in: /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
 in /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL

I verified that the problem happens both with MESA as provided by brew install mesa, as well as MESA built with the options suggested here.

How is GL loaded in your java code? Do you use anything like glad or glew?

No, I am not using GLAD or GLEW.

I use JOGL to access OpenGL and query the renderer. Here is a sample program demonstrating the issue.

env.appendFirst("PATH", mesa, ";");

have you tried something like

env.appendFirst("DYLD_LIBRARY_PATH_PATH", mesa, ":");

instead?

(PATH is the windows equivalent to macos DYLD_LIBRARY_PATH)

I had the same issue and was able to resolve it by configuring mesa with "-Dglx=xlib" as mentioned in the short mesa macOS documentation I’m not allowed to link.

Thank you @stefanovic. The DYLD_LIBRARY_PATH was already given as environment variable in my Eclipse run configuration. Making the variable edition in the program did not change the result.

Thank you @Atemu. I was already using this flag mentioned in the Mesa MacOS documentation. I trashed my previous build and rebuilt the complete Mesa on macOS 11.4 (on Apple M1) with the below lines without success

meson builddir/ -Dosmesa=true -Dglx=xlib -Dgallium-drivers=swrast -Dprefix=/Users/Martin/Dev/jzy3d/external/osmesa
ninja -C builddir/ 
ninja -C builddir/ install

Is your java app using X11 for Windowing or macOS’ Toolkits? Because I think Mesa only works with X11 on macOS.

Yes @Atemu .

In the case of macOS 10.12 I see x11 in the library loading history

dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib
dyld: loaded: /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib
dyld: loaded: /usr/local/Cellar/mesa/21.1.2/lib/libGL.dylib
dyld: loaded: /usr/local/Cellar/mesa/21.1.2/lib/libglapi.0.dylib
dyld: loaded: /usr/local/opt/libx11/lib/libX11.6.dylib
dyld: loaded: /usr/local/opt/libxcb/lib/libxcb-glx.0.dylib
dyld: loaded: /usr/local/opt/libxcb/lib/libxcb.1.dylib
dyld: loaded: /usr/local/opt/libx11/lib/libX11-xcb.1.dylib
dyld: loaded: /usr/local/opt/libxext/lib/libXext.6.dylib
dyld: loaded: /usr/lib/libXplugin.1.dylib
dyld: loaded: /usr/local/opt/libxau/lib/libXau.6.dylib
dyld: loaded: /usr/local/opt/libxdmcp/lib/libXdmcp.6.dylib

In the case of macOS 11.4 + Apple M1 as well

dyld: loaded: <320BE048-A77E-3495-B42D-5E5B1ED6C035> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib
dyld: loaded: <46B15C22-B004-3BE3-BE18-B070FBDCF2CF> /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib
...
dyld: bind: libGL.dylib:0x10489C720 = libglapi.0.dylib:__glapi_tls_Dispatch, *0x10489C720 = 0x104928108
dyld: bind: libGL.dylib:0x104894018 = libsystem_pthread.dylib:___chkstk_darwin, *0x104894018 = 0x1994FA5E4
dyld: bind: libGL.dylib:0x104894020 = libsystem_c.dylib:___stack_chk_guard, *0x104894020 = 0x20482C320
dyld: bind: libGL.dylib:0x104894028 = libsystem_c.dylib:___stderrp, *0x104894028 = 0x1F841BFA0
dyld: bind: libGL.dylib:0x10489C708 = libdyld.dylib:__tlv_bootstrap, *0x10489C708 = 0x19952169C
dyld: bind: libGL.dylib:0x104894030 = libdyld.dylib:dyld_stub_binder, *0x104894030 = 0x19951BBF8
dyld: bind: libGL.dylib:0x104894000 = libX11.6.dylib:__XLockMutex_fn, *0x104894000 = 0x104A21EC8
dyld: bind: libGL.dylib:0x104894008 = libX11.6.dylib:__XUnlockMutex_fn, *0x104894008 = 0x104A21ED0
dyld: bind: libGL.dylib:0x104894010 = libX11.6.dylib:__Xglobal_lock, *0x104894010 = 0x104A21EB0

Does it load the apple-native toolkits later? I have no idea how mesa interacts with X11 but it might not expose ogl properly eventhough it does load X11 libs?

Just a hunch though. Maybe try something that for sure uses X11. glxgears is working for me.

Yes, I see some debug info mentioning Metal.

I just installed MacPorts to install glxgears. I am not sure if it mixes properly with Homebrew but MacPorts install Mesa and xorg-x11. Anyway, after installing glxgears says it can’t open a display…

martin@osxm1 ~/D/j/external (master)> sudo port install glxgears

--->  Computing dependencies for glxgears
The following dependencies will be installed: 
 expat
 gettext-runtime
 icu
 libiconv
 libxml2
 mesa
 xorg-libX11
 xorg-libXau
 xorg-libXdamage
 xorg-libXdmcp
 xorg-libXext
 xorg-libXfixes
 xorg-libXi
 xorg-libXmu
 xorg-libXt
 xorg-libXxf86vm
 xorg-libice
 xorg-libpthread-stubs
 xorg-libsm
 xorg-libxcb
 xorg-xcb-proto
 xorg-xorgproto
 xz
 zlib
Continue? [Y/n]: Y
--->  Fetching archive for expat
--->  Attempting to fetch expat-2.4.7_0.darwin_20.arm64.tbz2 from https://packages.macports.org/expat
--->  Attempting to fetch expat-2.4.7_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/expat
--->  Installing expat @2.4.7_0
--->  Activating expat @2.4.7_0
--->  Cleaning expat
--->  Fetching archive for xorg-xorgproto
--->  Attempting to fetch xorg-xorgproto-2021.5_0.darwin_20.noarch.tbz2 from https://packages.macports.org/xorg-xorgproto
--->  Attempting to fetch xorg-xorgproto-2021.5_0.darwin_20.noarch.tbz2.rmd160 from https://packages.macports.org/xorg-xorgproto
--->  Installing xorg-xorgproto @2021.5_0
--->  Activating xorg-xorgproto @2021.5_0
--->  Cleaning xorg-xorgproto
--->  Fetching archive for xorg-libXau
--->  Attempting to fetch xorg-libXau-1.0.9_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXau
--->  Attempting to fetch xorg-libXau-1.0.9_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXau
--->  Installing xorg-libXau @1.0.9_0
--->  Activating xorg-libXau @1.0.9_0
--->  Cleaning xorg-libXau
--->  Fetching archive for xorg-libXdmcp
--->  Attempting to fetch xorg-libXdmcp-1.1.3_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXdmcp
--->  Attempting to fetch xorg-libXdmcp-1.1.3_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXdmcp
--->  Installing xorg-libXdmcp @1.1.3_0
--->  Activating xorg-libXdmcp @1.1.3_0
--->  Cleaning xorg-libXdmcp
--->  Fetching archive for xorg-libpthread-stubs
--->  Attempting to fetch xorg-libpthread-stubs-0.4_0.darwin_20.noarch.tbz2 from https://packages.macports.org/xorg-libpthread-stubs
--->  Attempting to fetch xorg-libpthread-stubs-0.4_0.darwin_20.noarch.tbz2.rmd160 from https://packages.macports.org/xorg-libpthread-stubs
--->  Installing xorg-libpthread-stubs @0.4_0
--->  Activating xorg-libpthread-stubs @0.4_0
--->  Cleaning xorg-libpthread-stubs
--->  Fetching archive for icu
--->  Attempting to fetch icu-67.1_4.darwin_20.arm64.tbz2 from https://packages.macports.org/icu
--->  Attempting to fetch icu-67.1_4.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/icu
--->  Installing icu @67.1_4
--->  Activating icu @67.1_4
--->  Cleaning icu
--->  Fetching archive for libiconv
--->  Attempting to fetch libiconv-1.16_1.darwin_20.arm64.tbz2 from https://packages.macports.org/libiconv
--->  Attempting to fetch libiconv-1.16_1.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/libiconv
--->  Installing libiconv @1.16_1
--->  Activating libiconv @1.16_1
--->  Cleaning libiconv
--->  Fetching archive for gettext-runtime
--->  Attempting to fetch gettext-runtime-0.21_0.darwin_20.arm64.tbz2 from https://packages.macports.org/gettext-runtime
--->  Attempting to fetch gettext-runtime-0.21_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/gettext-runtime
--->  Installing gettext-runtime @0.21_0
--->  Activating gettext-runtime @0.21_0
--->  Cleaning gettext-runtime
--->  Fetching archive for xz
--->  Attempting to fetch xz-5.2.5_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xz
--->  Attempting to fetch xz-5.2.5_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xz
--->  Installing xz @5.2.5_0
--->  Activating xz @5.2.5_0
--->  Cleaning xz
--->  Fetching archive for zlib
--->  Attempting to fetch zlib-1.2.11_0.darwin_20.arm64.tbz2 from https://packages.macports.org/zlib
--->  Attempting to fetch zlib-1.2.11_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/zlib
--->  Installing zlib @1.2.11_0
--->  Activating zlib @1.2.11_0
--->  Cleaning zlib
--->  Fetching archive for libxml2
--->  Attempting to fetch libxml2-2.9.13_0.darwin_20.arm64.tbz2 from https://packages.macports.org/libxml2
--->  Attempting to fetch libxml2-2.9.13_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/libxml2
--->  Installing libxml2 @2.9.13_0
--->  Activating libxml2 @2.9.13_0
--->  Cleaning libxml2
--->  Fetching archive for xorg-xcb-proto
--->  Attempting to fetch xorg-xcb-proto-1.14.1_0+python310.darwin_20.noarch.tbz2 from https://packages.macports.org/xorg-xcb-proto
--->  Attempting to fetch xorg-xcb-proto-1.14.1_0+python310.darwin_20.noarch.tbz2.rmd160 from https://packages.macports.org/xorg-xcb-proto
--->  Installing xorg-xcb-proto @1.14.1_0+python310
--->  Activating xorg-xcb-proto @1.14.1_0+python310
--->  Cleaning xorg-xcb-proto
--->  Fetching archive for xorg-libxcb
--->  Attempting to fetch xorg-libxcb-1.14_0+python310.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libxcb
--->  Attempting to fetch xorg-libxcb-1.14_0+python310.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libxcb
--->  Installing xorg-libxcb @1.14_0+python310
--->  Activating xorg-libxcb @1.14_0+python310
--->  Cleaning xorg-libxcb
--->  Fetching archive for xorg-libX11
--->  Attempting to fetch xorg-libX11-1.7.3.1_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libX11
--->  Attempting to fetch xorg-libX11-1.7.3.1_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libX11
--->  Installing xorg-libX11 @1.7.3.1_0
--->  Activating xorg-libX11 @1.7.3.1_0
--->  Cleaning xorg-libX11
--->  Fetching archive for xorg-libXfixes
--->  Attempting to fetch xorg-libXfixes-6.0.0_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXfixes
--->  Attempting to fetch xorg-libXfixes-6.0.0_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXfixes
--->  Installing xorg-libXfixes @6.0.0_0
--->  Activating xorg-libXfixes @6.0.0_0
--->  Cleaning xorg-libXfixes
--->  Fetching archive for xorg-libXdamage
--->  Attempting to fetch xorg-libXdamage-1.1.5_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXdamage
--->  Attempting to fetch xorg-libXdamage-1.1.5_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXdamage
--->  Installing xorg-libXdamage @1.1.5_0
--->  Activating xorg-libXdamage @1.1.5_0
--->  Cleaning xorg-libXdamage
--->  Fetching archive for xorg-libXext
--->  Attempting to fetch xorg-libXext-1.3.4_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXext
--->  Attempting to fetch xorg-libXext-1.3.4_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXext
--->  Installing xorg-libXext @1.3.4_0
--->  Activating xorg-libXext @1.3.4_0
--->  Cleaning xorg-libXext
--->  Fetching archive for xorg-libXi
--->  Attempting to fetch xorg-libXi-1.7.10_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXi
--->  Attempting to fetch xorg-libXi-1.7.10_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXi
--->  Installing xorg-libXi @1.7.10_0
--->  Activating xorg-libXi @1.7.10_0
--->  Cleaning xorg-libXi
--->  Fetching archive for xorg-libice
--->  Attempting to fetch xorg-libice-1.0.10_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libice
--->  Attempting to fetch xorg-libice-1.0.10_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libice
--->  Installing xorg-libice @1.0.10_0
--->  Activating xorg-libice @1.0.10_0
--->  Cleaning xorg-libice
--->  Fetching archive for xorg-libsm
--->  Attempting to fetch xorg-libsm-1.2.3_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libsm
--->  Attempting to fetch xorg-libsm-1.2.3_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libsm
--->  Installing xorg-libsm @1.2.3_0
--->  Activating xorg-libsm @1.2.3_0
--->  Cleaning xorg-libsm
--->  Fetching archive for xorg-libXt
--->  Attempting to fetch xorg-libXt-1.2.1_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXt
--->  Attempting to fetch xorg-libXt-1.2.1_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXt
--->  Installing xorg-libXt @1.2.1_0
--->  Activating xorg-libXt @1.2.1_0
--->  Cleaning xorg-libXt
--->  Fetching archive for xorg-libXmu
--->  Attempting to fetch xorg-libXmu-1.1.3_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXmu
--->  Attempting to fetch xorg-libXmu-1.1.3_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXmu
--->  Installing xorg-libXmu @1.1.3_0
--->  Activating xorg-libXmu @1.1.3_0
--->  Cleaning xorg-libXmu
--->  Fetching archive for xorg-libXxf86vm
--->  Attempting to fetch xorg-libXxf86vm-1.1.4_1.darwin_20.arm64.tbz2 from https://packages.macports.org/xorg-libXxf86vm
--->  Attempting to fetch xorg-libXxf86vm-1.1.4_1.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/xorg-libXxf86vm
--->  Installing xorg-libXxf86vm @1.1.4_1
--->  Activating xorg-libXxf86vm @1.1.4_1
--->  Cleaning xorg-libXxf86vm
--->  Fetching archive for mesa
--->  Attempting to fetch mesa-19.0.8_1+osmesa+python27.darwin_20.arm64.tbz2 from https://packages.macports.org/mesa
--->  Attempting to fetch mesa-19.0.8_1+osmesa+python27.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/mesa
--->  Installing mesa @19.0.8_1+osmesa+python27
--->  Activating mesa @19.0.8_1+osmesa+python27
--->  Cleaning mesa
--->  Fetching archive for glxgears
--->  Attempting to fetch glxgears-8.4.0_0.darwin_20.arm64.tbz2 from https://packages.macports.org/glxgears
--->  Attempting to fetch glxgears-8.4.0_0.darwin_20.arm64.tbz2.rmd160 from https://packages.macports.org/glxgears
--->  Installing glxgears @8.4.0_0
--->  Activating glxgears @8.4.0_0
--->  Cleaning glxgears
--->  Updating database of binaries
--->  Scanning binaries for linking errors
--->  No broken files found.
--->  No broken ports found.
martin@osxm1 ~/D/j/external (master)> glxgears
Error: couldn't open display (null)
martin@osxm1 ~/D/j/external (master) [255]> glxgears -info
Error: couldn't open display (null)
martin@osxm1 ~/D/j/external (master) [255]> glxgears -display
Error: couldn't open display (null)
martin@osxm1 ~/D/j/external (master) [255]> man glxgears
No manual entry for glxgears

I installed XQuartz on this Apple M1 and can now get glxgears working.

It does not solved my java program still loading Metal out of the box, but I’ll investigate if it requires any additional PATH re-configuration to ensure XQuartz libs get called before Metal.

For now glxinfo says

martin@osxm1 ~/D/j/external (master) [1]> glxinfo
name of display: /private/tmp/com.apple.launchd.1HsjwmLsBd/org.xquartz:0
display: /private/tmp/com.apple.launchd.1HsjwmLsBd/org.xquartz:0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_OML_swap_method, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_SGI_make_current_read
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_profile, GLX_ARB_create_context_robustness, 
    GLX_ARB_fbconfig_float, GLX_ARB_framebuffer_sRGB, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_buffer_age, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile, 
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, 
    GLX_EXT_visual_rating, GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read
OpenGL vendor string: Apple
OpenGL renderer string: Apple M1
OpenGL version string: 2.1 Metal - 71.6.4
OpenGL shading language version string: 1.20

You’ll likely have to compile glxinfo yourself, linking against your mesa/libgl.

Also try __GLX_VENDOR_LIBRARY_NAME=mesa

Thanks @Atemu.

Unfortunately the __GLX_VENDOR_LIBRARY_NAME=mesa does not change anything.

I ran otool on glxgears to check its dependencies and found that the GL libraries are those installed in MacPorts directory so I assume it is Mesa’s GL being used as imported from MacPorts (otherwise one would see a more conventional MacOS path like /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib). I have no real proof that this libGL is Mesa’s one though.

martin@osxm1 ~/D/j/e/mesa-demos (main)> otool -L /opt/local/bin/glxgears
/opt/local/bin/glxgears:
	/opt/local/lib/libGL.1.dylib (compatibility version 4.0.0, current version 4.0.0)
	/opt/local/lib/libX11.6.dylib (compatibility version 11.0.0, current version 11.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)

And also

martin@osxm1 ~/D/j/e/mesa-demos (main) [1]> otool -L /opt/local/bin/glxinfo
/opt/local/bin/glxinfo:
	/opt/local/lib/libGL.1.dylib (compatibility version 4.0.0, current version 4.0.0)
	/opt/local/lib/libX11.6.dylib (compatibility version 11.0.0, current version 11.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)

I then verified libGL

martin@osxm1 ~/D/j/e/mesa-demos (main)> otool -L /opt/local/lib/libGL.1.dylib
/opt/local/lib/libGL.1.dylib:
	/opt/local/lib/libGL.1.dylib (compatibility version 4.0.0, current version 4.0.0)
	/opt/local/lib/libexpat.1.dylib (compatibility version 8.0.0, current version 8.12.0)
	/usr/lib/libXplugin.1.dylib (compatibility version 1.0.0, current version 1.0.0)
	/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
	/opt/local/lib/libglapi.0.dylib (compatibility version 1.0.0, current version 1.0.0)
	/opt/local/lib/libXext.6.dylib (compatibility version 11.0.0, current version 11.0.0)
	/opt/local/lib/libXdamage.1.dylib (compatibility version 3.0.0, current version 3.0.0)
	/opt/local/lib/libXfixes.3.dylib (compatibility version 5.0.0, current version 5.0.0)
	/opt/local/lib/libX11-xcb.1.dylib (compatibility version 2.0.0, current version 2.0.0)
	/opt/local/lib/libX11.6.dylib (compatibility version 11.0.0, current version 11.0.0)
	/opt/local/lib/libxcb.1.dylib (compatibility version 3.0.0, current version 3.0.0)
	/opt/local/lib/libxcb-glx.0.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.0.0)
	/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 54.0.0)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1770.106.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 904.4.0)

Yet, we don’t know if the imported libGL was built with the -Dglx=xlib so it is worth trying to build a glxgear/glxinfo linking to the previous Mesa build that I succeeded to run (which was made with meson builddir/ -Dosmesa=true -Dglx=xlib -Dgallium-drivers=swrast -Ddri-drivers=[] -Dvulkan-drivers=[] -Dprefix=/Users/Martin/Dev/jzy3d/external/osmesa).

Where did you get glxinfo from? I unfortunately can’t build Mesa’s demo found here successfully.

configure fails as follow

martin@osxm1 ~/D/j/e/mesa-demos (main)> ./configure.ac
./configure.ac: line 25: dnl: command not found
./configure.ac: line 27: syntax error near unexpected token `[2.59]'

cmake fails as follow

martin@osxm1 ~/D/j/e/mesa-demos-build (master)> make
[  0%] Building C object src/glad/CMakeFiles/glad.dir/src/glad.c.o
[  0%] Linking C static library libglad.a
[  0%] Built target glad
[  0%] Building C object src/util/CMakeFiles/util.dir/readtex.c.o
[  0%] Building C object src/util/CMakeFiles/util.dir/shaderutil.c.o
/Users/martin/Dev/jzy3d/external/mesa-demos/src/util/shaderutil.c:45:13: error: variable has incomplete type 'void'
static void GLAPIENTRY
            ^
/Users/martin/Dev/jzy3d/external/mesa-demos/src/glad/include/glad/glad.h:895:20: note: expanded from macro 'GLAPIENTRY'
#define GLAPIENTRY APIENTRY
                   ^
/Users/martin/Dev/jzy3d/external/mesa-demos/src/util/shaderutil.c:45:23: error: expected ';' after top level declarator
static void GLAPIENTRY
                      ^
                      ;
2 errors generated.
make[2]: *** [src/util/CMakeFiles/util.dir/shaderutil.c.o] Error 1
make[1]: *** [src/util/CMakeFiles/util.dir/all] Error 2
make: *** [all] Error 2

One funny thing though is that enabling LIBGL_ALWAYS_SOFTWARE - which I though was a Mesa only environment variable lead to Apple Software rendering activation.

export LIBGL_ALWAYS_SOFTWARE=true
martin@osxm1 ~/D/j/external (master)> glxinfo | head -n 50
...
OpenGL vendor string: Apple Inc.
OpenGL renderer string: Apple Software Renderer
OpenGL version string: 2.1 APPLE-18.5.9
OpenGL shading language version string: 1.20

export LIBGL_ALWAYS_SOFTWARE=false
martin@osxm1 ~/D/j/external (master)> glxinfo | head -n 50
...
OpenGL vendor string: Apple
OpenGL renderer string: Apple M1
OpenGL version string: 2.1 Metal - 71.6.4
OpenGL shading language version string: 1.20

Yeah, you have to build glxinfo yourself and link against your mesa. You could probably also inject your mesa via DYLD_INSERT_LIBRARIES but I’ve never used it successfully.
Its build system seems majorly broken and I haven’t gotten it to work either but you can just run the compiler manually:

cc -lgl -lX11 glinfo_common.c glxinfo.c -o glxinfo

Then

DISPLAY=:0 ./glxinfo -B

should print llvmpipe info.

1 Like

Thanks again for your suggestions. I was able to build but the program fails at execution with an error I can not resolve.

martin@osxm1 ~/D/j/e/mesa-demos > DISPLAY=:0 ./build/glxinfo -B

name of display: :0
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  149 ()
  Minor opcode of failed request:  34
  Serial number of failed request:  7
  Current serial number in output stream:  7

I found ways to clarify these error codes here:

  • running xdpyinfo -queryExt | grep opcode returns that the error involves the GLX extension (... GLX (opcode: 149, base event: 102, base error: 161) ...)
  • then minor opcode 34 seams to be provided here and meaning GLX:CreateContextAttribsARB.
  • the serial number of failed request 7 lead to R007 GLX:QueryVersion

For information I slightly modified the build command you suggested as follow

mkdir build/

# export path_to_mesa:path_to_macport_libraries:path_to_XQuartz
export C_INCLUDE_PATH=/Users/Martin/Dev/jzy3d/external/osmesa/include:/opt/local/include/:/opt/X11/include
export CPLUS_INCLUDE_PATH=/Users/Martin/Dev/jzy3d/external/osmesa/include:/opt/local/include/:/opt/X11/include
export LIBRARY_PATH=/Users/Martin/Dev/jzy3d/external/osmesa/lib:/opt/local/lib/:/opt/X11/lib

gcc -lgl -lX11 src/xdemos/glinfo_common.c src/xdemos/glxinfo.c -o build/glxinfo

The same problem occured when using path /opt/X11/lib (macports) and removing /opt/local/lib/ (macports).

One thing I noticed is that XQuartz has a libGL.dylib in /opt/X11/lib/

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.