diff --git a/glamor/glamor.c b/glamor/glamor.c index 6b6330f4c..86de1154b 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -196,24 +196,25 @@ glamor_block_handler(ScreenPtr screen) { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; - GLAMOR_DEFINE_CONTEXT; + glamor_gl_dispatch *dispatch; - GLAMOR_SET_CONTEXT(glamor_priv); + dispatch = glamor_get_dispatch(glamor_priv); glamor_priv->tick++; dispatch->glFlush(); dispatch->glFinish(); glamor_fbo_expire(glamor_priv); - GLAMOR_RESTORE_CONTEXT(glamor_priv); + glamor_put_dispatch(glamor_priv); } static void _glamor_block_handler(void *data, OSTimePtr timeout, void *last_select_mask) { - glamor_gl_dispatch *dispatch = data; + glamor_screen_private *glamor_priv = data; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); dispatch->glFlush(); dispatch->glFinish(); + glamor_put_dispatch(glamor_priv); } static void @@ -289,8 +290,7 @@ glamor_init(ScreenPtr screen, unsigned int flags) } #endif - glamor_gl_dispatch_init(screen, &glamor_priv->dispatch, - gl_version); + glamor_gl_dispatch_init(screen, &glamor_priv->_dispatch, gl_version); #ifdef GLAMOR_GLES2 if (!glamor_gl_has_extension("GL_EXT_texture_format_BGRA8888")) { @@ -303,8 +303,8 @@ glamor_init(ScreenPtr screen, unsigned int flags) glamor_gl_has_extension("GL_MESA_pack_invert"); glamor_priv->has_fbo_blit = glamor_gl_has_extension("GL_EXT_framebuffer_blit"); - glamor_priv->dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, - &glamor_priv->max_fbo_size); + glamor_priv->_dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, + &glamor_priv->max_fbo_size); glamor_set_debug_level(&glamor_debug_level); @@ -324,8 +324,7 @@ glamor_init(ScreenPtr screen, unsigned int flags) if (flags & GLAMOR_USE_SCREEN) { if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, _glamor_wakeup_handler, - (void *) - &glamor_priv->dispatch)) { + glamor_priv)) { goto fail; } diff --git a/glamor/glamor.h b/glamor/glamor.h index 712a7a9b2..d3437d381 100644 --- a/glamor/glamor.h +++ b/glamor/glamor.h @@ -28,18 +28,16 @@ #ifndef GLAMOR_H #define GLAMOR_H -#include "scrnintstr.h" +#include #ifdef GLAMOR_FOR_XORG -#include "xf86str.h" +#include #endif -#include "pixmapstr.h" -#include "windowstr.h" -#include "gcstruct.h" -#include "picturestr.h" -#include "fb.h" -#include "fbpict.h" - -#endif /* GLAMOR_H */ +#include +#include +#include +#include +#include +#include /* * glamor_pixmap_type : glamor pixmap's type. @@ -145,9 +143,8 @@ extern _X_EXPORT PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, extern _X_EXPORT void glamor_egl_screen_init(ScreenPtr screen); -extern _X_EXPORT void * glamor_egl_make_current(ScreenPtr screen); - -extern _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen, void *context); +extern _X_EXPORT void glamor_egl_make_current(ScreenPtr screen); +extern _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen); #ifdef GLAMOR_FOR_XORG @@ -320,3 +317,4 @@ extern _X_EXPORT Bool glamor_poly_line_nf(DrawablePtr pDrawable, GCPtr pGC, int extern _X_EXPORT Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, int mode, int n, DDXPointPtr points); +#endif /* GLAMOR_H */ diff --git a/glamor/glamor_addtraps.c b/glamor/glamor_addtraps.c index 28775e561..ac852963c 100644 --- a/glamor/glamor_addtraps.c +++ b/glamor/glamor_addtraps.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool diff --git a/glamor/glamor_copyarea.c b/glamor/glamor_copyarea.c index e6569343e..de02224a3 100644 --- a/glamor/glamor_copyarea.c +++ b/glamor/glamor_copyarea.c @@ -21,10 +21,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_copyarea.c @@ -43,7 +39,7 @@ glamor_copy_n_to_n_fbo_blit(DrawablePtr src, glamor_pixmap_private *src_pixmap_priv; glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; int dst_x_off, dst_y_off, src_x_off, src_y_off, i; if (!glamor_priv->has_fbo_blit) { @@ -78,6 +74,7 @@ glamor_copy_n_to_n_fbo_blit(DrawablePtr src, } glamor_validate_pixmap(dst_pixmap); + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, src_pixmap_priv->fbo->fb); glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, @@ -136,6 +133,7 @@ glamor_copy_n_to_n_fbo_blit(DrawablePtr src, GL_NEAREST); } } + glamor_put_dispatch(glamor_priv); return TRUE; } #endif @@ -147,7 +145,7 @@ glamor_copy_n_to_n_textured(DrawablePtr src, { glamor_screen_private *glamor_priv = glamor_get_screen_private(dst->pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); int i; @@ -158,23 +156,24 @@ glamor_copy_n_to_n_textured(DrawablePtr src, enum glamor_pixmap_status src_status = GLAMOR_NONE; GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; int flush_needed = 0; + int alu = GXcopy; src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) { glamor_delayed_fallback(dst->pScreen, "dst has no fbo.\n"); - goto fail; + return FALSE; } if (!src_pixmap_priv || !src_pixmap_priv->gl_fbo) { #ifndef GLAMOR_PIXMAP_DYNAMIC_UPLOAD glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n"); - goto fail; + return FALSE; #else src_status = glamor_upload_pixmap_to_texture(src_pixmap); if (src_status != GLAMOR_UPLOAD_DONE) - goto fail; + return FALSE; src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); #endif @@ -182,25 +181,26 @@ glamor_copy_n_to_n_textured(DrawablePtr src, flush_needed = 1; if (gc) { - glamor_set_alu(dispatch, gc->alu); if (!glamor_set_planemask(dst_pixmap, gc->planemask)) - goto fail; - if (gc->alu != GXcopy) { - glamor_set_destination_pixmap_priv_nc - (src_pixmap_priv); - glamor_validate_pixmap(src_pixmap); - } + return FALSE; + alu = gc->alu; } - glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); - glamor_validate_pixmap(dst_pixmap); - pixmap_priv_get_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_set_alu(dispatch, alu); + if (alu != GXcopy) { + glamor_set_destination_pixmap_priv_nc (src_pixmap_priv); + glamor_validate_pixmap(src_pixmap); + } + glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); + glamor_validate_pixmap(dst_pixmap); dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), vertices); @@ -284,12 +284,8 @@ glamor_copy_n_to_n_textured(DrawablePtr src, /* The source texture is bound to a fbo, we have to flush it here. */ if (flush_needed) dispatch->glFlush(); + glamor_put_dispatch(glamor_priv); return TRUE; - - fail: - glamor_set_alu(dispatch, GXcopy); - glamor_set_planemask(dst_pixmap, ~0); - return FALSE; } static Bool @@ -317,7 +313,6 @@ _glamor_copy_n_to_n(DrawablePtr src, int i; int overlaped = 0; Bool ret = FALSE; - GLAMOR_DEFINE_CONTEXT; dst_pixmap = glamor_get_drawable_pixmap(dst); dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); @@ -326,7 +321,6 @@ _glamor_copy_n_to_n(DrawablePtr src, screen = dst_pixmap->drawable.pScreen; glamor_priv = glamor_get_screen_private(dst->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) { glamor_fallback("dest pixmap %p has no fbo. \n", @@ -448,7 +442,6 @@ _glamor_copy_n_to_n(DrawablePtr src, glamor_clear_delayed_fallbacks(dst->pScreen); if (temp_src != src) glamor_destroy_pixmap(temp_pixmap); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_copyplane.c b/glamor/glamor_copyplane.c index b6b26a50c..6487ff7fc 100644 --- a/glamor/glamor_copyplane.c +++ b/glamor/glamor_copyplane.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool @@ -37,7 +33,6 @@ _glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty, unsigned long bitPlane, RegionPtr *pRegion, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; glamor_screen_private *glamor_priv; if (!fallback @@ -47,14 +42,12 @@ _glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, goto fail; glamor_priv = glamor_get_screen_private(pDst->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); glamor_prepare_access(pDst, GLAMOR_ACCESS_RW); glamor_prepare_access(pSrc, GLAMOR_ACCESS_RO); *pRegion = fbCopyPlane(pSrc, pDst, pGC, srcx, srcy, w, h, dstx, dsty, bitPlane); glamor_finish_access(pSrc, GLAMOR_ACCESS_RO); glamor_finish_access(pDst, GLAMOR_ACCESS_RW); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; fail: diff --git a/glamor/glamor_copywindow.c b/glamor/glamor_copywindow.c index 11b30363f..b181ff529 100644 --- a/glamor/glamor_copywindow.c +++ b/glamor/glamor_copywindow.c @@ -21,10 +21,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_copywindow.c diff --git a/glamor/glamor_core.c b/glamor/glamor_core.c index 01c9aeaf9..0376388ca 100644 --- a/glamor/glamor_core.c +++ b/glamor/glamor_core.c @@ -31,10 +31,6 @@ * This file covers core X rendering in glamor. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include #include "glamor_priv.h" @@ -174,7 +170,7 @@ glamor_init_finish_access_shaders(ScreenPtr screen) GLint sampler_uniform_location; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); glamor_priv->finish_access_prog[0] = dispatch->glCreateProgram(); glamor_priv->finish_access_prog[1] = dispatch->glCreateProgram(); @@ -248,7 +244,7 @@ glamor_init_finish_access_shaders(ScreenPtr screen) dispatch->glUniform1i(sampler_uniform_location, 0); dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); dispatch->glUseProgram(0); - + glamor_put_dispatch(glamor_priv); } void @@ -258,9 +254,10 @@ glamor_fini_finish_access_shaders(ScreenPtr screen) glamor_gl_dispatch *dispatch; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glDeleteProgram(glamor_priv->finish_access_prog[0]); dispatch->glDeleteProgram(glamor_priv->finish_access_prog[1]); + glamor_put_dispatch(glamor_priv); } void @@ -271,7 +268,6 @@ glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) glamor_get_pixmap_private(pixmap); glamor_screen_private *glamor_priv = glamor_get_screen_private(drawable->pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; if (!GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv)) return; @@ -281,11 +277,17 @@ glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) } if (pixmap_priv->fbo->pbo != 0 && pixmap_priv->fbo->pbo_valid) { + glamor_gl_dispatch *dispatch; + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - pixmap_priv->fbo->pbo_valid = FALSE; dispatch->glDeleteBuffers(1, &pixmap_priv->fbo->pbo); + glamor_put_dispatch(glamor_priv); + + pixmap_priv->fbo->pbo_valid = FALSE; pixmap_priv->fbo->pbo = 0; } else { free(pixmap->devPrivate.ptr); diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c index a339527d8..ecbc186fa 100644 --- a/glamor/glamor_egl.c +++ b/glamor/glamor_egl.c @@ -31,11 +31,8 @@ #include "config.h" #endif -#ifdef HAVE_DIX_CONFIG_H -#include -#endif #define GLAMOR_FOR_XORG -#include "xorg-server.h" +#include #include #include #include @@ -93,7 +90,8 @@ struct glamor_egl_screen_private { struct gbm_device *gbm; #endif int has_gem; - void *gl_context; + void *gl_context, *old_context; + int gl_context_depth; PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr; PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image_khr; @@ -112,13 +110,18 @@ glamor_egl_get_screen_private(ScrnInfoPtr scrn) scrn->privates[xf86GlamorEGLPrivateIndex].ptr; } #ifdef GLX_USE_SHARED_DISPATCH -_X_EXPORT void * +_X_EXPORT void glamor_egl_make_current(ScreenPtr screen) { ScrnInfoPtr scrn = xf86Screens[screen->myNum]; struct glamor_egl_screen_private *glamor_egl = glamor_egl_get_screen_private(scrn); + + if (glamor_egl->gl_context_depth++) + return; + GET_CURRENT_CONTEXT(current); + glamor_egl->old_context = current; if (glamor_egl->gl_context != current) { eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, @@ -126,24 +129,28 @@ glamor_egl_make_current(ScreenPtr screen) if (!eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, EGL_NO_SURFACE, glamor_egl->context)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Failed to make EGL context current\n"); - return NULL; + FatalError("Failed to make EGL context current\n"); } - return current; } - return NULL; } _X_EXPORT void -glamor_egl_restore_context(ScreenPtr screen, void *context) +glamor_egl_restore_context(ScreenPtr screen) { - if (context) - SET_CURRENT_CONTEXT(context); + ScrnInfoPtr scrn = xf86Screens[screen->myNum]; + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + + if (--glamor_egl->gl_context_depth) + return; + + if (glamor_egl->old_context && + glamor_egl->gl_context != glamor_egl->old_context) + SET_CURRENT_CONTEXT(glamor_egl->old_context); } #else -#define glamor_egl_make_current(x) NULL -#define glamor_egl_restore_context(s, c) +#define glamor_egl_make_current(x) +#define glamor_egl_restore_context(s) #endif static EGLImageKHR @@ -252,12 +259,11 @@ glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride) EGLImageKHR image; GLuint texture; int name; - void *prev_context; Bool ret = FALSE; glamor_egl = glamor_egl_get_screen_private(scrn); - prev_context = glamor_egl_make_current(screen); + glamor_egl_make_current(screen); if (glamor_egl->has_gem) { if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { xf86DrvMsg(scrn->scrnIndex, X_ERROR, @@ -285,8 +291,7 @@ glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride) ret = TRUE; done: - if (prev_context) - glamor_egl_restore_context(screen, prev_context); + glamor_egl_restore_context(screen); return ret; } @@ -497,6 +502,13 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) #endif glamor_egl->saved_free_screen = scrn->FreeScreen; scrn->FreeScreen = glamor_egl_free_screen; +#ifdef GLAMOR_GLES2 + xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n"); +#ifdef GLX_USE_SHARED_DISPATCH + xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Glamor is using GLES2 but GLX needs GL. " + "Indirect GLX may not work correctly.\n"); +#endif +#endif return TRUE; } diff --git a/glamor/glamor_eglmodule.c b/glamor/glamor_eglmodule.c index e1f6672af..096165162 100644 --- a/glamor/glamor_eglmodule.c +++ b/glamor/glamor_eglmodule.c @@ -28,10 +28,10 @@ #include "config.h" #endif -#include #define GLAMOR_FOR_XORG #include "glamor.h" -#include "xf86Module.h" +#include +#include static XF86ModuleVersionInfo VersRec = { GLAMOR_EGL_MODULE_NAME, diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c index 929cababa..e5675d81c 100644 --- a/glamor/glamor_fbo.c +++ b/glamor/glamor_fbo.c @@ -1,7 +1,3 @@ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include #include "glamor_priv.h" @@ -126,17 +122,14 @@ glamor_pixmap_fbo_cache_get(glamor_screen_private *glamor_priv, void glamor_purge_fbo(glamor_pixmap_fbo *fbo) { - GLAMOR_DEFINE_CONTEXT; - - GLAMOR_SET_CONTEXT(fbo->glamor_priv); - glamor_gl_dispatch *dispatch = &fbo->glamor_priv->dispatch; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); if (fbo->fb) dispatch->glDeleteFramebuffers(1, &fbo->fb); if (fbo->tex) dispatch->glDeleteTextures(1, &fbo->tex); if (fbo->pbo) dispatch->glDeleteBuffers(1, &fbo->pbo); - GLAMOR_RESTORE_CONTEXT(fbo->glamor_priv); + glamor_put_dispatch(fbo->glamor_priv); free(fbo); } @@ -292,7 +285,6 @@ glamor_create_tex_obj(glamor_screen_private *glamor_priv, glamor_pixmap_fbo *fbo; int cache_flag = GLAMOR_CACHE_TEXTURE; GLuint tex; - GLAMOR_DEFINE_CONTEXT; if (flag == GLAMOR_CREATE_TEXTURE_EXACT_SIZE) cache_flag |= GLAMOR_CACHE_EXACT_SIZE; @@ -305,10 +297,9 @@ glamor_create_tex_obj(glamor_screen_private *glamor_priv, if (fbo == NULL) return NULL; - GLAMOR_SET_CONTEXT(glamor_priv); list_init(&fbo->list); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glGenTextures(1, &tex); dispatch->glBindTexture(GL_TEXTURE_2D, tex); dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, @@ -317,12 +308,13 @@ glamor_create_tex_obj(glamor_screen_private *glamor_priv, GL_NEAREST); dispatch->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, format, GL_UNSIGNED_BYTE, NULL); + glamor_put_dispatch(glamor_priv); + fbo->tex = tex; fbo->width = w; fbo->height = h; fbo->format = format; fbo->glamor_priv = glamor_priv; - GLAMOR_RESTORE_CONTEXT(glamor_priv); return fbo; } @@ -344,7 +336,6 @@ glamor_create_fbo(glamor_screen_private *glamor_priv, GLenum format; GLint tex; int cache_flag; - GLAMOR_DEFINE_CONTEXT; if (!glamor_check_fbo_size(glamor_priv, w, h) || !glamor_check_fbo_depth(depth)) @@ -364,9 +355,7 @@ glamor_create_fbo(glamor_screen_private *glamor_priv, if (fbo) return fbo; new_fbo: - - GLAMOR_SET_CONTEXT(glamor_priv); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glGenTextures(1, &tex); dispatch->glBindTexture(GL_TEXTURE_2D, tex); dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, @@ -377,7 +366,7 @@ new_fbo: GL_UNSIGNED_BYTE, NULL); fbo = glamor_create_fbo_from_tex(glamor_priv, w, h, depth, tex, flag); - GLAMOR_RESTORE_CONTEXT(glamor_priv); + glamor_put_dispatch(glamor_priv); return fbo; } diff --git a/glamor/glamor_fill.c b/glamor/glamor_fill.c index b462f5922..85733099b 100644 --- a/glamor/glamor_fill.c +++ b/glamor/glamor_fill.c @@ -21,10 +21,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_fillspans.c @@ -112,7 +108,7 @@ glamor_init_solid_shader(ScreenPtr screen) GLint fs_prog, vs_prog; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); glamor_priv->solid_prog = dispatch->glCreateProgram(); vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, solid_vs); fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, @@ -127,6 +123,7 @@ glamor_init_solid_shader(ScreenPtr screen) glamor_priv->solid_color_uniform_location = dispatch->glGetUniformLocation(glamor_priv->solid_prog, "color"); + glamor_put_dispatch(glamor_priv); } void @@ -136,8 +133,9 @@ glamor_fini_solid_shader(ScreenPtr screen) glamor_gl_dispatch *dispatch; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glDeleteProgram(glamor_priv->solid_prog); + glamor_put_dispatch(glamor_priv); } Bool @@ -150,7 +148,7 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, glamor_get_screen_private(screen); glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; int x1 = x; int x2 = x + width; int y1 = y; @@ -158,15 +156,16 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, GLfloat color[4]; float vertices[8]; GLfloat xscale, yscale; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { glamor_fallback("dest %p has no fbo.\n", pixmap); - goto fail; + return FALSE; } - glamor_set_alu(dispatch, alu); + if (!glamor_set_planemask(pixmap, planemask)) { glamor_fallback ("Failedto set planemask in glamor_solid.\n"); - goto fail; + return FALSE; } glamor_get_rgba_from_pixel(fg_pixel, @@ -189,6 +188,8 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, glamor_set_destination_pixmap_priv_nc(pixmap_priv); glamor_validate_pixmap(pixmap); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_alu(dispatch, alu); dispatch->glUseProgram(glamor_priv->solid_prog); dispatch->glUniform4fv(glamor_priv->solid_color_uniform_location, @@ -205,9 +206,6 @@ glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); return TRUE; - fail: - glamor_set_alu(dispatch, GXcopy); - glamor_set_planemask(pixmap, ~0); - return FALSE; } diff --git a/glamor/glamor_fillspans.c b/glamor/glamor_fillspans.c index 97e449784..6598249fd 100644 --- a/glamor/glamor_fillspans.c +++ b/glamor/glamor_fillspans.c @@ -20,10 +20,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - /** @file glamor_fillspans.c * * FillSpans implementation, taken from fb_fillsp.c @@ -41,11 +37,9 @@ _glamor_fill_spans(DrawablePtr drawable, int x1, x2, y; RegionPtr pClip = fbGetCompositeClip(gc); glamor_screen_private *glamor_priv; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; glamor_priv = glamor_get_screen_private(drawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) goto fail; @@ -99,7 +93,6 @@ fail: ret = TRUE; done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_getimage.c b/glamor/glamor_getimage.c index 7caf2a372..efbd1baca 100644 --- a/glamor/glamor_getimage.c +++ b/glamor/glamor_getimage.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" @@ -46,13 +42,11 @@ _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, int no_alpha, no_revert; PixmapPtr temp_pixmap = NULL; glamor_gl_dispatch * dispatch; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; goto fall_back; glamor_priv = glamor_get_screen_private(drawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (format != ZPixmap) goto fall_back; @@ -65,7 +59,6 @@ _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, } glamor_priv = glamor_get_screen_private(drawable->pScreen); pixmap_priv = glamor_get_pixmap_private(pixmap); - dispatch = &glamor_priv->dispatch; if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) @@ -97,6 +90,8 @@ _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, int row_length = PixmapBytePad(w, drawable->depth); row_length = (row_length * 8) / drawable->bitsPerPixel; + + dispatch = glamor_get_dispatch(glamor_priv); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 1); dispatch->glPixelStorei(GL_PACK_ROW_LENGTH, row_length); @@ -117,14 +112,13 @@ _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, h, tex_format, tex_type, d); + glamor_put_dispatch(glamor_priv); if (temp_pixmap) glamor_destroy_pixmap(temp_pixmap); ret = TRUE; fall_back: - - GLAMOR_RESTORE_CONTEXT(glamor_priv); if (ret == FALSE) miGetImage(drawable, x, y, w, h, format, planeMask, d); return TRUE; diff --git a/glamor/glamor_getspans.c b/glamor/glamor_getspans.c index 2d30f37a8..91030a3d4 100644 --- a/glamor/glamor_getspans.c +++ b/glamor/glamor_getspans.c @@ -25,10 +25,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool @@ -44,15 +40,13 @@ _glamor_get_spans(DrawablePtr drawable, glamor_get_screen_private(drawable->pScreen); glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; PixmapPtr temp_pixmap = NULL; int i; uint8_t *readpixels_dst = (uint8_t *) dst; int x_off, y_off; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; - GLAMOR_SET_CONTEXT(glamor_priv); if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { glamor_fallback("pixmap has no fbo.\n"); goto fail; @@ -82,6 +76,7 @@ _glamor_get_spans(DrawablePtr drawable, } glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + dispatch = glamor_get_dispatch(glamor_priv); for (i = 0; i < count; i++) { if (glamor_priv->yInverted) { dispatch->glReadPixels(points[i].x + x_off, @@ -98,6 +93,7 @@ _glamor_get_spans(DrawablePtr drawable, readpixels_dst += PixmapBytePad(widths[i], drawable->depth); } + glamor_put_dispatch(glamor_priv); if (temp_pixmap) glamor_destroy_pixmap(temp_pixmap); @@ -116,7 +112,6 @@ fail: glamor_finish_access(drawable, GLAMOR_ACCESS_RO); } done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_glyphblt.c b/glamor/glamor_glyphblt.c index 8c853e91a..163099847 100644 --- a/glamor/glamor_glyphblt.c +++ b/glamor/glamor_glyphblt.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool @@ -37,7 +33,6 @@ _glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; glamor_screen_private *glamor_priv; if (!fallback @@ -46,13 +41,11 @@ _glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, goto fail; glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); glamor_prepare_access(pDrawable, GLAMOR_ACCESS_RW); glamor_prepare_access_gc(pGC); fbImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); glamor_finish_access_gc(pGC); glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; fail: return FALSE; @@ -79,25 +72,20 @@ _glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; glamor_screen_private *glamor_priv; if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) && glamor_ddx_fallback_check_gc(pGC)) - goto fail; + return FALSE; glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); glamor_prepare_access(pDrawable, GLAMOR_ACCESS_RW); glamor_prepare_access_gc(pGC); fbPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); glamor_finish_access_gc(pGC); glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; - fail: - return FALSE; } void @@ -120,17 +108,12 @@ static Bool _glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, DrawablePtr pDrawable, int w, int h, int x, int y, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; - glamor_screen_private *glamor_priv; - if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) && glamor_ddx_fallback_check_pixmap(&pBitmap->drawable) && glamor_ddx_fallback_check_gc(pGC)) - goto fail; + return FALSE; - glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); glamor_prepare_access(pDrawable, GLAMOR_ACCESS_RW); glamor_prepare_access(&pBitmap->drawable, GLAMOR_ACCESS_RO); glamor_prepare_access_gc(pGC); @@ -138,10 +121,7 @@ _glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, glamor_finish_access_gc(pGC); glamor_finish_access(&pBitmap->drawable, GLAMOR_ACCESS_RO); glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; - fail: - return FALSE; } void diff --git a/glamor/glamor_glyphs.c b/glamor/glamor_glyphs.c index 33e06f1d3..fe7d9de26 100644 --- a/glamor/glamor_glyphs.c +++ b/glamor/glamor_glyphs.c @@ -40,15 +40,11 @@ * Based on code by: Keith Packard */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include #include "glamor_priv.h" -#include "mipict.h" +#include #if DEBUG_GLYPH_CACHE #define DBG_GLYPH_CACHE(a) ErrorF a @@ -163,7 +159,7 @@ glamor_realize_glyph_caches(ScreenPtr pScreen) glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; PixmapPtr pixmap; PicturePtr picture; - CARD32 component_alpha; + XID component_alpha; int depth = PIXMAN_FORMAT_DEPTH(formats[i]); int error; PictFormatPtr pPictFormat = @@ -652,7 +648,7 @@ glamor_glyphs_via_mask(CARD8 op, GlyphPtr glyph; int error; BoxRec extents = { 0, 0, 0, 0 }; - CARD32 component_alpha; + XID component_alpha; glamor_glyph_buffer_t buffer; xRectangle fill_rect; diff --git a/glamor/glamor_picture.c b/glamor/glamor_picture.c index 217fd4048..38185a491 100644 --- a/glamor/glamor_picture.c +++ b/glamor/glamor_picture.c @@ -1,7 +1,3 @@ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include #include "glamor_priv.h" diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c index 1a63ffdd1..7f4a90b81 100644 --- a/glamor/glamor_pixmap.c +++ b/glamor/glamor_pixmap.c @@ -1,7 +1,3 @@ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include #include "glamor_priv.h" @@ -31,7 +27,7 @@ static void _glamor_pixmap_validate_filling(glamor_screen_private * glamor_priv, glamor_pixmap_private * pixmap_priv) { - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); GLfloat vertices[8]; dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), @@ -52,6 +48,7 @@ _glamor_pixmap_validate_filling(glamor_screen_private * glamor_priv, dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); dispatch->glUseProgram(0); pixmap_priv->pending_op.type = GLAMOR_PENDING_NONE; + glamor_put_dispatch(glamor_priv); } @@ -94,7 +91,7 @@ glamor_validate_pixmap(PixmapPtr pixmap) void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * pixmap_priv) { - glamor_gl_dispatch *dispatch = &pixmap_priv->glamor_priv->dispatch; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(pixmap_priv->glamor_priv); dispatch->glBindFramebuffer(GL_FRAMEBUFFER, pixmap_priv->fbo->fb); #ifndef GLAMOR_GLES2 dispatch->glMatrixMode(GL_PROJECTION); @@ -106,6 +103,7 @@ glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * pixmap_priv) pixmap_priv->fbo->width, pixmap_priv->fbo->height); + glamor_put_dispatch(pixmap_priv->glamor_priv); } int @@ -222,7 +220,7 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, glamor_get_pixmap_private(pixmap); glamor_screen_private *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; unsigned int stride, row_length; void *texels; GLenum iformat; @@ -235,6 +233,7 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, stride = pixmap->devKind; row_length = (stride * 8) / pixmap->drawable.bitsPerPixel; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindTexture(GL_TEXTURE_2D, tex); dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -271,6 +270,7 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, if (pixmap_priv->fbo->pbo && pixmap_priv->fbo->pbo_valid) dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glamor_put_dispatch(glamor_priv); } @@ -289,7 +289,7 @@ _glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, glamor_get_pixmap_private(pixmap); glamor_screen_private *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; static float vertices[8]; static float texcoords[8] = { 0, 1, 1, 1, @@ -339,6 +339,7 @@ _glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, vertices); /* Slow path, we need to flip y or wire alpha to 1. */ + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), vertices); @@ -379,13 +380,17 @@ _glamor_upload_pixmap_to_texture(PixmapPtr pixmap, GLenum format, dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); dispatch->glDeleteTextures(1, &tex); dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + + glamor_put_dispatch(glamor_priv); } void glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo) { + glamor_gl_dispatch *dispatch; int status; - glamor_gl_dispatch *dispatch = &fbo->glamor_priv->dispatch; + + dispatch = glamor_get_dispatch(fbo->glamor_priv); if (fbo->fb == 0) dispatch->glGenFramebuffers(1, &fbo->fb); @@ -422,11 +427,10 @@ glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo) break; } - LogMessageVerb(X_INFO, 0, - "destination is framebuffer incomplete: %s [%#x]\n", - str, status); - assert(0); + FatalError("destination is framebuffer incomplete: %s [%#x]\n", + str, status); } + glamor_put_dispatch(fbo->glamor_priv); } /* @@ -571,7 +575,6 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, GLenum * format, glamor_priv = glamor_get_screen_private(screen); source_priv = glamor_get_pixmap_private(source); - dispatch = &glamor_priv->dispatch; if (*format == GL_BGRA) { *format = GL_RGBA; swap_rb = 1; @@ -585,6 +588,7 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, GLenum * format, temp_pixmap_priv = glamor_get_pixmap_private(temp_pixmap); + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindTexture(GL_TEXTURE_2D, temp_pixmap_priv->fbo->tex); dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, @@ -631,6 +635,7 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, GLenum * format, dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); return temp_pixmap; } @@ -657,7 +662,7 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) ScreenPtr screen; glamor_screen_private *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; screen = pixmap->drawable.pScreen; if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) @@ -715,6 +720,7 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) } row_length = (stride * 8) / pixmap->drawable.bitsPerPixel; + dispatch = glamor_get_dispatch(glamor_priv); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 1); dispatch->glPixelStorei(GL_PACK_ROW_LENGTH, row_length); @@ -795,6 +801,7 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) } dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + glamor_put_dispatch(glamor_priv); done: pixmap_priv->gl_fbo = GLAMOR_FBO_DOWNLOADED; diff --git a/glamor/glamor_polyfillrect.c b/glamor/glamor_polyfillrect.c index 8b362415f..61e707f59 100644 --- a/glamor/glamor_polyfillrect.c +++ b/glamor/glamor_polyfillrect.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_fillspans.c @@ -48,10 +44,8 @@ _glamor_poly_fill_rect(DrawablePtr drawable, RegionPtr pClip = fbGetCompositeClip(gc); Bool ret = FALSE; glamor_screen_private *glamor_priv; - GLAMOR_DEFINE_CONTEXT; glamor_priv = glamor_get_screen_private(drawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) { goto fail; @@ -119,7 +113,6 @@ fail: ret = TRUE; done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_polylines.c b/glamor/glamor_polylines.c index 0d37a1dd1..175e9580d 100644 --- a/glamor/glamor_polylines.c +++ b/glamor/glamor_polylines.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_polylines.c @@ -50,7 +46,6 @@ _glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, int x1, x2, y1, y2; int i; glamor_screen_private *glamor_priv; - GLAMOR_DEFINE_CONTEXT; /* Don't try to do wide lines or non-solid fill style. */ if (gc->lineWidth != 0) { @@ -112,7 +107,6 @@ _glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, return FALSE; glamor_priv = glamor_get_screen_private(drawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (gc->lineWidth == 0) { if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { if (glamor_prepare_access_gc(gc)) { @@ -126,7 +120,6 @@ wide_line: /* fb calls mi functions in the lineWidth != 0 case. */ fbPolyLine(drawable, gc, mode, n, points); } - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; } diff --git a/glamor/glamor_polyops.c b/glamor/glamor_polyops.c index ca21b8b9a..7320c1762 100644 --- a/glamor/glamor_polyops.c +++ b/glamor/glamor_polyops.c @@ -26,36 +26,23 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool _glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; - glamor_screen_private *glamor_priv; - if (!fallback && glamor_ddx_fallback_check_gc(pGC) && glamor_ddx_fallback_check_pixmap(pDrawable)) - goto fail; + return FALSE; - glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); glamor_prepare_access_gc(pGC); glamor_prepare_access(pDrawable, GLAMOR_ACCESS_RW); fbPolyPoint(pDrawable, pGC, mode, npt, ppt); glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); glamor_finish_access_gc(pGC); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; - -fail: - return FALSE; } void @@ -76,16 +63,11 @@ static Bool _glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSeg, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; - glamor_screen_private *glamor_priv; - if (!fallback && glamor_ddx_fallback_check_gc(pGC) && glamor_ddx_fallback_check_pixmap(pDrawable)) - goto fail; + return FALSE; - glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); /* For lineWidth is not zero, fb calls to mi functions. */ if (pGC->lineWidth == 0) { glamor_prepare_access_gc(pGC); @@ -94,13 +76,9 @@ _glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); glamor_finish_access_gc(pGC); } else - fbPolySegment(pDrawable, pGC, nseg, pSeg); + fbPolySegment(pDrawable, pGC, nseg, pSeg); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; - -fail: - return FALSE; } void @@ -121,17 +99,12 @@ static Bool _glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr ppt, Bool fallback) { - GLAMOR_DEFINE_CONTEXT; - glamor_screen_private *glamor_priv; - if (!fallback && glamor_ddx_fallback_check_gc(pGC) && glamor_ddx_fallback_check_pixmap(pDrawable)) - goto fail; + return FALSE; /* For lineWidth is not zero, fb calls to mi functions. */ - glamor_priv = glamor_get_screen_private(pDrawable->pScreen); - GLAMOR_SET_CONTEXT(glamor_priv); if (pGC->lineWidth == 0) { glamor_prepare_access_gc(pGC); glamor_prepare_access(pDrawable, GLAMOR_ACCESS_RW); @@ -139,13 +112,9 @@ _glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, glamor_finish_access(pDrawable, GLAMOR_ACCESS_RW); glamor_finish_access_gc(pGC); } else - fbPolyLine(pDrawable, pGC, mode, npt, ppt); + fbPolyLine(pDrawable, pGC, mode, npt, ppt); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return TRUE; - -fail: - return FALSE; } void diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index d04421b6a..05bb18ac1 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -31,10 +31,6 @@ #include "config.h" #endif -#ifdef HAVE_DIX_CONFIG_H -#include -#include -#endif #include #include "glamor.h" @@ -171,7 +167,7 @@ struct glamor_saved_procs { (((int)(t1) - (int)(t0)) < 0) typedef struct glamor_screen_private { - struct glamor_gl_dispatch dispatch; + struct glamor_gl_dispatch _dispatch; int yInverted; unsigned int tick; enum glamor_gl_flavor gl_flavor; diff --git a/glamor/glamor_putimage.c b/glamor/glamor_putimage.c index 581382261..75e5b4cdd 100644 --- a/glamor/glamor_putimage.c +++ b/glamor/glamor_putimage.c @@ -251,7 +251,7 @@ _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, { glamor_screen_private *glamor_priv = glamor_get_screen_private(drawable->pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); @@ -265,10 +265,8 @@ _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, GLfloat xscale, yscale, txscale, tyscale; GLuint tex; int no_alpha, no_revert; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; - GLAMOR_SET_CONTEXT(glamor_priv); if (image_format == XYBitmap) { assert(depth == 1); goto fail; @@ -287,7 +285,6 @@ _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, if (!glamor_set_planemask(pixmap, gc->planemask)) { goto fail; } - glamor_set_alu(dispatch, gc->alu); if (glamor_get_tex_format_type_from_pixmap(pixmap, &format, @@ -298,6 +295,8 @@ _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, } /* XXX consider to reuse a function to do the following work. */ + dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_alu(dispatch, gc->alu); glamor_set_destination_pixmap_priv_nc(pixmap_priv); glamor_validate_pixmap(pixmap); dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, @@ -400,6 +399,7 @@ _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glamor_set_alu(dispatch, GXcopy); glamor_set_planemask(pixmap, ~0); + glamor_put_dispatch(glamor_priv); ret = TRUE; goto done; @@ -421,7 +421,6 @@ fail: ret = TRUE; done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c index b240eac6a..89e8265a8 100644 --- a/glamor/glamor_render.c +++ b/glamor/glamor_render.c @@ -220,15 +220,16 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key, GLuint vs, fs, prog; GLint source_sampler_uniform_location, mask_sampler_uniform_location; - glamor_screen_private *glamor = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor->dispatch; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + dispatch = glamor_get_dispatch(glamor_priv); vs = glamor_create_composite_vs(dispatch, key); if (vs == 0) - return; + goto out; fs = glamor_create_composite_fs(dispatch, key); if (fs == 0) - return; + goto out; prog = dispatch->glCreateProgram(); dispatch->glAttachShader(prog, vs); @@ -268,6 +269,9 @@ glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key, (mask_sampler_uniform_location, 1); } } + +out: + glamor_put_dispatch(glamor_priv); } static glamor_composite_shader * @@ -316,7 +320,7 @@ glamor_init_composite_shaders(ScreenPtr screen) int vb_size; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glGenBuffers(1, &glamor_priv->vbo); dispatch->glGenBuffers(1, &glamor_priv->ebo); dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); @@ -331,17 +335,13 @@ glamor_init_composite_shaders(ScreenPtr screen) } else { vb = malloc(GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2); - if (vb == NULL) { - ErrorF("Failed to allocate vb memory.\n"); - exit(1); - } + if (vb == NULL) + FatalError("Failed to allocate vb memory.\n"); eb = malloc(eb_size); } - if (eb == NULL) { - ErrorF("fatal error, fail to get eb.\n"); - exit(1); - } + if (eb == NULL) + FatalError("fatal error, fail to get eb.\n"); glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { @@ -362,6 +362,8 @@ glamor_init_composite_shaders(ScreenPtr screen) free(eb); glamor_priv->vb = (char*)vb; } + + glamor_put_dispatch(glamor_priv); } void @@ -373,7 +375,7 @@ glamor_fini_composite_shaders(ScreenPtr screen) int i,j,k; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glDeleteBuffers(1, &glamor_priv->vbo); dispatch->glDeleteBuffers(1, &glamor_priv->ebo); @@ -388,8 +390,9 @@ glamor_fini_composite_shaders(ScreenPtr screen) if (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP && glamor_priv->vb) free(glamor_priv->vb); -} + glamor_put_dispatch(glamor_priv); +} static Bool glamor_set_composite_op(ScreenPtr screen, @@ -399,7 +402,7 @@ glamor_set_composite_op(ScreenPtr screen, struct blendinfo *op_info; glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; if (op >= ARRAY_SIZE(composite_op_info)) { glamor_fallback("unsupported render op %d \n", op); @@ -435,12 +438,14 @@ glamor_set_composite_op(ScreenPtr screen, dest_blend = GL_ONE_MINUS_SRC_COLOR; } + dispatch = glamor_get_dispatch(glamor_priv); if (source_blend == GL_ONE && dest_blend == GL_ZERO) { dispatch->glDisable(GL_BLEND); } else { dispatch->glEnable(GL_BLEND); dispatch->glBlendFunc(source_blend, dest_blend); } + glamor_put_dispatch(glamor_priv); return TRUE; } @@ -451,7 +456,6 @@ glamor_composite_texture_fixup(ScreenPtr screen, { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; Bool has_repeat; int width, height; @@ -478,7 +482,9 @@ glamor_set_composite_texture(ScreenPtr screen, int unit, { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glActiveTexture(GL_TEXTURE0 + unit); dispatch->glBindTexture(GL_TEXTURE_2D, pixmap_priv->fbo->tex); switch (picture->repeatType) { @@ -533,6 +539,7 @@ glamor_set_composite_texture(ScreenPtr screen, int unit, #ifndef GLAMOR_GLES2 dispatch->glEnable(GL_TEXTURE_2D); #endif + glamor_put_dispatch(glamor_priv); } static void @@ -654,7 +661,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; glamor_priv->vbo_offset = 0; glamor_priv->vbo_offset = 0; @@ -667,6 +674,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) if (glamor_priv->has_mask_coords) glamor_priv->vb_stride += 2 * sizeof(float); + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { dispatch->glBufferData(GL_ARRAY_BUFFER, @@ -706,6 +714,7 @@ glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) sizeof(float))); dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); } + glamor_put_dispatch(glamor_priv); } static void @@ -739,9 +748,12 @@ glamor_flush_composite_rects(ScreenPtr screen) { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; + if (!glamor_priv->render_nr_verts) return; + + dispatch = glamor_get_dispatch(glamor_priv); if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); else { @@ -754,6 +766,7 @@ glamor_flush_composite_rects(ScreenPtr screen) dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, GL_UNSIGNED_SHORT, NULL); + glamor_put_dispatch(glamor_priv); } static void @@ -846,7 +859,7 @@ glamor_composite_with_shader(CARD8 op, ScreenPtr screen = dest->pDrawable->pScreen; glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; @@ -870,10 +883,8 @@ glamor_composite_with_shader(CARD8 op, dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); int vert_stride = 4; int nrect_max; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; - GLAMOR_SET_CONTEXT(glamor_priv); if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { glamor_fallback("dest has no fbo.\n"); goto fail; @@ -1090,6 +1101,7 @@ glamor_composite_with_shader(CARD8 op, goto fail; } + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glUseProgram(shader->prog); if (key.source == SHADER_SOURCE_SOLID) { @@ -1233,6 +1245,7 @@ glamor_composite_with_shader(CARD8 op, dispatch->glUseProgram(0); if (saved_source_format) source->format = saved_source_format; + glamor_put_dispatch(glamor_priv); ret = TRUE; goto done; @@ -1240,12 +1253,7 @@ glamor_composite_with_shader(CARD8 op, fail: if (saved_source_format) source->format = saved_source_format; - - dispatch->glDisable(GL_BLEND); - dispatch->glUseProgram(0); - done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } @@ -1320,7 +1328,6 @@ _glamor_composite(CARD8 op, RegionRec region; BoxPtr box; int nbox, i, ok; - GLAMOR_DEFINE_CONTEXT; x_temp_src = x_source; y_temp_src = y_source; @@ -1328,7 +1335,6 @@ _glamor_composite(CARD8 op, y_temp_mask = y_mask; dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - GLAMOR_SET_CONTEXT(glamor_priv); /* Currently. Always fallback to cpu if destination is in CPU memory. */ if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { goto fail; @@ -1535,7 +1541,6 @@ fail: FreePicture(temp_mask, 0); if (prect != rect) free(prect); - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_setspans.c b/glamor/glamor_setspans.c index 07c94ab57..a9471698a 100644 --- a/glamor/glamor_setspans.c +++ b/glamor/glamor_setspans.c @@ -25,10 +25,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool @@ -40,17 +36,15 @@ _glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, glamor_pixmap_private *dest_pixmap_priv; glamor_screen_private *glamor_priv = glamor_get_screen_private(drawable->pScreen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; GLenum format, type; int no_alpha, no_revert, i; uint8_t *drawpixels_src = (uint8_t *) src; RegionPtr clip = fbGetCompositeClip(gc); BoxRec *pbox; int x_off, y_off; - GLAMOR_DEFINE_CONTEXT; Bool ret = FALSE; - GLAMOR_SET_CONTEXT(glamor_priv); dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { glamor_fallback("pixmap has no fbo.\n"); @@ -70,17 +64,15 @@ _glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, goto fail; } - glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); glamor_validate_pixmap(dest_pixmap); - if (!glamor_set_planemask(dest_pixmap, gc->planemask)) - goto fail; - glamor_set_alu(dispatch, gc->alu); if (!glamor_set_planemask(dest_pixmap, gc->planemask)) goto fail; glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_alu(dispatch, gc->alu); for (i = 0; i < n; i++) { n = REGION_NUM_RECTS(clip); @@ -103,6 +95,7 @@ _glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, glamor_set_planemask(dest_pixmap, ~0); glamor_set_alu(dispatch, GXcopy); dispatch->glDisable(GL_SCISSOR_TEST); + glamor_put_dispatch(glamor_priv); ret = TRUE; goto done; @@ -120,7 +113,6 @@ fail: ret = TRUE; done: - GLAMOR_RESTORE_CONTEXT(glamor_priv); return ret; } diff --git a/glamor/glamor_tile.c b/glamor/glamor_tile.c index 3087bea6e..917078fa2 100644 --- a/glamor/glamor_tile.c +++ b/glamor/glamor_tile.c @@ -25,10 +25,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_tile.c @@ -60,7 +56,7 @@ glamor_init_tile_shader(ScreenPtr screen) GLint sampler_uniform_location; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); glamor_priv->tile_prog = dispatch->glCreateProgram(); vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, tile_vs); fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, @@ -81,6 +77,7 @@ glamor_init_tile_shader(ScreenPtr screen) dispatch->glUseProgram(glamor_priv->tile_prog); dispatch->glUniform1i(sampler_uniform_location, 0); dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); } void @@ -90,8 +87,9 @@ glamor_fini_tile_shader(ScreenPtr screen) glamor_gl_dispatch *dispatch; glamor_priv = glamor_get_screen_private(screen); - dispatch = &glamor_priv->dispatch; + dispatch = glamor_get_dispatch(glamor_priv); dispatch->glDeleteProgram(glamor_priv->tile_prog); + glamor_put_dispatch(glamor_priv); } Bool @@ -103,7 +101,7 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile, ScreenPtr screen = pixmap->drawable.pScreen; glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch = &glamor_priv->dispatch; + glamor_gl_dispatch *dispatch; int x1 = x; int x2 = x + width; int y1 = y; @@ -161,6 +159,7 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile, glamor_validate_pixmap(pixmap); pixmap_priv_get_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); + dispatch = glamor_get_dispatch(glamor_priv); glamor_set_alu(dispatch, alu); if (GLAMOR_PIXMAP_PRIV_NO_PENDING(src_pixmap_priv)) { @@ -219,6 +218,7 @@ glamor_tile(PixmapPtr pixmap, PixmapPtr tile, dispatch->glUseProgram(0); glamor_set_alu(dispatch, GXcopy); glamor_set_planemask(pixmap, ~0); + glamor_put_dispatch(glamor_priv); return TRUE; fail: diff --git a/glamor/glamor_triangles.c b/glamor/glamor_triangles.c index 208ac77f1..e0f4a9708 100644 --- a/glamor/glamor_triangles.c +++ b/glamor/glamor_triangles.c @@ -26,10 +26,6 @@ * */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" static Bool diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h index a66e24802..4a51ba59e 100644 --- a/glamor/glamor_utils.h +++ b/glamor/glamor_utils.h @@ -664,31 +664,44 @@ static inline void glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); } -static inline void *glamor_make_current(ScreenPtr screen) +static inline void glamor_make_current(ScreenPtr screen) { - return glamor_egl_make_current(screen); + glamor_egl_make_current(screen); } -static inline void glamor_restore_current(ScreenPtr screen, void *previous_context) +static inline void glamor_restore_current(ScreenPtr screen) { - glamor_egl_restore_context(screen, previous_context); + glamor_egl_restore_context(screen); } #ifdef GLX_USE_SHARED_DISPATCH -#define GLAMOR_DEFINE_CONTEXT void *_previous_context_ = NULL -#define GLAMOR_SET_CONTEXT(glamor_priv) \ - if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) \ - _previous_context_ = glamor_make_current(glamor_priv->screen) +static inline glamor_gl_dispatch * +glamor_get_dispatch(glamor_screen_private *glamor_priv) +{ + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_make_current(glamor_priv->screen); -#define GLAMOR_RESTORE_CONTEXT(glamor_priv) \ - if ((glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) \ - && _previous_context_ != NULL) \ - glamor_restore_current(glamor_priv->screen, _previous_context_) + return &glamor_priv->_dispatch; +} + +static inline void +glamor_put_dispatch(glamor_screen_private *glamor_priv) +{ + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_restore_current(glamor_priv->screen); +} #else +#warning "Indirect GLX may be broken, need to implement context switch." +static inline glamor_gl_dispatch * +glamor_get_dispatch(glamor_screen_private *glamor_priv) +{ + return &glamor_priv->_dispatch; +} -#define GLAMOR_DEFINE_CONTEXT -#define GLAMOR_SET_CONTEXT(glamor_priv) -#define GLAMOR_RESTORE_CONTEXT(glamor_priv) +static inline void +glamor_put_dispatch(glamor_screen_private *glamor_priv) +{ +} #endif diff --git a/glamor/glamor_window.c b/glamor/glamor_window.c index f6e4cd175..3da11e447 100644 --- a/glamor/glamor_window.c +++ b/glamor/glamor_window.c @@ -21,10 +21,6 @@ * PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_DIX_CONFIG_H -#include -#endif - #include "glamor_priv.h" /** @file glamor_window.c