glamor: Replace glamor_get/put_context() with just glamor_make_current().

Now that we have the DIX global state for the current context, we
don't need to track nesting to try to reduce MakeCurrent overhead.

v2: Fix a mistaken replacement of a put_context with make_current in
    glamor_fill_spans_gl() (caught by keithp).

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> (v1)
Reviewed-by: Adam Jackson <ajax@redhat.com> (v1)
This commit is contained in:
Eric Anholt 2014-03-14 17:31:18 -07:00
parent 11ff12d4e7
commit fab0a4a4c9
24 changed files with 81 additions and 223 deletions

View File

@ -248,11 +248,10 @@ glamor_block_handler(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->tick++; glamor_priv->tick++;
glFlush(); glFlush();
glamor_fbo_expire(glamor_priv); glamor_fbo_expire(glamor_priv);
glamor_put_context(glamor_priv);
if (glamor_priv->state == RENDER_STATE if (glamor_priv->state == RENDER_STATE
&& glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) { && glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) {
glamor_priv->state = IDLE_STATE; glamor_priv->state = IDLE_STATE;
@ -265,9 +264,8 @@ _glamor_block_handler(void *data, OSTimePtr timeout, void *last_select_mask)
{ {
glamor_screen_private *glamor_priv = data; glamor_screen_private *glamor_priv = data;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glFlush(); glFlush();
glamor_put_context(glamor_priv);
} }
static void static void

View File

@ -43,14 +43,7 @@ struct glamor_context {
/** The GLXDrawable we should MakeCurrent to */ /** The GLXDrawable we should MakeCurrent to */
uint32_t drawable_xid; uint32_t drawable_xid;
/** void (*make_current)(struct glamor_context *glamor_ctx);
* Count of how deep in glamor_get_context() we are, to reduce
* MakeCurrent calls.
*/
int get_count;
void (*get_context)(struct glamor_context *glamor_ctx);
void (*put_context)(struct glamor_context *glamor_ctx);
}; };
Bool glamor_glx_screen_init(struct glamor_context *glamor_ctx); Bool glamor_glx_screen_init(struct glamor_context *glamor_ctx);

View File

@ -70,7 +70,7 @@ glamor_copy_n_to_n_fbo_blit(DrawablePtr src,
pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off); pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off);
pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off); pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->base.fbo->fb); glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->base.fbo->fb);
glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off);
glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off);
@ -112,7 +112,6 @@ glamor_copy_n_to_n_fbo_blit(DrawablePtr src,
GL_COLOR_BUFFER_BIT, GL_NEAREST); GL_COLOR_BUFFER_BIT, GL_NEAREST);
} }
} }
glamor_put_context(glamor_priv);
glamor_priv->state = BLIT_STATE; glamor_priv->state = BLIT_STATE;
return TRUE; return TRUE;
} }
@ -155,7 +154,7 @@ glamor_copy_n_to_n_textured(DrawablePtr src,
glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv);
glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT,
@ -206,7 +205,6 @@ glamor_copy_n_to_n_textured(DrawablePtr src,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
/* The source texture is bound to a fbo, we have to flush it here. */ /* The source texture is bound to a fbo, we have to flush it here. */
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
return TRUE; return TRUE;
@ -367,12 +365,10 @@ _glamor_copy_n_to_n(DrawablePtr src,
if (gc) { if (gc) {
if (!glamor_set_planemask(dst_pixmap, gc->planemask)) if (!glamor_set_planemask(dst_pixmap, gc->planemask))
goto fall_back; goto fall_back;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (!glamor_set_alu(screen, gc->alu)) { if (!glamor_set_alu(screen, gc->alu)) {
glamor_put_context(glamor_priv);
goto fail; goto fail;
} }
glamor_put_context(glamor_priv);
} }
if (!src_pixmap_priv) { if (!src_pixmap_priv) {
@ -545,9 +541,8 @@ _glamor_copy_n_to_n(DrawablePtr src,
} }
fail: fail:
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_set_alu(screen, GXcopy); glamor_set_alu(screen, GXcopy);
glamor_put_context(glamor_priv);
if (ok) if (ok)
return TRUE; return TRUE;

View File

@ -241,7 +241,7 @@ glamor_init_finish_access_shaders(ScreenPtr screen)
char *source; char *source;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->finish_access_prog[0] = glCreateProgram(); glamor_priv->finish_access_prog[0] = glCreateProgram();
glamor_priv->finish_access_prog[1] = glCreateProgram(); glamor_priv->finish_access_prog[1] = glCreateProgram();
@ -300,7 +300,6 @@ glamor_init_finish_access_shaders(ScreenPtr screen)
glUniform1i(glamor_priv->finish_access_revert[1], 0); glUniform1i(glamor_priv->finish_access_revert[1], 0);
glUniform1i(sampler_uniform_location, 0); glUniform1i(sampler_uniform_location, 0);
glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); glUniform1i(glamor_priv->finish_access_swap_rb[1], 0);
glamor_put_context(glamor_priv);
} }
void void
@ -309,10 +308,9 @@ glamor_fini_finish_access_shaders(ScreenPtr screen)
glamor_screen_private *glamor_priv; glamor_screen_private *glamor_priv;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteProgram(glamor_priv->finish_access_prog[0]); glDeleteProgram(glamor_priv->finish_access_prog[0]);
glDeleteProgram(glamor_priv->finish_access_prog[1]); glDeleteProgram(glamor_priv->finish_access_prog[1]);
glamor_put_context(glamor_priv);
} }
void void
@ -341,11 +339,10 @@ glamor_finish_access(DrawablePtr drawable)
if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) { if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) {
assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo); glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo);
glamor_put_context(glamor_priv);
pixmap_priv->base.fbo->pbo_valid = FALSE; pixmap_priv->base.fbo->pbo_valid = FALSE;
pixmap_priv->base.fbo->pbo = 0; pixmap_priv->base.fbo->pbo = 0;

View File

