From 9999a660135fafe5f1fdf9452e5ca74ffb069dc2 Mon Sep 17 00:00:00 2001 From: Markus Wick Date: Thu, 13 Mar 2014 11:17:39 +0100 Subject: [PATCH] glamor: don't reset the GLSL program We don't use fixed function rendering, so there is no need to reset the program at all. This lets the driver avoid checking for state changes between draw calls when we rebind the same program. Improves xephyr x11perf -f8text performance by 6.03062% +/- 1.64928% (n=20) Signed-off-by: Eric Anholt Reviewed-by: Eric Anholt --- glamor/glamor_copyarea.c | 1 - glamor/glamor_core.c | 2 -- glamor/glamor_fill.c | 1 - glamor/glamor_glyphblt.c | 2 -- glamor/glamor_gradient.c | 8 -------- glamor/glamor_pixmap.c | 2 -- glamor/glamor_render.c | 1 - glamor/glamor_tile.c | 2 -- glamor/glamor_trapezoid.c | 4 ---- glamor/glamor_xv.c | 1 - 10 files changed, 24 deletions(-) diff --git a/glamor/glamor_copyarea.c b/glamor/glamor_copyarea.c index 0b170dc797..996611c6c3 100644 --- a/glamor/glamor_copyarea.c +++ b/glamor/glamor_copyarea.c @@ -205,7 +205,6 @@ glamor_copy_n_to_n_textured(DrawablePtr src, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); /* The source texture is bound to a fbo, we have to flush it here. */ glamor_put_context(glamor_priv); glamor_priv->state = RENDER_STATE; diff --git a/glamor/glamor_core.c b/glamor/glamor_core.c index 9e07b2b61a..6c0b3c8343 100644 --- a/glamor/glamor_core.c +++ b/glamor/glamor_core.c @@ -289,7 +289,6 @@ glamor_init_finish_access_shaders(ScreenPtr screen) glUniform1i(sampler_uniform_location, 0); glUniform1i(glamor_priv->finish_access_revert[0], 0); glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); - glUseProgram(0); glamor_priv->finish_access_revert[1] = glGetUniformLocation(glamor_priv->finish_access_prog[1], "revert"); @@ -301,7 +300,6 @@ glamor_init_finish_access_shaders(ScreenPtr screen) glUniform1i(glamor_priv->finish_access_revert[1], 0); glUniform1i(sampler_uniform_location, 0); glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); - glUseProgram(0); glamor_put_context(glamor_priv); } diff --git a/glamor/glamor_fill.c b/glamor/glamor_fill.c index e58b336df3..7461b62fa7 100644 --- a/glamor/glamor_fill.c +++ b/glamor/glamor_fill.c @@ -258,7 +258,6 @@ _glamor_solid_boxes(PixmapPtr pixmap, BoxPtr box, int nbox, float *color) free(vertices); glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - glUseProgram(0); glamor_put_context(glamor_priv); glamor_priv->state = RENDER_STATE; glamor_priv->render_idle_cnt = 0; diff --git a/glamor/glamor_glyphblt.c b/glamor/glamor_glyphblt.c index 5d785a0698..a58cef907a 100644 --- a/glamor/glamor_glyphblt.c +++ b/glamor/glamor_glyphblt.c @@ -156,7 +156,6 @@ glamor_poly_glyph_blt_pixels(DrawablePtr drawable, GCPtr gc, } glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - glUseProgram(0); glamor_put_context(glamor_priv); @@ -328,7 +327,6 @@ glamor_push_pixels_points(GCPtr gc, PixmapPtr bitmap, glDrawArrays(GL_POINTS, 0, num_points); glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - glUseProgram(0); glamor_put_context(glamor_priv); diff --git a/glamor/glamor_gradient.c b/glamor/glamor_gradient.c index 0769eaeaa4..f77d6a8e3b 100644 --- a/glamor/glamor_gradient.c +++ b/glamor/glamor_gradient.c @@ -379,8 +379,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, glamor_link_glsl_prog(screen, gradient_prog, "radial gradient"); - glUseProgram(0); - if (dyn_gen) { index = 2; glamor_priv->radial_max_nstops = stops_count; @@ -592,8 +590,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, glamor_link_glsl_prog(screen, gradient_prog, "linear gradient"); - glUseProgram(0); - if (dyn_gen) { index = 2; glamor_priv->linear_max_nstops = stops_count; @@ -1169,7 +1165,6 @@ glamor_generate_radial_gradient_picture(ScreenPtr screen, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); return dst_picture; @@ -1191,7 +1186,6 @@ glamor_generate_radial_gradient_picture(ScreenPtr screen, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); return NULL; } @@ -1522,7 +1516,6 @@ glamor_generate_linear_gradient_picture(ScreenPtr screen, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); return dst_picture; @@ -1544,7 +1537,6 @@ glamor_generate_linear_gradient_picture(ScreenPtr screen, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); return NULL; } diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c index 1c258a2b87..615faad330 100644 --- a/glamor/glamor_pixmap.c +++ b/glamor/glamor_pixmap.c @@ -856,7 +856,6 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - glUseProgram(0); glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDeleteTextures(1, &tex); @@ -1181,7 +1180,6 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); return temp_fbo; } diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c index 2496f84292..c0ee22c2fa 100644 --- a/glamor/glamor_render.c +++ b/glamor/glamor_render.c @@ -1335,7 +1335,6 @@ glamor_composite_with_shader(CARD8 op, glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); glDisable(GL_BLEND); DEBUGF("finish rendering.\n"); - glUseProgram(0); glamor_priv->state = RENDER_STATE; glamor_priv->render_idle_cnt = 0; if (saved_source_format) diff --git a/glamor/glamor_tile.c b/glamor/glamor_tile.c index ba7f11fc70..9e115cad17 100644 --- a/glamor/glamor_tile.c +++ b/glamor/glamor_tile.c @@ -82,7 +82,6 @@ glamor_init_tile_shader(ScreenPtr screen) glamor_priv->tile_wh = glGetUniformLocation(glamor_priv->tile_prog, "wh"); - glUseProgram(0); glamor_put_context(glamor_priv); } @@ -156,7 +155,6 @@ _glamor_tile(PixmapPtr pixmap, PixmapPtr tile, glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - glUseProgram(0); glamor_put_context(glamor_priv); glamor_priv->state = RENDER_STATE; diff --git a/glamor/glamor_trapezoid.c b/glamor/glamor_trapezoid.c index 9c39740b6a..969ab68bc6 100644 --- a/glamor/glamor_trapezoid.c +++ b/glamor/glamor_trapezoid.c @@ -982,7 +982,6 @@ _glamor_trapezoids_with_shader(CARD8 op, glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); glDisable(GL_BLEND); - glUseProgram(0); glamor_put_context(glamor_priv); TRAPEZOID_OUT: @@ -1359,8 +1358,6 @@ glamor_init_trapezoid_shader(ScreenPtr screen) glamor_link_glsl_prog(screen, glamor_priv->trapezoid_prog, "trapezoid"); - glUseProgram(0); - glamor_put_context(glamor_priv); } @@ -1573,7 +1570,6 @@ _glamor_generate_trapezoid_with_shader(ScreenPtr screen, PicturePtr picture, glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - glUseProgram(0); glamor_put_context(glamor_priv); return TRUE; } diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c index c0219b03e3..17745a4e87 100644 --- a/glamor/glamor_xv.c +++ b/glamor/glamor_xv.c @@ -416,7 +416,6 @@ glamor_display_textured_video(glamor_port_private *port_priv) glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - glUseProgram(0); glamor_put_context(glamor_priv); DamageDamageRegion(port_priv->pDraw, &port_priv->clip); }