xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Wed May 16 18:02:25 UTC 2018


 glamor/glamor.c |    8 ++++++++
 1 file changed, 8 insertions(+)

New commits:
commit 7437b6dbdee050f8ebb3a79b9077d051c91880c3
Author: Lukas F. Hartmann <lukas at mntmn.com>
Date:   Tue May 15 21:51:56 2018 +0200

    glamor_init: clamp GLSL to 120 if platform doesn't have instanced arrays
    
    Hi,
    
    I upgraded Xwayland and the assorted libraries from git masters today,
    and noticed that glamor wouldn't work anymore on i.MX6/etnaviv. The
    error was:
    
    No provider of glVertexAttribDivisor found.  Requires one of:
        Desktop OpenGL 3.3
        OpenGL ES 3.0
        GL extension "GL_ANGLE_instanced_arrays"
        GL extension "GL_ARB_instanced_arrays"
        GL extension "GL_EXT_instanced_arrays"
        GL extension "GL_NV_instanced_arrays"
    
    The problem is that etnaviv offers GLSL 140 on GL 2.1 and glamor
    rendering assumes that glVertexAttribDivisor() is always available on
    GLSL>=130, which is not the case here. Forcing GLSL 120 makes glamor
    work fine again on this platform. After chatting with ajax in
    #xorg-devel, the following solution was proposed.
    
    This is my first time of submitting a patch, so please excuse me and
    advise if I'm doing it wrong ;)
    
    Cheers
    Lukas (mntmn)
    Reviewed-by: Eric Anholt <eric at anholt.net>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index 86935ed98..d984d20f3 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -563,6 +563,14 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 
         if (!glamor_check_instruction_count(gl_version))
             goto fail;
+
+        /* Glamor rendering assumes that platforms with GLSL 130+
+         * have instanced arrays, but this is not always the case.
+         * etnaviv offers GLSL 140 with OpenGL 2.1.
+         */
+        if (glamor_priv->glsl_version >= 130 &&
+            !epoxy_has_gl_extension("GL_ARB_instanced_arrays"))
+                glamor_priv->glsl_version = 120;
     } else {
         if (gl_version < 20) {
             ErrorF("Require Open GLES2.0 or later.\n");


More information about the xorg-commit mailing list