@ -95,11 +95,8 @@ glamor_egl_get_screen_private(ScrnInfoPtr scrn)
} }
static void static void
glamor_egl_get_context(struct glamor_context *glamor_ctx) glamor_egl_make_current(struct glamor_context *glamor_ctx)
{ {
if (glamor_ctx->get_count++)
return;
eglMakeCurrent(glamor_ctx->display, EGL_NO_SURFACE, eglMakeCurrent(glamor_ctx->display, EGL_NO_SURFACE,
EGL_NO_SURFACE, EGL_NO_CONTEXT); EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (!eglMakeCurrent(glamor_ctx->display, if (!eglMakeCurrent(glamor_ctx->display,
@ -109,12 +106,6 @@ glamor_egl_get_context(struct glamor_context *glamor_ctx)
} }
} }
static void
glamor_egl_put_context(struct glamor_context *glamor_ctx)
{
--glamor_ctx->get_count;
}
static EGLImageKHR static EGLImageKHR
_glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl, _glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl,
int width, int height, int stride, int name, int depth) int width, int height, int stride, int name, int depth)
@ -166,7 +157,7 @@ glamor_create_texture_from_image(ScreenPtr screen,
struct glamor_screen_private *glamor_priv = struct glamor_screen_private *glamor_priv =
glamor_get_screen_private(screen); glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenTextures(1, texture); glGenTextures(1, texture);
glBindTexture(GL_TEXTURE_2D, *texture); glBindTexture(GL_TEXTURE_2D, *texture);
@ -176,8 +167,6 @@ glamor_create_texture_from_image(ScreenPtr screen,
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image); glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
} }
@ -290,7 +279,7 @@ glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride)
glamor_egl = glamor_egl_get_screen_private(scrn); glamor_egl = glamor_egl_get_screen_private(scrn);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (glamor_egl->has_gem) { if (glamor_egl->has_gem) {
if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR, xf86DrvMsg(scrn->scrnIndex, X_ERROR,
@ -320,7 +309,6 @@ glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride)
ret = TRUE; ret = TRUE;
done: done:
glamor_put_context(glamor_priv);
return ret; return ret;
} }
@ -340,7 +328,7 @@ glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo)
glamor_egl = glamor_egl_get_screen_private(scrn); glamor_egl = glamor_egl_get_screen_private(scrn);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
image = eglCreateImageKHR(glamor_egl->display, image = eglCreateImageKHR(glamor_egl->display,
glamor_egl->context, glamor_egl->context,
@ -356,7 +344,6 @@ glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo)
ret = TRUE; ret = TRUE;
done: done:
glamor_put_context(glamor_priv);
return ret; return ret;
} }
@ -414,7 +401,7 @@ glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen,
glamor_egl = glamor_egl_get_screen_private(scrn); glamor_egl = glamor_egl_get_screen_private(scrn);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
image = pixmap_priv->base.image; image = pixmap_priv->base.image;
if (!image) { if (!image) {
@ -449,7 +436,6 @@ glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen,
gbm_bo_destroy(bo); gbm_bo_destroy(bo);
failure: failure:
glamor_put_context(glamor_priv);
return fd; return fd;
#else #else
return -1; return -1;
@ -679,8 +665,7 @@ glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx)
glamor_ctx->ctx = glamor_egl->context; glamor_ctx->ctx = glamor_egl->context;
glamor_ctx->display = glamor_egl->display; glamor_ctx->display = glamor_egl->display;
glamor_ctx->get_context = glamor_egl_get_context; glamor_ctx->make_current = glamor_egl_make_current;
glamor_ctx->put_context = glamor_egl_put_context;
if (glamor_egl->dri3_capable) { if (glamor_egl->dri3_capable) {
/* Tell the core that we have the interfaces for import/export /* Tell the core that we have the interfaces for import/export

View File

@ -129,7 +129,7 @@ glamor_pixmap_fbo_cache_get(glamor_screen_private *glamor_priv,
void void
glamor_purge_fbo(glamor_pixmap_fbo *fbo) glamor_purge_fbo(glamor_pixmap_fbo *fbo)
{ {
glamor_get_context(fbo->glamor_priv); glamor_make_current(fbo->glamor_priv);
if (fbo->fb) if (fbo->fb)
glDeleteFramebuffers(1, &fbo->fb); glDeleteFramebuffers(1, &fbo->fb);
@ -137,7 +137,6 @@ glamor_purge_fbo(glamor_pixmap_fbo *fbo)
glDeleteTextures(1, &fbo->tex); glDeleteTextures(1, &fbo->tex);
if (fbo->pbo) if (fbo->pbo)
glDeleteBuffers(1, &fbo->pbo); glDeleteBuffers(1, &fbo->pbo);
glamor_put_context(fbo->glamor_priv);
free(fbo); free(fbo);
} }
@ -180,7 +179,7 @@ glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo)
{ {
int status; int status;
glamor_get_context(fbo->glamor_priv); glamor_make_current(fbo->glamor_priv);
if (fbo->fb == 0) if (fbo->fb == 0)
glGenFramebuffers(1, &fbo->fb); glGenFramebuffers(1, &fbo->fb);
@ -219,7 +218,6 @@ glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo)
FatalError("destination is framebuffer incomplete: %s [%x]\n", FatalError("destination is framebuffer incomplete: %s [%x]\n",
str, status); str, status);
} }
glamor_put_context(fbo->glamor_priv);
} }
glamor_pixmap_fbo * glamor_pixmap_fbo *
@ -241,9 +239,8 @@ glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv,
fbo->glamor_priv = glamor_priv; fbo->glamor_priv = glamor_priv;
if (flag == GLAMOR_CREATE_PIXMAP_MAP) { if (flag == GLAMOR_CREATE_PIXMAP_MAP) {
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenBuffers(1, &fbo->pbo); glGenBuffers(1, &fbo->pbo);
glamor_put_context(glamor_priv);
goto done; goto done;
} }
@ -341,14 +338,13 @@ _glamor_create_tex(glamor_screen_private *glamor_priv,
w, h); w, h);
} }
if (!tex) { if (!tex) {
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenTextures(1, &tex); glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex); glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0,
format, GL_UNSIGNED_BYTE, NULL); format, GL_UNSIGNED_BYTE, NULL);
glamor_put_context(glamor_priv);
} }
return tex; return tex;
} }

View File

@ -156,7 +156,7 @@ glamor_init_solid_shader(ScreenPtr screen)
GLint fs_prog, vs_prog; GLint fs_prog, vs_prog;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->solid_prog = glCreateProgram(); glamor_priv->solid_prog = glCreateProgram();
vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, solid_vs); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, solid_vs);
fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, solid_fs); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, solid_fs);
@ -169,7 +169,6 @@ glamor_init_solid_shader(ScreenPtr screen)
glamor_priv->solid_color_uniform_location = glamor_priv->solid_color_uniform_location =
glGetUniformLocation(glamor_priv->solid_prog, "color"); glGetUniformLocation(glamor_priv->solid_prog, "color");
glamor_put_context(glamor_priv);
} }
void void
@ -178,9 +177,8 @@ glamor_fini_solid_shader(ScreenPtr screen)
glamor_screen_private *glamor_priv; glamor_screen_private *glamor_priv;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteProgram(glamor_priv->solid_prog); glDeleteProgram(glamor_priv->solid_prog);
glamor_put_context(glamor_priv);
} }
static void static void
@ -196,7 +194,7 @@ _glamor_solid_boxes(PixmapPtr pixmap, BoxPtr box, int nbox, float *color)
glamor_set_destination_pixmap_priv_nc(pixmap_priv); glamor_set_destination_pixmap_priv_nc(pixmap_priv);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glUseProgram(glamor_priv->solid_prog); glUseProgram(glamor_priv->solid_prog);
glUniform4fv(glamor_priv->solid_color_uniform_location, 1, color); glUniform4fv(glamor_priv->solid_color_uniform_location, 1, color);
@ -255,7 +253,6 @@ _glamor_solid_boxes(PixmapPtr pixmap, BoxPtr box, int nbox, float *color)
free(vertices); free(vertices);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
} }
@ -338,13 +335,12 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
return FALSE; return FALSE;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (!glamor_set_alu(screen, alu)) { if (!glamor_set_alu(screen, alu)) {
if (alu == GXclear) if (alu == GXclear)
fg_pixel = 0; fg_pixel = 0;
else { else {
glamor_fallback("unsupported alu %x\n", alu); glamor_fallback("unsupported alu %x\n", alu);
glamor_put_context(glamor_priv);
return FALSE; return FALSE;
} }
} }
@ -355,7 +351,6 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height,
glamor_solid_boxes(pixmap, &box, 1, fg_pixel); glamor_solid_boxes(pixmap, &box, 1, fg_pixel);
glamor_set_alu(screen, GXcopy); glamor_set_alu(screen, GXcopy);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
} }

View File

@ -89,7 +89,7 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
glamor_font->default_col = font->info.defaultCh; glamor_font->default_col = font->info.defaultCh;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenTextures(1, &glamor_font->texture_id); glGenTextures(1, &glamor_font->texture_id);
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
@ -119,8 +119,6 @@ glamor_font_get(ScreenPtr screen, FontPtr font)
} }
} }
glamor_put_context(glamor_priv);
return glamor_font; return glamor_font;
} }
@ -150,9 +148,8 @@ glamor_unrealize_font(ScreenPtr screen, FontPtr font)
glamor_font->realized = FALSE; glamor_font->realized = FALSE;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteTextures(1, &glamor_font->texture_id); glDeleteTextures(1, &glamor_font->texture_id);
glamor_put_context(glamor_priv);
/* Check to see if all of the screens are done with this font /* Check to see if all of the screens are done with this font
* and free the private when that happens * and free the private when that happens

View File

@ -34,22 +34,13 @@
*/ */
static void static void
glamor_glx_get_context(struct glamor_context *glamor_ctx) glamor_glx_make_current(struct glamor_context *glamor_ctx)
{ {
if (glamor_ctx->get_count++)
return;
glXMakeCurrent(glamor_ctx->display, glamor_ctx->drawable_xid, glXMakeCurrent(glamor_ctx->display, glamor_ctx->drawable_xid,
glamor_ctx->ctx); glamor_ctx->ctx);
} }
static void
glamor_glx_put_context(struct glamor_context *glamor_ctx)
{
--glamor_ctx->get_count;
}
Bool Bool
glamor_glx_screen_init(struct glamor_context *glamor_ctx) glamor_glx_screen_init(struct glamor_context *glamor_ctx)
{ {
@ -63,8 +54,7 @@ glamor_glx_screen_init(struct glamor_context *glamor_ctx)
glamor_ctx->drawable_xid = glXGetCurrentDrawable(); glamor_ctx->drawable_xid = glXGetCurrentDrawable();
glamor_ctx->get_context = glamor_glx_get_context; glamor_ctx->make_current = glamor_glx_make_current;
glamor_ctx->put_context = glamor_glx_put_context;
return True; return True;
} }

View File

@ -54,7 +54,7 @@ glamor_poly_glyph_blt_gl(DrawablePtr drawable, GCPtr gc,
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
goto bail; goto bail;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->poly_glyph_blt_progs, prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->poly_glyph_blt_progs,
&glamor_facet_poly_glyph_blt); &glamor_facet_poly_glyph_blt);
@ -137,11 +137,9 @@ glamor_poly_glyph_blt_gl(DrawablePtr drawable, GCPtr gc,
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
bail_ctx: bail_ctx:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
bail: bail:
return FALSE; return FALSE;
} }
@ -212,20 +210,18 @@ glamor_push_pixels_points(GCPtr gc, PixmapPtr bitmap,
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
return FALSE; return FALSE;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (!glamor_set_alu(screen, gc->alu)) { if (!glamor_set_alu(screen, gc->alu)) {
if (gc->alu == GXclear) if (gc->alu == GXclear)
fg_pixel = 0; fg_pixel = 0;
else { else {
glamor_fallback("unsupported alu %x\n", gc->alu); glamor_fallback("unsupported alu %x\n", gc->alu);
glamor_put_context(glamor_priv);
return FALSE; return FALSE;
} }
} }
if (!glamor_set_planemask(pixmap, gc->planemask)) { if (!glamor_set_planemask(pixmap, gc->planemask)) {
glamor_fallback("Failed to set planemask in %s.\n", __FUNCTION__); glamor_fallback("Failed to set planemask in %s.\n", __FUNCTION__);
glamor_put_context(glamor_priv);
return FALSE; return FALSE;
} }
@ -281,8 +277,6 @@ glamor_push_pixels_points(GCPtr gc, PixmapPtr bitmap,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
} }

View File

@ -1285,9 +1285,8 @@ glamor_buffer_glyph(glamor_screen_private *glamor_priv,
* thus we have to composite from the cache picture * thus we have to composite from the cache picture
* to the cache picture, we need a flush here to make * to the cache picture, we need a flush here to make
* sure latter we get the corret glyphs data.*/ * sure latter we get the corret glyphs data.*/
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glFlush(); glFlush();
glamor_put_context(glamor_priv);
} }
} }
else { else {

View File

@ -324,7 +324,7 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
return; return;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) { if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) {
glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]); glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]);
@ -371,8 +371,6 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count,
} }
glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog; glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog;
glamor_put_context(glamor_priv);
} }
static void static void
@ -519,7 +517,7 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
return; return;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) { if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) {
glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]); glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]);
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0; glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0;
@ -562,8 +560,6 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count,
} }
glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog; glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog;
glamor_put_context(glamor_priv);
} }
void void
@ -595,7 +591,7 @@ glamor_fini_gradient_shader(ScreenPtr screen)
int i = 0; int i = 0;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
/* Linear Gradient */ /* Linear Gradient */
@ -607,8 +603,6 @@ glamor_fini_gradient_shader(ScreenPtr screen)
glDeleteProgram(glamor_priv->gradient_prog glDeleteProgram(glamor_priv->gradient_prog
[SHADER_GRADIENT_RADIAL][i]); [SHADER_GRADIENT_RADIAL][i]);
} }
glamor_put_context(glamor_priv);
} }
static void static void
@ -739,7 +733,7 @@ _glamor_gradient_set_pixmap_destination(ScreenPtr screen,
tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3], tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3],
tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]); tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT,
GL_FALSE, 0, vertices); GL_FALSE, 0, vertices);
@ -749,8 +743,6 @@ _glamor_gradient_set_pixmap_destination(ScreenPtr screen,
glEnableVertexAttribArray(GLAMOR_VERTEX_POS); glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return 1; return 1;
} }
@ -892,7 +884,7 @@ glamor_generate_radial_gradient_picture(ScreenPtr screen,
GLint r2_uniform_location = 0; GLint r2_uniform_location = 0;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
/* Create a pixmap with VBO. */ /* Create a pixmap with VBO. */
pixmap = glamor_create_pixmap(screen, pixmap = glamor_create_pixmap(screen,
@ -1123,7 +1115,6 @@ glamor_generate_radial_gradient_picture(ScreenPtr screen,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return dst_picture; return dst_picture;
GRADIENT_FAIL: GRADIENT_FAIL:
@ -1140,7 +1131,6 @@ glamor_generate_radial_gradient_picture(ScreenPtr screen,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return NULL; return NULL;
} }
@ -1204,7 +1194,7 @@ glamor_generate_linear_gradient_picture(ScreenPtr screen,
GLint pt_distance_uniform_location = 0; GLint pt_distance_uniform_location = 0;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
/* Create a pixmap with VBO. */ /* Create a pixmap with VBO. */
pixmap = glamor_create_pixmap(screen, pixmap = glamor_create_pixmap(screen,
@ -1468,7 +1458,6 @@ glamor_generate_linear_gradient_picture(ScreenPtr screen,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return dst_picture; return dst_picture;
GRADIENT_FAIL: GRADIENT_FAIL:
@ -1485,7 +1474,6 @@ glamor_generate_linear_gradient_picture(ScreenPtr screen,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return NULL; return NULL;
} }

View File

@ -66,12 +66,10 @@ void
glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *fbo, int x0, int y0, glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *fbo, int x0, int y0,
int width, int height) int width, int height)
{ {
glamor_get_context(fbo->glamor_priv); glamor_make_current(fbo->glamor_priv);
glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb);
glViewport(x0, y0, width, height); glViewport(x0, y0, width, height);
glamor_put_context(fbo->glamor_priv);
} }
void void
@ -707,7 +705,7 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, unsigned int *tex,
int non_sub = 0; int non_sub = 0;
unsigned int iformat = 0; unsigned int iformat = 0;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (*tex == 0) { if (*tex == 0) {
glGenTextures(1, tex); glGenTextures(1, tex);
if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP)
@ -735,7 +733,6 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, unsigned int *tex,
if (bits == NULL) if (bits == NULL)
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
glamor_put_context(glamor_priv);
} }
static Bool static Bool
@ -832,7 +829,7 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format,
x + w, y + h, x + w, y + h,
glamor_priv->yInverted, vertices); glamor_priv->yInverted, vertices);
/* Slow path, we need to flip y or wire alpha to 1. */ /* Slow path, we need to flip y or wire alpha to 1. */
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT,
GL_FALSE, 2 * sizeof(float), vertices); GL_FALSE, 2 * sizeof(float), vertices);
glEnableVertexAttribArray(GLAMOR_VERTEX_POS); glEnableVertexAttribArray(GLAMOR_VERTEX_POS);
@ -859,8 +856,6 @@ _glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format,
glDeleteTextures(1, &tex); glDeleteTextures(1, &tex);
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
glamor_put_context(glamor_priv);
if (need_free_bits) if (need_free_bits)
free(bits); free(bits);
return TRUE; return TRUE;
@ -1140,7 +1135,7 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h,
if (temp_fbo == NULL) if (temp_fbo == NULL)
return NULL; return NULL;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
temp_xscale = 1.0 / w; temp_xscale = 1.0 / w;
temp_yscale = 1.0 / h; temp_yscale = 1.0 / h;
@ -1177,7 +1172,6 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h,
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
return temp_fbo; return temp_fbo;
} }
@ -1255,7 +1249,7 @@ _glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, GLenum format,
fbo_y_off = 0; fbo_y_off = 0;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glPixelStorei(GL_PACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ALIGNMENT, 4);
if (glamor_priv->has_pack_invert || glamor_priv->yInverted) { if (glamor_priv->has_pack_invert || glamor_priv->yInverted) {
@ -1286,7 +1280,7 @@ _glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, GLenum format,
unsigned int temp_pbo; unsigned int temp_pbo;
int yy; int yy;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenBuffers(1, &temp_pbo); glGenBuffers(1, &temp_pbo);
glBindBuffer(GL_PIXEL_PACK_BUFFER, temp_pbo); glBindBuffer(GL_PIXEL_PACK_BUFFER, temp_pbo);
glBufferData(GL_PIXEL_PACK_BUFFER, stride * h, NULL, GL_STREAM_READ); glBufferData(GL_PIXEL_PACK_BUFFER, stride * h, NULL, GL_STREAM_READ);
@ -1301,7 +1295,6 @@ _glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, GLenum format,
} }
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
glamor_put_context(glamor_priv);
if (need_post_conversion) { if (need_post_conversion) {
/* As OpenGL desktop version never enters here. /* As OpenGL desktop version never enters here.
@ -1473,10 +1466,9 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access)
data = malloc(stride * pixmap->drawable.height); data = malloc(stride * pixmap->drawable.height);
} }
else { else {
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (pixmap_priv->base.fbo->pbo == 0) if (pixmap_priv->base.fbo->pbo == 0)
glGenBuffers(1, &pixmap_priv->base.fbo->pbo); glGenBuffers(1, &pixmap_priv->base.fbo->pbo);
glamor_put_context(glamor_priv);
pbo = pixmap_priv->base.fbo->pbo; pbo = pixmap_priv->base.fbo->pbo;
} }

View File

@ -52,7 +52,7 @@ glamor_poly_point_gl(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPoint
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
goto bail; goto bail;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (prog->failed) if (prog->failed)
goto bail_ctx; goto bail_ctx;
@ -105,8 +105,6 @@ glamor_poly_point_gl(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPoint
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
@ -114,7 +112,6 @@ glamor_poly_point_gl(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPoint
bail_ctx: bail_ctx:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
bail: bail:
return FALSE; return FALSE;
} }

View File

@ -57,7 +57,7 @@ glamor_poly_fill_rect_gl(DrawablePtr drawable,
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
goto bail; goto bail;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (glamor_priv->glsl_version >= 130) { if (glamor_priv->glsl_version >= 130) {
prog = glamor_use_program_fill(pixmap, gc, prog = glamor_use_program_fill(pixmap, gc,
@ -144,11 +144,9 @@ glamor_poly_fill_rect_gl(DrawablePtr drawable,
glVertexAttribDivisor(GLAMOR_VERTEX_POS, 0); glVertexAttribDivisor(GLAMOR_VERTEX_POS, 0);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
bail_ctx: bail_ctx:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
bail: bail:
return FALSE; return FALSE;
} }

View File

@ -316,13 +316,13 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key,
GLint source_sampler_uniform_location, mask_sampler_uniform_location; GLint source_sampler_uniform_location, mask_sampler_uniform_location;
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
vs = glamor_create_composite_vs(key); vs = glamor_create_composite_vs(key);
if (vs == 0) if (vs == 0)
goto out; return;
fs = glamor_create_composite_fs(key); fs = glamor_create_composite_fs(key);
if (fs == 0) if (fs == 0)
goto out; return;
prog = glCreateProgram(); prog = glCreateProgram();
glAttachShader(prog, vs); glAttachShader(prog, vs);
@ -363,9 +363,6 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key,
glGetUniformLocation(prog, "mask_repeat_mode"); glGetUniformLocation(prog, "mask_repeat_mode");
} }
} }
out:
glamor_put_context(glamor_priv);
} }
static glamor_composite_shader * static glamor_composite_shader *
@ -406,7 +403,7 @@ glamor_init_composite_shaders(ScreenPtr screen)
int eb_size; int eb_size;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenBuffers(1, &glamor_priv->ebo); glGenBuffers(1, &glamor_priv->ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo);
@ -416,8 +413,6 @@ glamor_init_composite_shaders(ScreenPtr screen)
glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, eb_size, eb, GL_STATIC_DRAW); glBufferData(GL_ELEMENT_ARRAY_BUFFER, eb_size, eb, GL_STATIC_DRAW);
free(eb); free(eb);
glamor_put_context(glamor_priv);
} }
void void
@ -428,7 +423,7 @@ glamor_fini_composite_shaders(ScreenPtr screen)
int i, j, k; int i, j, k;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDeleteBuffers(1, &glamor_priv->ebo); glDeleteBuffers(1, &glamor_priv->ebo);
@ -439,8 +434,6 @@ glamor_fini_composite_shaders(ScreenPtr screen)
if (shader->prog) if (shader->prog)
glDeleteProgram(shader->prog); glDeleteProgram(shader->prog);
} }
glamor_put_context(glamor_priv);
} }
static Bool static Bool
@ -496,7 +489,7 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
float wh[4]; float wh[4];
int repeat_type; int repeat_type;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glActiveTexture(GL_TEXTURE0 + unit); glActiveTexture(GL_TEXTURE0 + unit);
glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex); glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex);
repeat_type = picture->repeatType; repeat_type = picture->repeatType;
@ -564,7 +557,6 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
repeat_type -= RepeatFix; repeat_type -= RepeatFix;
} }
glUniform1i(repeat_location, repeat_type); glUniform1i(repeat_location, repeat_type);
glamor_put_context(glamor_priv);
} }
static void static void
@ -685,7 +677,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts)
vert_size = n_verts * glamor_priv->vb_stride; vert_size = n_verts * glamor_priv->vb_stride;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
vb = glamor_get_vbo_space(screen, vert_size, &vbo_offset); vb = glamor_get_vbo_space(screen, vert_size, &vbo_offset);
glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, GL_FALSE, glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, GL_FALSE,
@ -707,7 +699,6 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts)
4 : 2) * sizeof(float)); 4 : 2) * sizeof(float));
glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); glEnableVertexAttribArray(GLAMOR_VERTEX_MASK);
} }
glamor_put_context(glamor_priv);
return vb; return vb;
} }
@ -717,7 +708,7 @@ glamor_flush_composite_rects(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (!glamor_priv->render_nr_verts) if (!glamor_priv->render_nr_verts)
return; return;
@ -730,7 +721,6 @@ glamor_flush_composite_rects(ScreenPtr screen)
glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2,
GL_UNSIGNED_SHORT, NULL); GL_UNSIGNED_SHORT, NULL);
} }
glamor_put_context(glamor_priv);
} }
int pict_format_combine_tab[][3] = { int pict_format_combine_tab[][3] = {
@ -1112,7 +1102,7 @@ glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv,
glamor_priv = dest_priv->base.glamor_priv; glamor_priv = dest_priv->base.glamor_priv;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glUseProgram(shader->prog); glUseProgram(shader->prog);
if (key->source == SHADER_SOURCE_SOLID) { if (key->source == SHADER_SOURCE_SOLID) {
@ -1146,8 +1136,6 @@ glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv,
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(op_info->source_blend, op_info->dest_blend); glBlendFunc(op_info->source_blend, op_info->dest_blend);
} }
glamor_put_context(glamor_priv);
} }
static Bool static Bool
@ -1202,7 +1190,7 @@ glamor_composite_with_shader(CARD8 op,
glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv);
glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID;
glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE &&
@ -1328,7 +1316,6 @@ glamor_composite_with_shader(CARD8 op,
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
if (saved_source_format) if (saved_source_format)
source->format = saved_source_format; source->format = saved_source_format;
glamor_put_context(glamor_priv);
ret = TRUE; ret = TRUE;
return ret; return ret;

View File

@ -61,7 +61,7 @@ glamor_fill_spans_gl(DrawablePtr drawable,
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
goto bail; goto bail;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (glamor_priv->glsl_version >= 130) { if (glamor_priv->glsl_version >= 130) {
prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->fill_spans_program, prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->fill_spans_program,
@ -152,11 +152,9 @@ glamor_fill_spans_gl(DrawablePtr drawable,
glVertexAttribDivisor(GLAMOR_VERTEX_POS, 0); glVertexAttribDivisor(GLAMOR_VERTEX_POS, 0);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
bail_ctx: bail_ctx:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
bail: bail:
return FALSE; return FALSE;
} }
@ -222,7 +220,7 @@ glamor_get_spans_gl(DrawablePtr drawable, int wmax,
glamor_format_for_pixmap(pixmap, &format, &type); glamor_format_for_pixmap(pixmap, &format, &type);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_pixmap_loop(pixmap_priv, box_x, box_y) { glamor_pixmap_loop(pixmap_priv, box_x, box_y) {
BoxPtr box = glamor_pixmap_box_at(pixmap_priv, box_x, box_y); BoxPtr box = glamor_pixmap_box_at(pixmap_priv, box_x, box_y);
@ -261,7 +259,6 @@ glamor_get_spans_gl(DrawablePtr drawable, int wmax,
} }
} }
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
bail: bail:
return FALSE; return FALSE;
@ -327,7 +324,7 @@ glamor_set_spans_gl(DrawablePtr drawable, GCPtr gc, char *src,
glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y); glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y);
glamor_format_for_pixmap(pixmap, &format, &type); glamor_format_for_pixmap(pixmap, &format, &type);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@ -397,7 +394,6 @@ glamor_set_spans_gl(DrawablePtr drawable, GCPtr gc, char *src,
} }
} }
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
bail: bail:

View File

@ -267,7 +267,7 @@ glamor_poly_text(DrawablePtr drawable, GCPtr gc,
if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
goto bail; goto bail;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->poly_text_progs, &glamor_facet_poly_text); prog = glamor_use_program_fill(pixmap, gc, &glamor_priv->poly_text_progs, &glamor_facet_poly_text);
@ -279,8 +279,6 @@ glamor_poly_text(DrawablePtr drawable, GCPtr gc,
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
@ -289,7 +287,6 @@ glamor_poly_text(DrawablePtr drawable, GCPtr gc,
bail_ctx: bail_ctx:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
bail: bail:
return FALSE; return FALSE;
} }
@ -420,7 +417,7 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
glamor_get_glyphs(gc->font, glamor_font, count, chars, sixteen, charinfo); glamor_get_glyphs(gc->font, glamor_font, count, chars, sixteen, charinfo);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (TERMINALFONT(gc->font)) if (TERMINALFONT(gc->font))
prog = &glamor_priv->te_text_prog; prog = &glamor_priv->te_text_prog;
@ -482,8 +479,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
(void) glamor_text(drawable, gc, glamor_font, prog, (void) glamor_text(drawable, gc, glamor_font, prog,
x, y, count, chars, charinfo, sixteen); x, y, count, chars, charinfo, sixteen);
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
@ -491,7 +486,6 @@ glamor_image_text(DrawablePtr drawable, GCPtr gc,
bail: bail:
glDisable(GL_COLOR_LOGIC_OP); glDisable(GL_COLOR_LOGIC_OP);
glamor_put_context(glamor_priv);
return FALSE; return FALSE;
} }

View File

@ -62,7 +62,7 @@ glamor_init_tile_shader(ScreenPtr screen)
GLint sampler_uniform_location; GLint sampler_uniform_location;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->tile_prog = glCreateProgram(); glamor_priv->tile_prog = glCreateProgram();
vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, tile_vs); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, tile_vs);
fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, tile_fs); fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, tile_fs);
@ -82,7 +82,6 @@ glamor_init_tile_shader(ScreenPtr screen)
glamor_priv->tile_wh = glamor_priv->tile_wh =
glGetUniformLocation(glamor_priv->tile_prog, "wh"); glGetUniformLocation(glamor_priv->tile_prog, "wh");
glamor_put_context(glamor_priv);
} }
void void
@ -91,9 +90,8 @@ glamor_fini_tile_shader(ScreenPtr screen)
glamor_screen_private *glamor_priv; glamor_screen_private *glamor_priv;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteProgram(glamor_priv->tile_prog); glDeleteProgram(glamor_priv->tile_prog);
glamor_put_context(glamor_priv);
} }
static void static void
@ -123,7 +121,7 @@ _glamor_tile(PixmapPtr pixmap, PixmapPtr tile,
glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv);
pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale);
pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glUseProgram(glamor_priv->tile_prog); glUseProgram(glamor_priv->tile_prog);
glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv); glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv);
@ -155,7 +153,6 @@ _glamor_tile(PixmapPtr pixmap, PixmapPtr tile,
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glamor_put_context(glamor_priv);
glamor_priv->state = RENDER_STATE; glamor_priv->state = RENDER_STATE;
glamor_priv->render_idle_cnt = 0; glamor_priv->render_idle_cnt = 0;
@ -193,10 +190,9 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile,
goto fail; goto fail;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (!glamor_set_alu(screen, alu)) { if (!glamor_set_alu(screen, alu)) {
glamor_fallback("unsupported alu %x\n", alu); glamor_fallback("unsupported alu %x\n", alu);
glamor_put_context(glamor_priv);
goto fail; goto fail;
} }
@ -290,7 +286,6 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile,
_glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y); _glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y);
glamor_set_alu(screen, GXcopy); glamor_set_alu(screen, GXcopy);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
fail: fail:
return FALSE; return FALSE;

View File

@ -70,7 +70,7 @@ glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox,
glamor_format_for_pixmap(pixmap, &format, &type); glamor_format_for_pixmap(pixmap, &format, &type);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@ -127,7 +127,6 @@ glamor_upload_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox,
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glamor_put_context(glamor_priv);
} }
/* /*
@ -180,7 +179,7 @@ glamor_download_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox,
glamor_format_for_pixmap(pixmap, &format, &type); glamor_format_for_pixmap(pixmap, &format, &type);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glPixelStorei(GL_PACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ALIGNMENT, 4);
glPixelStorei(GL_PACK_ROW_LENGTH, byte_stride / bytes_per_pixel); glPixelStorei(GL_PACK_ROW_LENGTH, byte_stride / bytes_per_pixel);
@ -226,7 +225,6 @@ glamor_download_boxes(PixmapPtr pixmap, BoxPtr in_boxes, int in_nbox,
glPixelStorei(GL_PACK_ROW_LENGTH, 0); glPixelStorei(GL_PACK_ROW_LENGTH, 0);
glPixelStorei(GL_PACK_SKIP_ROWS, 0); glPixelStorei(GL_PACK_SKIP_ROWS, 0);
glPixelStorei(GL_PACK_SKIP_PIXELS, 0); glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
glamor_put_context(glamor_priv);
} }
/* /*

View File

@ -235,14 +235,13 @@ glamor_flush_composite_triangles(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_put_vbo_space(screen); glamor_put_vbo_space(screen);
if (!glamor_priv->render_nr_verts) if (!glamor_priv->render_nr_verts)
return; return;
glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts);
glamor_put_context(glamor_priv);
} }
static Bool static Bool
@ -627,7 +626,7 @@ glamor_setup_composite_vbo_for_trapezoid(ScreenPtr screen, int n_verts)
vert_size = n_verts * glamor_priv->vb_stride; vert_size = n_verts * glamor_priv->vb_stride;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
@ -667,8 +666,6 @@ glamor_setup_composite_vbo_for_trapezoid(ScreenPtr screen, int n_verts)
vbo_offset + stride * sizeof(float)); vbo_offset + stride * sizeof(float));
glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM);
glamor_put_context(glamor_priv);
return vb; return vb;
} }
@ -811,7 +808,7 @@ _glamor_trapezoids_with_shader(CARD8 op,
goto TRAPEZOID_OUT; goto TRAPEZOID_OUT;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
box = REGION_RECTS(&region); box = REGION_RECTS(&region);
nbox = REGION_NUM_RECTS(&region); nbox = REGION_NUM_RECTS(&region);
@ -979,7 +976,6 @@ _glamor_trapezoids_with_shader(CARD8 op,
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); glDisableVertexAttribArray(GLAMOR_VERTEX_MASK);
glDisable(GL_BLEND); glDisable(GL_BLEND);
glamor_put_context(glamor_priv);
TRAPEZOID_OUT: TRAPEZOID_OUT:
if (box) { if (box) {
@ -1332,7 +1328,7 @@ glamor_init_trapezoid_shader(ScreenPtr screen)
"}\n"; "}\n";
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->trapezoid_prog = glCreateProgram(); glamor_priv->trapezoid_prog = glCreateProgram();
@ -1354,8 +1350,6 @@ glamor_init_trapezoid_shader(ScreenPtr screen)
GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param"); GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param");
glamor_link_glsl_prog(screen, glamor_priv->trapezoid_prog, "trapezoid"); glamor_link_glsl_prog(screen, glamor_priv->trapezoid_prog, "trapezoid");
glamor_put_context(glamor_priv);
} }
void void
@ -1364,9 +1358,8 @@ glamor_fini_trapezoid_shader(ScreenPtr screen)
glamor_screen_private *glamor_priv; glamor_screen_private *glamor_priv;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteProgram(glamor_priv->trapezoid_prog); glDeleteProgram(glamor_priv->trapezoid_prog);
glamor_put_context(glamor_priv);
} }
static Bool static Bool
@ -1406,7 +1399,7 @@ _glamor_generate_trapezoid_with_shader(ScreenPtr screen, PicturePtr picture,
return FALSE; return FALSE;
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_set_destination_pixmap_priv_nc(pixmap_priv); glamor_set_destination_pixmap_priv_nc(pixmap_priv);
@ -1564,7 +1557,6 @@ _glamor_generate_trapezoid_with_shader(ScreenPtr screen, PicturePtr picture,
glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM);
glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM);
glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM);
glamor_put_context(glamor_priv);
return TRUE; return TRUE;
} }

View File

@ -1499,18 +1499,12 @@ __fls(unsigned long x)
#endif #endif
static inline void static inline void
glamor_get_context(glamor_screen_private * glamor_priv) glamor_make_current(glamor_screen_private *glamor_priv)
{ {
if (lastGLContext != &glamor_priv->ctx) { if (lastGLContext != &glamor_priv->ctx) {
lastGLContext = &glamor_priv->ctx; lastGLContext = &glamor_priv->ctx;
glamor_priv->ctx.get_context(&glamor_priv->ctx); glamor_priv->ctx.make_current(&glamor_priv->ctx);
} }
} }
static inline void
glamor_put_context(glamor_screen_private * glamor_priv)
{
glamor_priv->ctx.put_context(&glamor_priv->ctx);
}
#endif #endif

View File

@ -48,7 +48,7 @@ glamor_get_vbo_space(ScreenPtr screen, unsigned size, char **vbo_offset)
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
void *data; void *data;
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo);
@ -79,7 +79,6 @@ glamor_get_vbo_space(ScreenPtr screen, unsigned size, char **vbo_offset)
*/ */
glamor_priv->has_buffer_storage = false; glamor_priv->has_buffer_storage = false;
glamor_priv->vbo_size = 0; glamor_priv->vbo_size = 0;
glamor_put_context(glamor_priv);
return glamor_get_vbo_space(screen, size, vbo_offset); return glamor_get_vbo_space(screen, size, vbo_offset);
} }
@ -130,8 +129,6 @@ glamor_get_vbo_space(ScreenPtr screen, unsigned size, char **vbo_offset)
data = glamor_priv->vb; data = glamor_priv->vb;
} }
glamor_put_context(glamor_priv);
return data; return data;
} }
@ -140,7 +137,7 @@ glamor_put_vbo_space(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
if (glamor_priv->has_buffer_storage) { if (glamor_priv->has_buffer_storage) {
/* If we're in the ARB_buffer_storage path, we have a /* If we're in the ARB_buffer_storage path, we have a
@ -155,8 +152,6 @@ glamor_put_vbo_space(ScreenPtr screen)
} }
glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
glamor_put_context(glamor_priv);
} }
void void
@ -164,11 +159,9 @@ glamor_init_vbo(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glGenBuffers(1, &glamor_priv->vbo); glGenBuffers(1, &glamor_priv->vbo);
glamor_put_context(glamor_priv);
} }
void void
@ -176,11 +169,9 @@ glamor_fini_vbo(ScreenPtr screen)
{ {
glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glDeleteBuffers(1, &glamor_priv->vbo); glDeleteBuffers(1, &glamor_priv->vbo);
if (!glamor_priv->has_map_buffer_range) if (!glamor_priv->has_map_buffer_range)
free(glamor_priv->vb); free(glamor_priv->vb);
glamor_put_context(glamor_priv);
} }

View File

@ -97,7 +97,7 @@ glamor_init_xv_shader(ScreenPtr screen)
GLint fs_prog, vs_prog; GLint fs_prog, vs_prog;
glamor_priv = glamor_get_screen_private(screen); glamor_priv = glamor_get_screen_private(screen);
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glamor_priv->xv_prog = glCreateProgram(); glamor_priv->xv_prog = glCreateProgram();
vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xv_vs); vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xv_vs);
@ -110,8 +110,6 @@ glamor_init_xv_shader(ScreenPtr screen)
glBindAttribLocation(glamor_priv->xv_prog, glBindAttribLocation(glamor_priv->xv_prog,
GLAMOR_VERTEX_SOURCE, "v_texcoord0"); GLAMOR_VERTEX_SOURCE, "v_texcoord0");
glamor_link_glsl_prog(screen, glamor_priv->xv_prog, "xv"); glamor_link_glsl_prog(screen, glamor_priv->xv_prog, "xv");
glamor_put_context(glamor_priv);
} }
#define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v)) #define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v))
@ -316,7 +314,7 @@ glamor_display_textured_video(glamor_port_private *port_priv)
&src_yscale[i]); &src_yscale[i]);
} }
} }
glamor_get_context(glamor_priv); glamor_make_current(glamor_priv);
glUseProgram(glamor_priv->xv_prog); glUseProgram(glamor_priv->xv_prog);
uloc = glGetUniformLocation(glamor_priv->xv_prog, "offsetyco"); uloc = glGetUniformLocation(glamor_priv->xv_prog, "offsetyco");
@ -404,7 +402,6 @@ glamor_display_textured_video(glamor_port_private *port_priv)
glDisableVertexAttribArray(GLAMOR_VERTEX_POS); glDisableVertexAttribArray(GLAMOR_VERTEX_POS);
glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
glamor_put_context(glamor_priv);
DamageDamageRegion(port_priv->pDraw, &port_priv->clip); DamageDamageRegion(port_priv->pDraw, &port_priv->clip);
} }