Skip to content
  • Zhigang Gong's avatar
    GLX: Enable glx support. · 430bc16c
    Zhigang Gong authored and Emma Anholt's avatar Emma Anholt committed
    
    
    If we are using MESA as our GL library, then both xserver's
    GLX and glamor are link to the same library. As xserver's
    GLX has its own _glapi_get/set_context/dispatch etc, and it
    is a simplified version derived from mesa thus is not
    sufficient for mesa/egl's dri loader which is used by glamor.
    
    Then if glx module is loaded before glamoregl module, the
    initialization of mesa/egl/opengl will not be correct, and
    will fail at a very early stage, most likely fail to map
    the element buffer.
    
    Two methodis to fix this problem, first is to modify the xserver's
    glx's glapi.c to fit mesa's requirement. The second is to put
    a glamor.conf as below, to the system's xorg.conf path.
    
    Section "Module"
            Load  "glamoregl"
    EndSection
    
    Then glamor will be loaded firstly, and the mesa's libglapi.so
    will be used. As current xserver's dispatch table is the same
    as mesa's, then the glx's dri loader can work without problem.
    
    We took the second method as it don't need any change to xorg.:)
    Although this is not a graceful implementation as it depends
    on the xserver's dispatch table and the mesa's dispatch table
    is the same and the context set and get is using the same method.
    Anyway it works.
    
    As by default, xserver will enable GLX_USE_TLS. But mesa will not
    enable it, you may need to enable that when build mesa.
    
    Three pre-requirements to make this glamor version work:
    
    0. Make sure xserver has commit 66e603, if not please pull the latest
       master branch.
    1. Rebuild mesa by enable GLX_USE_TLS.
    2. Put the glamor.conf to your system's xorg.conf path and make sure
       it loaded prior to glx module.
    
    Preliminary testing shows indirect glxgears works fine.
    
    If user want to use GLES2 for glamor by using MESA, GLX will not
    work correctly.
    
    If you are not using normal MESA, for example PVR's private GLES
    implementation, then it should be ok to use GLES2 glamor and the
    GLX should work as expected. In this commit, I use gbm to check
    whether we are using MESA or non-mesa. Maybe not the best way.
    
    Signed-off-by: default avatarZhigang Gong <zhigang.gong@linux.intel.com>
    430bc16c