#ifndef _DRI_UTIL_H_
#define _DRI_UTIL_H_
-#ifdef GLX_DIRECT_RENDERING
-
-#define CAPI /* XXX this should be globally defined somewhere */
-
-#include <inttypes.h>
-#include "glxclient.h" /* for GLXDrawable */
-/* temporary */
-/* typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator); */
-#include "drm.h" /* for drm_clip_rect_t */
-#include "sarea.h" /* for XF86DRISAREAPtr */
-#include "GL/internal/glcore.h" /* for __GLcontextModes */
+#include <GL/gl.h>
+#include "drm.h"
+#include "drm_sarea.h"
+#include "xf86drm.h"
+#include "GL/internal/glcore.h"
+#include "GL/internal/dri_interface.h"
+#define GLX_BAD_CONTEXT 5
typedef struct __DRIdisplayPrivateRec __DRIdisplayPrivate;
typedef struct __DRIscreenPrivateRec __DRIscreenPrivate;
typedef struct __DRIcontextPrivateRec __DRIcontextPrivate;
typedef struct __DRIdrawablePrivateRec __DRIdrawablePrivate;
typedef struct __DRIswapInfoRec __DRIswapInfo;
+typedef struct __DRIutilversionRec2 __DRIutilversion2;
/**
#define DRI_VALIDATE_DRAWABLE_INFO(psp, pdp) \
do { \
while (*(pdp->pStamp) != pdp->lastStamp) { \
- DRM_UNLOCK(psp->fd, &psp->pSAREA->lock, \
- pdp->driContextPriv->hHWContext); \
+ register unsigned int hwContext = psp->pSAREA->lock.lock & \
+ ~(DRM_LOCK_HELD | DRM_LOCK_CONT); \
+ DRM_UNLOCK(psp->fd, &psp->pSAREA->lock, hwContext); \
\
DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \
DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp); \
DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \
\
- DRM_LIGHT_LOCK(psp->fd, &psp->pSAREA->lock, \
- pdp->driContextPriv->hHWContext); \
+ DRM_LIGHT_LOCK(psp->fd, &psp->pSAREA->lock, hwContext); \
} \
} while (0)
*/
GLboolean (*UnbindContext)(__DRIcontextPrivate *driContextPriv);
- /**
- * Full screen mode opening callback.
- *
- * \deprecated
- * Full screen functionality is no longer used by DRI. Drivers should
- * simply install a function returning \c GL_TRUE for backwards
- * compatability.
- *
- * \todo
- * Nothing calls this function anymore. Since this data structure is only
- * accessed with in the driver (i.e., libGL never sees it), we need to
- * remove the other cases that set this field and remove the field.
- */
- GLboolean (*OpenFullScreen)(__DRIcontextPrivate *driContextPriv);
-
- /**
- * Full screen mode closing callback.
- *
- * \deprecated
- * Full screen functionality is no longer used by DRI. Drivers should
- * simply install a function returning \c GL_TRUE for backwards
- * compatability.
- *
- * \todo
- * Nothing calls this function anymore. Since this data structure is only
- * accessed with in the driver (i.e., libGL never sees it), we need to
- * remove the other cases that set this field and remove the field.
- */
- GLboolean (*CloseFullScreen)(__DRIcontextPrivate *driContextPriv);
-
/**
* Retrieves statistics about buffer swap operations. Required if
* GLX_OML_sync_control or GLX_MESA_swap_frame_usage is supported.
int64_t (*SwapBuffersMSC)( __DRIdrawablePrivate *priv, int64_t target_msc,
int64_t divisor, int64_t remainder );
/*@}*/
+ void (*CopySubBuffer)(__DRIdrawablePrivate *driDrawPriv,
+ int x, int y, int w, int h);
+
+ /**
+ * See corresponding field in \c __DRIscreenRec.
+ */
+ void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname,
+ unsigned long long offset, GLint depth, GLuint pitch);
};
/**
* Number of swapBuffers operations that have been *completed*.
*/
- uint64_t swap_count;
+ u_int64_t swap_count;
/**
* Unadjusted system time of the last buffer swap. This is the time
* swap, it has missed its deadline. If swap_interval is 0, then the
* swap deadline is 1 frame after the previous swap.
*/
- uint64_t swap_missed_count;
+ u_int64_t swap_missed_count;
/**
* Amount of time used by the last swap that missed its deadline. This
/**
* Kernel drawable handle
*/
- drmDrawable hHWDrawable;
+ drm_drawable_t hHWDrawable;
/**
* Driver's private drawable information.
* \name Display and screen information.
*
* Basically just need these for when the locking code needs to call
- * __driUtilUpdateDrawableInfo() which calls XF86DRIGetDrawableInfo().
+ * \c __driUtilUpdateDrawableInfo.
*/
/*@{*/
__DRInativeDisplay *display;
* Called via glXSwapBuffers().
*/
void (*swapBuffers)( __DRIdrawablePrivate *dPriv );
-
- /**
- * Get information about the location, size, and clip rects of the
- * drawable within the display.
- */
- PFNGLXGETDRAWABLEINFOPROC getInfo;
};
/**
/**
* Kernel context handle used to access the device lock.
*/
- XID contextID;
+ __DRIid contextID;
/**
* Kernel context handle used to access the device lock.
*/
- drmContext hHWContext;
+ drm_context_t hHWContext;
/**
* Device driver's private context data. This structure is opaque.
__DRInativeDisplay *display;
/**
- * Pointer to drawable currently bound to this context.
+ * Pointer to drawable currently bound to this context for drawing.
*/
__DRIdrawablePrivate *driDrawablePriv;
+ /**
+ * Pointer to drawable currently bound to this context for reading.
+ */
+ __DRIdrawablePrivate *driReadablePriv;
+
/**
* Pointer to screen on which this context was created.
*/
* - the device lock
* - the device-independent per-drawable and per-context(?) information
*/
- XF86DRISAREAPtr pSAREA;
+ drm_sarea_t *pSAREA;
/**
* \name Direct frame buffer access information
};
+/**
+ * Used to store a version which includes a major range instead of a single
+ * major version number.
+ */
+struct __DRIutilversionRec2 {
+ int major_min; /** min allowed Major version number. */
+ int major_max; /** max allowed Major version number. */
+ int minor; /**< Minor version number. */
+ int patch; /**< Patch-level. */
+};
+
extern void
__driUtilMessage(const char *f, ...);
int scrn, __DRIscreen *psc, __GLcontextModes * modes,
const __DRIversion * ddx_version, const __DRIversion * dri_version,
const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer,
- drmAddress pSAREA, int fd, int internal_api_version,
+ drm_sarea_t *pSAREA, int fd, int internal_api_version,
const struct __DriverAPIRec *driverAPI );
-#ifndef DRI_NEW_INTERFACE_ONLY
-extern __DRIscreenPrivate *
-__driUtilCreateScreen(Display *dpy, int scrn, __DRIscreen *psc,
- int numConfigs, __GLXvisualConfig *config,
- const struct __DriverAPIRec *driverAPI);
-#endif /* DRI_NEW_INTERFACE_ONLY */
-
/* Test the version of the internal GLX API. Returns a value like strcmp. */
extern int
-driCompareGLXAPIVersion( GLuint required_version );
+driCompareGLXAPIVersion( GLint required_version );
extern float
driCalculateSwapUsage( __DRIdrawablePrivate *dPriv,
int64_t last_swap_ust, int64_t current_ust );
-#endif /* GLX_DIRECT_RENDERING */
+/**
+ * Pointer to the \c __DRIinterfaceMethods passed to the driver by the loader.
+ *
+ * This pointer is set in the driver's \c __driCreateNewScreen function and
+ * is defined in dri_util.c.
+ */
+extern const __DRIinterfaceMethods * dri_interface;
#endif /* _DRI_UTIL_H_ */