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