summaryrefslogtreecommitdiff
path: root/glamor/glamor_xv.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-12-18 12:18:20 -0800
committerEric Anholt <eric@anholt.net>2014-02-14 18:28:56 -0800
commit0373b3f4f7c7aec633468b37f9236a2734dbcc74 (patch)
treebc4df39ca936d30ac1cf51dda0ce7e1f272aaab8 /glamor/glamor_xv.c
parentf34dc7fa96457ea6a0703493d74e63cca357712e (diff)
glamor: Convert to using libepoxy.
Libepoxy hides all the GL versus GLES2 dispatch handling for us, with higher performance. v2: Squash in the later patch to drop the later of two repeated glamor_get_dispatch()es instead (caught by keithp) Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'glamor/glamor_xv.c')
-rw-r--r--glamor/glamor_xv.c140
1 files changed, 64 insertions, 76 deletions
diff --git a/glamor/glamor_xv.c b/glamor/glamor_xv.c
index cbe07c8b1..89787a419 100644
--- a/glamor/glamor_xv.c
+++ b/glamor/glamor_xv.c
@@ -90,23 +90,22 @@ void
glamor_init_xv_shader(ScreenPtr screen)
{
glamor_screen_private *glamor_priv;
- glamor_gl_dispatch *dispatch;
GLint fs_prog, vs_prog;
glamor_priv = glamor_get_screen_private(screen);
- dispatch = glamor_get_dispatch(glamor_priv);
- glamor_priv->xv_prog = dispatch->glCreateProgram();
+ glamor_get_dispatch(glamor_priv);
+ glamor_priv->xv_prog = glCreateProgram();
- vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, xv_vs);
- fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, xv_ps);
- dispatch->glAttachShader(glamor_priv->xv_prog, vs_prog);
- dispatch->glAttachShader(glamor_priv->xv_prog, fs_prog);
+ vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xv_vs);
+ fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xv_ps);
+ glAttachShader(glamor_priv->xv_prog, vs_prog);
+ glAttachShader(glamor_priv->xv_prog, fs_prog);
- dispatch->glBindAttribLocation(glamor_priv->xv_prog,
- GLAMOR_VERTEX_POS, "v_position");
- dispatch->glBindAttribLocation(glamor_priv->xv_prog,
- GLAMOR_VERTEX_SOURCE, "v_texcoord0");
- glamor_link_glsl_prog(dispatch, glamor_priv->xv_prog);
+ glBindAttribLocation(glamor_priv->xv_prog,
+ GLAMOR_VERTEX_POS, "v_position");
+ glBindAttribLocation(glamor_priv->xv_prog,
+ GLAMOR_VERTEX_SOURCE, "v_texcoord0");
+ glamor_link_glsl_prog(glamor_priv->xv_prog);
glamor_put_dispatch(glamor_priv);
}
@@ -115,12 +114,11 @@ void
glamor_fini_xv_shader(ScreenPtr screen)
{
glamor_screen_private *glamor_priv;
- glamor_gl_dispatch *dispatch;
glamor_priv = glamor_get_screen_private(screen);
- dispatch = glamor_get_dispatch(glamor_priv);
+ glamor_get_dispatch(glamor_priv);
- dispatch->glDeleteProgram(glamor_priv->xv_prog);
+ glDeleteProgram(glamor_priv->xv_prog);
glamor_put_dispatch(glamor_priv);
}
@@ -278,7 +276,6 @@ glamor_display_textured_video(glamor_port_private *port_priv)
glamor_pixmap_private *pixmap_priv =
glamor_get_pixmap_private(port_priv->pPixmap);
glamor_pixmap_private *src_pixmap_priv[3];
- glamor_gl_dispatch *dispatch;
float vertices[32], texcoords[8];
BoxPtr box = REGION_RECTS(&port_priv->clip);
int nBox = REGION_NUM_RECTS(&port_priv->clip);
@@ -327,62 +324,53 @@ glamor_display_textured_video(glamor_port_private *port_priv)
&src_yscale[i]);
}
}
- dispatch = glamor_get_dispatch(glamor_priv);
- dispatch->glUseProgram(glamor_priv->xv_prog);
-
- uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "offsetyco");
- dispatch->glUniform4f(uloc, off[0], off[1], off[2], yco);
- uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "ucogamma");
- dispatch->glUniform4f(uloc, uco[0], uco[1], uco[2], gamma);
- uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "vco");
- dispatch->glUniform4f(uloc, vco[0], vco[1], vco[2], 0);
-
- dispatch->glActiveTexture(GL_TEXTURE0);
- dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- dispatch->glActiveTexture(GL_TEXTURE1);
- dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- dispatch->glActiveTexture(GL_TEXTURE2);
- dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- dispatch->glTexParameteri(GL_TEXTURE_2D,
- GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- sampler_loc =
- dispatch->glGetUniformLocation(glamor_priv->xv_prog, "y_sampler");
- dispatch->glUniform1i(sampler_loc, 0);
- sampler_loc =
- dispatch->glGetUniformLocation(glamor_priv->xv_prog, "u_sampler");
- dispatch->glUniform1i(sampler_loc, 1);
- sampler_loc =
- dispatch->glGetUniformLocation(glamor_priv->xv_prog, "v_sampler");
- dispatch->glUniform1i(sampler_loc, 2);
-
- dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2,
- GL_FLOAT, GL_FALSE,
- 2 * sizeof(float), texcoords);
- dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
-
- dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT,
- GL_FALSE, 2 * sizeof(float), vertices);
-
- dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
+ glamor_get_dispatch(glamor_priv);
+ glUseProgram(glamor_priv->xv_prog);
+
+ uloc = glGetUniformLocation(glamor_priv->xv_prog, "offsetyco");
+ glUniform4f(uloc, off[0], off[1], off[2], yco);
+ uloc = glGetUniformLocation(glamor_priv->xv_prog, "ucogamma");
+ glUniform4f(uloc, uco[0], uco[1], uco[2], gamma);
+ uloc = glGetUniformLocation(glamor_priv->xv_prog, "vco");
+ glUniform4f(uloc, vco[0], vco[1], vco[2], 0);
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ glActiveTexture(GL_TEXTURE1);
+ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ glActiveTexture(GL_TEXTURE2);
+ glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "y_sampler");
+ glUniform1i(sampler_loc, 0);
+ sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "u_sampler");
+ glUniform1i(sampler_loc, 1);
+ sampler_loc = glGetUniformLocation(glamor_priv->xv_prog, "v_sampler");
+ glUniform1i(sampler_loc, 2);
+
+ glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2,
+ GL_FLOAT, GL_FALSE,
+ 2 * sizeof(float), texcoords);
+ glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
+
+ glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT,
+ GL_FALSE, 2 * sizeof(float), vertices);
+
+ glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
for (i = 0; i < nBox; i++) {
float off_x = box[i].x1 - port_priv->drw_x;
float off_y = box[i].y1 - port_priv->drw_y;
@@ -418,13 +406,13 @@ glamor_display_textured_video(glamor_port_private *port_priv)
srcy + srch,
glamor_priv->yInverted, texcoords);
- dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
- dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
- dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
+ glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
+ glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
- dispatch->glUseProgram(0);
+ glUseProgram(0);
glamor_put_dispatch(glamor_priv);
DamageDamageRegion(port_priv->pDraw, &port_priv->clip);
}