AIGLX: Allow 2D driver to prevent zero-copy texturing of a pixmap.
The driver can return ~0ULL to achieve this, e.g. if the pixmap doesn't fit into offscreen storage or if its pixel format isn't supported by the 3D engine for texturing. See http://bugs.freedesktop.org/show_bug.cgi?id=17723 or http://bugs.freedesktop.org/show_bug.cgi?id=12385 .
This commit is contained in:
parent
f8af66ddb2
commit
a7951a4dad
17
glx/glxdri.c
17
glx/glxdri.c
|
@ -361,6 +361,21 @@ glxFillAlphaChannel (CARD32 *pixels, CARD32 rowstride, int width, int height)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
testTexOffset(__GLXDRIscreen * const screen, PixmapPtr pPixmap)
|
||||||
|
{
|
||||||
|
Bool ret;
|
||||||
|
|
||||||
|
if (!screen->texOffsetStart || !screen->texOffset)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
__glXenterServer(GL_FALSE);
|
||||||
|
ret = screen->texOffsetStart(pPixmap) != ~0ULL;
|
||||||
|
__glXleaveServer(GL_FALSE);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (sticking this here for lack of a better place)
|
* (sticking this here for lack of a better place)
|
||||||
* Known issues with the GLX_EXT_texture_from_pixmap implementation:
|
* Known issues with the GLX_EXT_texture_from_pixmap implementation:
|
||||||
|
@ -396,7 +411,7 @@ __glXDRIbindTexImage(__GLXcontext *baseContext,
|
||||||
|
|
||||||
pixmap = (PixmapPtr) glxPixmap->pDraw;
|
pixmap = (PixmapPtr) glxPixmap->pDraw;
|
||||||
|
|
||||||
if (screen->texOffsetStart && screen->texOffset) {
|
if (testTexOffset(screen, pixmap)) {
|
||||||
__GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
|
__GLXDRIdrawable **texOffsetOverride = screen->texOffsetOverride;
|
||||||
int i, firstEmpty = 16;
|
int i, firstEmpty = 16;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user