Enable OpenGL software rendering on macOS

Alyssa Rosenzweig alyssa at collabora.com
Wed May 4 11:34:16 UTC 2022

Having spent enough time wrangling Mesa/MacOS on Arm Macs....

the correct solution is to migrate to Linux. everything else is pain.

On Wed, May 04, 2022 at 12:38:55AM +0000, Jose Fonseca wrote:
>    I'm not sure exactly what Homebrew provides, and I'm not able to
>    investigate it now.
>    Yes, using Mesa software rendering to fill the void left by Opengl
>    deprecation makes some sense.   But note is still software rendering, not
>    GPU accelerated.  And one needs to consider the x86 -> arm.
>    You could consider somehow integrating jogl with osmesa -- offscreen
>    rendering -Mesa -- which builds and runs pretty much anywhere Mesa builds
>    -- thereby bypassing the headaches of integrating with mac specifics
>    technologies such as CGL and Cocoa
>    There are also other alternatives with considering, such
>    as https://moltengl.com/moltengl/
>    Jose
>    Get Outlook for Android
>      ----------------------------------------------------------------------
>    From: Martin Pernollet <martin.pernollet at protonmail.com>
>    Sent: Monday, May 2, 2022 1:31:43 AM
>    To: Jose Fonseca <jfonseca at vmware.com>
>    Cc: mesa-dev at lists.freedesktop.org <mesa-dev at lists.freedesktop.org>
>    Subject: Re: Enable OpenGL software rendering on macOS
>    ** External Email
>    Hi Jose,
>    Many thanks for your answer.
>    JOGL classes enabling GL binding macOS all refer to CGL, so yes, I think I
>    want to rely on CGL (there is however in JOGL a couple of classes allowing
>    to work with X11, but they're used on Linux only).
>    I can't access the Apple M1 on which I built Mesa right now, but homebrew
>    on another macOS provides libGL and not libGLX.
>    ls /usr/local/Cellar/mesa/21.1.2/lib
>    dri  libGL.dylib  libGLESv1_CM.dylib  libGLESv2.dylib  libglapi.dylib
>    libGL.1.dylib  libGLESv1_CM.1.dylib  libGLESv2.2.dylib  libglapi.0.dylib 
>    pkgconfig
>    One motivation for enabling Mesa on macOS is actually the deprecated
>    status of OpenGL. I would expect this software implementation of GL to
>    simply provide an image to be copied to a native window/frame, without
>    having to rely on CGL. Hence, one could continue working with simple
>    OpenGL even if macOS doesn't provide such API.
>    Does it sound reasonable? 
>    Martin
>    Envoye avec la messagerie securisee ProtonMail.
>    ------- Original Message -------
>    Le vendredi 29 avril 2022 a 16:08, Jose Fonseca <jfonseca at vmware.com> a
>    ecrit :
>      The difficulty with OpenGL on macOS is that all driver interfaces are
>      both undocumented and deprecated.
>      If you want to override the system OpenGL, you can use apitrace code as
>      reference.  There are two approaches:
>       1. DYLD_FRAMEWORK_PATH  https://github.com/apitrace/apitrace/blob/master/cli/cli_trace.cpp
>       2. DYLD_INSERT_LIBRARIES https://github.com/apitrace/apitrace/tree/dyld-interpose (experimental
>          branch)
>      AFAIK, Mesa build for macOS generates a ibGLX which depends on X11,
>      which is probably not what you want.  You want to use Mesa for macOS
>      apps which use CGL as opposed to GLX, right?
>      So, if one wants to have a SW renderer on macOS with llvmpipe without
>      depending on X11, then one would need to implement:
>        * a new Gallium frontend that implements CGL API (equivalent to the
>          WGL frontend that exists for Windows)
>        * a new SW renderer winsys that draws pixels to Cocoa window somehow
>          (equivalent to the GDI winsys that draws to a Windows GDI surface) 
>      It's not a matter of just integrating existing components together --
>      there's lot of new code that would be need here -- I'd reckon 2 months
>      for somebody familiar with Mesa/macOS, 6 - 12 months for somebody more
>      novice.  And let's be frank, given mac deprecation of OpenGL and
>      migration away from Intel to Arm, the usefulness of this in the long
>      term is dubious.
>      Jose
>      ----------------------------------------------------------------------
>      From: mesa-dev <mesa-dev-bounces at lists.freedesktop.org> on behalf of
>      Martin Pernollet <martin.pernollet at protonmail.com>
>      Sent: Friday, April 29, 2022 12:32
>      To: mesa-dev at lists.freedesktop.org <mesa-dev at lists.freedesktop.org>
>      Subject: Enable OpenGL software rendering on macOS
>      ** External Email
>      TLDR : I failed using Mesa software rendering on macOS. I am looking for
>      advice to invoke mesa's libGL.dylib without relying on macOS's system
>      GL.
>      Hi everyone,
>      I am building (java) software involving Mesa for CPU rendering. I use
>      CPU rendering as fallback when JOGL (OpenGL binding for Java) fail to
>      use the GPU natively. This is sometime the case for old Linux
>      distributions, this will certainly be frequent on macOS in the future
>      due to Apple's OpenGL deprecation.
>      Mesa CPU rendering is working great on Ubuntu (by enabling
>      LIBGL_ALWAYS_SOFTWARE=true) and Windows (by simply loading Mesa's DLL
>      instead of system DLL, no need to ask for software mode).
>      I however thrive to use Mesa's software rendering on macOS for the
>      following reasons
>        * Spying dynamic library load sequence shows that whenever Mesa's
>          libGL.dylib is loaded, Apple Metal and libGL.dylib are loaded
>          before, even when using DYLD tricks to ensure Mesa get loaded before
>          any other library (except the Java VM) [1] Someone says that Mesa's
>          macOS implementation relies on system GL [4]. I noticed that when
>          enabling LIBGL_ALWAYS_SOFTWARE=true, this activates Apple software
>          rendering but not Mesa's software rendering [5]. I wonder how I
>          could avoid this and use a pure Mesa's OpenGL implementation in this
>          situation. 
>        * When getting out of the java World
>             * Running a pre-built glxgear/glxinfo installed through MacPorts
>               only allows using Apple's libGL.dylib but not Mesa's
>               libGL.dylib [2]. 
>             * Building glxinfo myself by linking explicitely to Mesa's GL +
>               X11 lead to an X11 error that I am not able to depict [3].
>      This has been discussed already on Khronos community [1] but I have no
>      clue how to go further. I hope some experts here can help me solve this!
>      Thanks in advance,
>      Martin
>      [1] https://community.khronos.org/t/failing-to-load-mesa3d-on-macos-instead-of-macos-provided-opengl-library/108408
>      [2] https://community.khronos.org/t/failing-to-load-mesa3d-on-macos-instead-of-macos-provided-opengl-library/108408/14
>      [3] https://community.khronos.org/t/failing-to-load-mesa3d-on-macos-instead-of-macos-provided-opengl-library/108408/19
>      [4] https://community.khronos.org/t/how-to-use-opengl-on-zink-mesa-moltenvk-and-macos/108160/18
>      [5] https://community.khronos.org/t/failing-to-load-mesa3d-on-macos-instead-of-macos-provided-opengl-library/108408/17
>      ----------------------------------------------------------------------
>      ** External Email: This email originated from outside of the
>      organization. Do not click links or open attachments unless you
>      recognize the sender.

More information about the mesa-dev mailing list