[PATCH xserver] glamor: Drop the non-VAO rendering path
Adam Jackson
ajax at redhat.com
Thu Nov 2 20:10:50 UTC 2017
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>
---
glamor/glamor.c | 8 ++++++--
glamor/glamor_priv.h | 1 -
glamor/glamor_vbo.c | 13 ++++---------
hw/kdrive/ephyr/ephyr_glamor_glx.c | 37 ++++++++-----------------------------
4 files changed, 18 insertions(+), 41 deletions(-)
diff --git a/glamor/glamor.c b/glamor/glamor.c
index b70759b65..eb9bfc53b 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -585,6 +585,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;
@@ -611,8 +617,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 ad54b3197..90c29cb74 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -198,7 +198,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;
}
--
2.14.3
More information about the xorg-devel
mailing list