On Sun, Mar 16, 2014 at 6:48 AM, Emil Velikov <emil.l.veli...@gmail.com> wrote: > With commit e59fa4c46c8("dri2: release texture image.") we updated the > extension without bumping the version number. The patch itself added an > interface required to enable texture_from_pixmap on certain platforms. > > The new code was effectively never build, as it depended on > __DRI_TEX_BUFFER_VERSION >= 3, which never came to be in upstream mesa. > > This commit bumps the version number, drops the __DRI_TEX_BUFFER_VERSION > checks and resolves all the build conflicts. Additionally it add a version > check as egl and dri3, as require version 2 of the extension which does > not have the releaseTexBuffer hook. > > Cc: Juan Zhao <juan.j.z...@intel.com> > Cc: Kristian Høgsberg <k...@bitplanet.net> > Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> > > squash yeah it works let's push it > > Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> > --- > include/GL/internal/dri_interface.h | 2 +- > src/egl/drivers/dri2/egl_dri2.c | 13 +++++++------ > src/egl/main/eglsurface.c | 11 +++++++++++ > src/egl/main/eglsurface.h | 3 +++ > src/glx/dri2_glx.c | 6 +----- > src/glx/dri3_glx.c | 3 ++- > src/glx/drisw_glx.c | 12 +++++------- > 7 files changed, 30 insertions(+), 20 deletions(-) > > diff --git a/include/GL/internal/dri_interface.h > b/include/GL/internal/dri_interface.h > index d028d05..4d57d0b 100644 > --- a/include/GL/internal/dri_interface.h > +++ b/include/GL/internal/dri_interface.h > @@ -231,7 +231,7 @@ struct __DRItexOffsetExtensionRec { > #define __DRI_TEXTURE_FORMAT_RGBA 0x20DA > > #define __DRI_TEX_BUFFER "DRI_TexBuffer" > -#define __DRI_TEX_BUFFER_VERSION 2 > +#define __DRI_TEX_BUFFER_VERSION 3 > struct __DRItexBufferExtensionRec { > __DRIextension base; > > diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c > index f304075..d734a1a 100644 > --- a/src/egl/drivers/dri2/egl_dri2.c > +++ b/src/egl/drivers/dri2/egl_dri2.c > @@ -1089,7 +1089,6 @@ static EGLBoolean > dri2_release_tex_image(_EGLDriver *drv, > _EGLDisplay *disp, _EGLSurface *surf, EGLint buffer) > { > -#if __DRI_TEX_BUFFER_VERSION >= 3 > struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); > struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf); > struct dri2_egl_context *dri2_ctx; > @@ -1109,11 +1108,13 @@ dri2_release_tex_image(_EGLDriver *drv, > default: > assert(0); > } > - if (dri2_dpy->tex_buffer->releaseTexBuffer!=NULL) > - (*dri2_dpy->tex_buffer->releaseTexBuffer)(dri2_ctx->dri_context,f > - target, > - dri2_surf->dri_drawable); > -#endif > + > + if (dri2_dpy->tex_buffer->base.version >= 3 && > + dri2_dpy->tex_buffer->releaseTexBuffer != NULL) { > + (*dri2_dpy->tex_buffer->releaseTexBuffer)(dri2_ctx->dri_context, > + target, > + dri2_surf->dri_drawable); > + } > > return EGL_TRUE; > } > diff --git a/src/egl/main/eglsurface.c b/src/egl/main/eglsurface.c > index c5ea224..e2cb73b 100644 > --- a/src/egl/main/eglsurface.c > +++ b/src/egl/main/eglsurface.c > @@ -531,6 +531,17 @@ _eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, > _EGLSurface *surface, > return EGL_TRUE; > } > > +EGLBoolean > +_eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, > + EGLint buffer) > +{ > + /* TODO: do basic error checking and return success/fail. > + * Drivers must implement the real stuff. > + */ > + > + return EGL_TRUE; > +} > +
What is this for? It's not used in this patch. Kristian > EGLBoolean > _eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, > diff --git a/src/egl/main/eglsurface.h b/src/egl/main/eglsurface.h > index a954123..d13d301 100644 > --- a/src/egl/main/eglsurface.h > +++ b/src/egl/main/eglsurface.h > @@ -94,6 +94,9 @@ _eglSurfaceAttrib(_EGLDriver *drv, _EGLDisplay *dpy, > _EGLSurface *surf, EGLint a > PUBLIC extern EGLBoolean > _eglBindTexImage(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, > EGLint buffer); > > +PUBLIC extern EGLBoolean > +_eglReleaseTexImage(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf, > EGLint buffer); > + > > extern EGLBoolean > _eglSwapInterval(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface *surf, > EGLint interval); > diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c > index 5a960b0..acd8427 100644 > --- a/src/glx/dri2_glx.c > +++ b/src/glx/dri2_glx.c > @@ -1031,17 +1031,14 @@ dri2_bind_tex_image(Display * dpy, > static void > dri2_release_tex_image(Display * dpy, GLXDrawable drawable, int buffer) > { > -#if __DRI_TEX_BUFFER_VERSION >= 3 > struct glx_context *gc = __glXGetCurrentContext(); > struct dri2_context *pcp = (struct dri2_context *) gc; > __GLXDRIdrawable *base = GetGLXDRIDrawable(dpy, drawable); > struct glx_display *dpyPriv = __glXInitialize(dpy); > struct dri2_drawable *pdraw = (struct dri2_drawable *) base; > - struct dri2_display *pdp = > - (struct dri2_display *) dpyPriv->dri2Display; > struct dri2_screen *psc; > > - if (pdraw != NULL) { > + if (dpyPriv != NULL && pdraw != NULL) { > psc = (struct dri2_screen *) base->psc; > > if (psc->texBuffer->base.version >= 3 && > @@ -1051,7 +1048,6 @@ dri2_release_tex_image(Display * dpy, GLXDrawable > drawable, int buffer) > pdraw->driDrawable); > } > } > -#endif > } > > static const struct glx_context_vtable dri2_context_vtable = { > diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c > index b7dac8e..653b1e5 100644 > --- a/src/glx/dri3_glx.c > +++ b/src/glx/dri3_glx.c > @@ -1527,7 +1527,8 @@ dri3_release_tex_image(Display * dpy, GLXDrawable > drawable, int buffer) > if (pdraw != NULL) { > psc = (struct dri3_screen *) base->psc; > > - if (psc->texBuffer->releaseTexBuffer) > + if (psc->texBuffer->base.version >= 3 && > + psc->texBuffer->releaseTexBuffer != NULL) > (*psc->texBuffer->releaseTexBuffer) (pcp->driContext, > pdraw->base.textureTarget, > pdraw->driDrawable); > diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c > index 33d347a..a77be4e 100644 > --- a/src/glx/drisw_glx.c > +++ b/src/glx/drisw_glx.c > @@ -342,16 +342,15 @@ drisw_bind_tex_image(Display * dpy, > static void > drisw_release_tex_image(Display * dpy, GLXDrawable drawable, int buffer) > { > -#if __DRI_TEX_BUFFER_VERSION >= 3 > struct glx_context *gc = __glXGetCurrentContext(); > - struct dri2_context *pcp = (struct dri2_context *) gc; > + struct drisw_context *pcp = (struct drisw_context *) gc; > __GLXDRIdrawable *base = GetGLXDRIDrawable(dpy, drawable); > struct glx_display *dpyPriv = __glXInitialize(dpy); > - struct dri2_drawable *pdraw = (struct dri2_drawable *) base; > - struct dri2_screen *psc; > + struct drisw_drawable *pdraw = (struct drisw_drawable *) base; > + struct drisw_screen *psc; > > - if (pdraw != NULL) { > - psc = (struct dri2_screen *) base->psc; > + if (dpyPriv != NULL && pdraw != NULL) { > + psc = (struct drisw_screen *) base->psc; > > if (!psc->texBuffer) > return; > @@ -363,7 +362,6 @@ drisw_release_tex_image(Display * dpy, GLXDrawable > drawable, int buffer) > pdraw->driDrawable); > } > } > -#endif > } > > static const struct glx_context_vtable drisw_context_vtable = { > -- > 1.9.0 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev