[PATCH 3/7] Use the normal GL_QUADS drawing helper in the render code.

Eric Anholt eric at anholt.net
Fri Jun 19 19:09:37 PDT 2015


We use this for all of our other performance-sensitive rendering, too.

Signed-off-by: Eric Anholt <eric at anholt.net>
---
 glamor/glamor.c        |  1 -
 glamor/glamor_priv.h   |  7 +++----
 glamor/glamor_render.c | 50 ++++----------------------------------------------
 3 files changed, 7 insertions(+), 51 deletions(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index a951cec..0378388 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -554,7 +554,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 
     glamor_priv->saved_procs.destroy_picture = ps->DestroyPicture;
     ps->DestroyPicture = glamor_destroy_picture;
-    glamor_init_composite_shaders(screen);
 
     glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap;
     screen->SetWindowPixmap = glamor_set_window_pixmap;
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index 438d1e9..c80df22 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -248,8 +248,8 @@ typedef struct glamor_screen_private {
     int                         glyph_max_dim;
     char                        *glyph_defines;
 
-    /* vertext/elment_index buffer object for render */
-    GLuint vbo, ebo;
+    /** Vertex buffer for all GPU rendering. */
+    GLuint vbo;
     /** Next offset within the VBO that glamor_get_vbo_space() will use. */
     int vbo_offset;
     int vbo_size;
@@ -262,7 +262,7 @@ typedef struct glamor_screen_private {
     char *vb;
     int vb_stride;
     Bool has_source_coords, has_mask_coords;
-    int render_nr_verts;
+    int render_nr_quads;
     glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT]
         [SHADER_MASK_COUNT]
         [SHADER_IN_COUNT];
@@ -701,7 +701,6 @@ void glamor_composite(CARD8 op,
                       INT16 yMask,
                       INT16 xDst, INT16 yDst, CARD16 width, CARD16 height);
 
-void glamor_init_composite_shaders(ScreenPtr screen);
 void glamor_composite_rects(CARD8 op,
                             PicturePtr pDst,
                             xRenderColor *color, int nRect, xRectangle *rects);
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 1849cce..4a82534 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -379,41 +379,6 @@ glamor_lookup_composite_shader(ScreenPtr screen, struct
     return shader;
 }
 
-static void
-glamor_init_eb(unsigned short *eb, int vert_cnt)
-{
-    int i, j;
-
-    for (i = 0, j = 0; j < vert_cnt; i += 6, j += 4) {
-        eb[i] = j;
-        eb[i + 1] = j + 1;
-        eb[i + 2] = j + 2;
-        eb[i + 3] = j;
-        eb[i + 4] = j + 2;
-        eb[i + 5] = j + 3;
-    }
-}
-
-void
-glamor_init_composite_shaders(ScreenPtr screen)
-{
-    glamor_screen_private *glamor_priv;
-    unsigned short *eb;
-    int eb_size;
-
-    glamor_priv = glamor_get_screen_private(screen);
-    glamor_make_current(glamor_priv);
-    glGenBuffers(1, &glamor_priv->ebo);
-    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo);
-
-    eb_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(short) * 2;
-
-    eb = XNFalloc(eb_size);
-    glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT);
-    glBufferData(GL_ELEMENT_ARRAY_BUFFER, eb_size, eb, GL_STATIC_DRAW);
-    free(eb);
-}
-
 static Bool
 glamor_set_composite_op(ScreenPtr screen,
                         CARD8 op, struct blendinfo *op_info_result,
@@ -647,7 +612,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts)
     char *vbo_offset;
     float *vb;
 
-    glamor_priv->render_nr_verts = 0;
+    glamor_priv->render_nr_quads = 0;
     glamor_priv->vb_stride = 2 * sizeof(float);
     if (glamor_priv->has_source_coords)
         glamor_priv->vb_stride += 2 * sizeof(float);
@@ -689,17 +654,10 @@ glamor_flush_composite_rects(ScreenPtr screen)
 
     glamor_make_current(glamor_priv);
 
-    if (!glamor_priv->render_nr_verts)
+    if (!glamor_priv->render_nr_quads)
         return;
 
-    if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) {
-        glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts,
-                            (glamor_priv->render_nr_verts * 3) / 2,
-                            GL_UNSIGNED_SHORT, NULL);
-    } else {
-        glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2,
-                       GL_UNSIGNED_SHORT, NULL);
-    }
+    glamor_glDrawArrays_GL_QUADS(glamor_priv, glamor_priv->render_nr_quads);
 }
 
 int pict_format_combine_tab[][3] = {
@@ -1249,7 +1207,7 @@ glamor_composite_with_shader(CARD8 op,
                                                      vertices, vb_stride);
                 vertices += 2;
             }
-            glamor_priv->render_nr_verts += 4;
+            glamor_priv->render_nr_quads++;
             rects++;
 
             /* We've incremented by one of our 4 verts, now do the other 3. */
-- 
2.1.4



More information about the xorg-devel mailing list