dri3: Add GLX_EXT_buffer_age support
v2: Indent according to Mesa style, reuse sbc instead of making a new swap_count field, and actually get a usable back before returning the age of the back (fixing updated piglit tests). Changes by anholt. Signed-off-by: Adel Gadllah <adel.gadllah@gmail.com> Reviewed-by: Robert Bragg <robert@sixbynine.org> (v1) Reviewed-by: Adel Gadllah <adel.gadllah@gmail.com> (v2) Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:

committed by
Eric Anholt

parent
0b02d8a633
commit
a69fabc76c
@@ -285,6 +285,10 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
|
||||
unsigned int num_attributes;
|
||||
GLboolean use_glx_1_3;
|
||||
|
||||
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||
__GLXDRIdrawable *pdraw;
|
||||
#endif
|
||||
|
||||
if (dpy == NULL)
|
||||
return 0;
|
||||
|
||||
@@ -311,6 +315,32 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
|
||||
if (!opcode)
|
||||
return 0;
|
||||
|
||||
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||
pdraw = GetGLXDRIDrawable(dpy, drawable);
|
||||
|
||||
if (attribute == GLX_BACK_BUFFER_AGE_EXT) {
|
||||
struct glx_screen *psc = pdraw->psc;
|
||||
struct glx_context *gc = __glXGetCurrentContext();
|
||||
|
||||
/* The GLX_EXT_buffer_age spec says:
|
||||
*
|
||||
* "If querying GLX_BACK_BUFFER_AGE_EXT and <draw> is not bound to
|
||||
* the calling thread's current context a GLXBadDrawable error is
|
||||
* generated."
|
||||
*/
|
||||
if (gc == NULL || gc->currentDpy != dpy ||
|
||||
(gc->currentDrawable != drawable && gc->currentReadable != drawable)) {
|
||||
__glXSendError(dpy, GLXBadDrawable, drawable, X_GLXGetDrawableAttributes, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (psc->driScreen->getBufferAge != NULL)
|
||||
*value = psc->driScreen->getBufferAge(pdraw);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
LockDisplay(dpy);
|
||||
|
||||
if (use_glx_1_3) {
|
||||
@@ -350,9 +380,6 @@ GetDrawableAttribute(Display * dpy, GLXDrawable drawable,
|
||||
_XEatData(dpy, length);
|
||||
}
|
||||
else {
|
||||
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
|
||||
__GLXDRIdrawable *pdraw = GetGLXDRIDrawable(dpy, drawable);
|
||||
#endif
|
||||
_XRead(dpy, (char *) data, length * sizeof(CARD32));
|
||||
|
||||
/* Search the set of returned attributes for the attribute requested by
|
||||
|
Reference in New Issue
Block a user