xserver: Branch 'master' - 2 commits

Adam Jackson ajax at kemper.freedesktop.org
Wed Nov 15 15:00:53 UTC 2017


 glamor/glamor.c                    |    8 ++++++--
 glamor/glamor_priv.h               |    1 -
 glamor/glamor_vbo.c                |   13 ++++---------
 glx/glxcmds.c                      |    2 +-
 hw/kdrive/ephyr/ephyr_glamor_glx.c |   37 ++++++++-----------------------------
 5 files changed, 19 insertions(+), 42 deletions(-)

New commits:
commit 307c124d6bcfe26057767b2c0990dc9ac66b9c93
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Nov 14 15:59:35 2017 -0500

    glx: Only flush indirect contexts in MakeCurrent (v2)
    
    If the context is direct none of the GL commands were issued by this
    process, the server couldn't flush them even if it wanted to.
    
    v2: Fix embarassingly obvious boolean inversion (Michel Dänzer)
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 241abc6a5..061acb793 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -626,7 +626,7 @@ DoMakeCurrent(__GLXclientState * cl,
         /*
          ** Flush the previous context if needed.
          */
-        Bool need_flush = GL_TRUE;
+        Bool need_flush = !prevglxc->isDirect;
 #ifdef GLX_CONTEXT_RELEASE_BEHAVIOR_ARB
         if (prevglxc->releaseBehavior == GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB)
             need_flush = GL_FALSE;
commit 66e8eaa456a0f200c0649c56a2e34914daa88065
Author: Adam Jackson <ajax at redhat.com>
Date:   Thu Nov 2 16:10:50 2017 -0400

    glamor: Drop the non-VAO rendering path
    
    GLES spells this extension as GL_OES_vertex_array_object, but it is
    functionally equivalent to the GL_ARB version. Mesa has supported both
    since 9.0, let's go ahead and require it.
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Reviewed-by: Eric Anholt <eric at anholt.net>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index 9fd110ed2..4a41fe783 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -579,6 +579,12 @@ glamor_init(ScreenPtr screen, unsigned int flags)
         }
     }
 
+    if (!epoxy_has_gl_extension("GL_ARB_vertex_array_object") &&
+        !epoxy_has_gl_extension("GL_OES_vertex_array_object")) {
+        ErrorF("GL_{ARB,OES}_vertex_array_object required\n");
+        goto fail;
+    }
+
     glamor_priv->has_rw_pbo = FALSE;
     if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP)
         glamor_priv->has_rw_pbo = TRUE;
@@ -605,8 +611,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
         glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP ||
         epoxy_gl_version() >= 30 ||
         epoxy_has_gl_extension("GL_NV_pack_subimage");
-    glamor_priv->has_vertex_array_object =
-        epoxy_has_gl_extension("GL_ARB_vertex_array_object");
     glamor_priv->has_dual_blend =
         epoxy_has_gl_extension("GL_ARB_blend_func_extended");
 
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index ce50abd04..2344066cb 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -197,7 +197,6 @@ typedef struct glamor_screen_private {
     Bool has_unpack_subimage;
     Bool has_rw_pbo;
     Bool use_quads;
-    Bool has_vertex_array_object;
     Bool has_dual_blend;
     Bool has_texture_swizzle;
     Bool is_core_profile;
diff --git a/glamor/glamor_vbo.c b/glamor/glamor_vbo.c
index 2799e1b63..734189fa2 100644
--- a/glamor/glamor_vbo.c
+++ b/glamor/glamor_vbo.c
@@ -174,11 +174,8 @@ glamor_init_vbo(ScreenPtr screen)
     glamor_make_current(glamor_priv);
 
     glGenBuffers(1, &glamor_priv->vbo);
-    if (glamor_priv->has_vertex_array_object) {
-        glGenVertexArrays(1, &glamor_priv->vao);
-        glBindVertexArray(glamor_priv->vao);
-    } else
-        glamor_priv->vao = 0;
+    glGenVertexArrays(1, &glamor_priv->vao);
+    glBindVertexArray(glamor_priv->vao);
 }
 
 void
@@ -188,10 +185,8 @@ glamor_fini_vbo(ScreenPtr screen)
 
     glamor_make_current(glamor_priv);
 
-    if (glamor_priv->vao != 0) {
-        glDeleteVertexArrays(1, &glamor_priv->vao);
-        glamor_priv->vao = 0;
-    }
+    glDeleteVertexArrays(1, &glamor_priv->vao);
+    glamor_priv->vao = 0;
     if (!glamor_priv->has_map_buffer_range)
         free(glamor_priv->vb);
 }
diff --git a/hw/kdrive/ephyr/ephyr_glamor_glx.c b/hw/kdrive/ephyr/ephyr_glamor_glx.c
index 007123c31..3fdc6663c 100644
--- a/hw/kdrive/ephyr/ephyr_glamor_glx.c
+++ b/hw/kdrive/ephyr/ephyr_glamor_glx.c
@@ -208,13 +208,6 @@ ephyr_glamor_set_vertices(struct ephyr_glamor *glamor)
     glEnableVertexAttribArray(glamor->texture_shader_texcoord_loc);
 }
 
-static void
-ephyr_glamor_clear_vertices(struct ephyr_glamor *glamor)
-{
-    glDisableVertexAttribArray(glamor->texture_shader_position_loc);
-    glDisableVertexAttribArray(glamor->texture_shader_texcoord_loc);
-}
-
 void
 ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor,
                               struct pixman_region16 *damage)
@@ -230,13 +223,8 @@ ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor,
 
     glXMakeCurrent(dpy, glamor->glx_win, glamor->ctx);
 
-    if (glamor->vao) {
-        glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vao);
-        glBindVertexArray(glamor->vao);
-    } else {
-        glBindBuffer(GL_ARRAY_BUFFER, glamor->vbo);
-        ephyr_glamor_set_vertices(glamor);
-    }
+    glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vao);
+    glBindVertexArray(glamor->vao);
 
     glBindFramebuffer(GL_FRAMEBUFFER, 0);
     glUseProgram(glamor->texture_shader);
@@ -248,10 +236,7 @@ ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor,
     glBindTexture(GL_TEXTURE_2D, glamor->tex);
     glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
 
-    if (glamor->vao)
-        glBindVertexArray(old_vao);
-    else
-        ephyr_glamor_clear_vertices(glamor);
+    glBindVertexArray(old_vao);
 
     glXSwapBuffers(dpy, glamor->glx_win);
 }
@@ -374,23 +359,17 @@ ephyr_glamor_glx_screen_init(xcb_window_t win)
     glamor->glx_win = glx_win;
     ephyr_glamor_setup_texturing_shader(glamor);
 
-    if (epoxy_has_gl_extension("GL_ARB_vertex_array_object")) {
-        glGenVertexArrays(1, &glamor->vao);
-        glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vao);
-        glBindVertexArray(glamor->vao);
-    } else
-        glamor->vao = 0;
+    glGenVertexArrays(1, &glamor->vao);
+    glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vao);
+    glBindVertexArray(glamor->vao);
 
     glGenBuffers(1, &glamor->vbo);
 
     glBindBuffer(GL_ARRAY_BUFFER, glamor->vbo);
     glBufferData(GL_ARRAY_BUFFER, sizeof (position), position, GL_STATIC_DRAW);
 
-    if (glamor->vao) {
-        ephyr_glamor_set_vertices(glamor);
-        glBindVertexArray(old_vao);
-    } else
-        glBindBuffer(GL_ARRAY_BUFFER, 0);
+    ephyr_glamor_set_vertices(glamor);
+    glBindVertexArray(old_vao);
 
     return glamor;
 }


More information about the xorg-commit mailing list