X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fcommon%2Fdri_util.h;h=539d28d1149a74d9d54d5aa3feb36ce1a0ec1977;hb=ea2278bc793670d4b7922131d1638f2446c896e0;hp=17f26d1a210fad795ba02d1920a606b8ff40aaa7;hpb=ec032cb17b2ffb7b9401604258234998612b445f;p=mesa.git diff --git a/src/mesa/drivers/dri/common/dri_util.h b/src/mesa/drivers/dri/common/dri_util.h index 17f26d1a210..539d28d1149 100644 --- a/src/mesa/drivers/dri/common/dri_util.h +++ b/src/mesa/drivers/dri/common/dri_util.h @@ -49,24 +49,21 @@ #ifndef _DRI_UTIL_H_ #define _DRI_UTIL_H_ -#ifdef GLX_DIRECT_RENDERING - -#define CAPI /* XXX this should be globally defined somewhere */ - -#include -#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 +#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; /** @@ -88,15 +85,15 @@ typedef struct __DRIswapInfoRec __DRIswapInfo; #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) @@ -164,36 +161,6 @@ struct __DriverAPIRec { */ 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. @@ -220,6 +187,14 @@ struct __DriverAPIRec { 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); }; @@ -227,7 +202,7 @@ struct __DRIswapInfoRec { /** * 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 @@ -241,7 +216,7 @@ struct __DRIswapInfoRec { * 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 @@ -254,14 +229,6 @@ struct __DRIswapInfoRec { }; -typedef Bool (GetDrawableInfo)( Display *dpy, int scrn, __DRIid draw, - unsigned int * index, unsigned int * stamp, - int * x, int * y, int * width, int * height, - int * numClipRects, drm_clip_rect_t ** pClipRects, - int * backX, int * backY, - int * numBackClipRects, drm_clip_rect_t ** pBackClipRects ); - - /** * Per-drawable private DRI driver information. */ @@ -269,7 +236,7 @@ struct __DRIdrawablePrivateRec { /** * Kernel drawable handle */ - drmDrawable hHWDrawable; + drm_drawable_t hHWDrawable; /** * Driver's private drawable information. @@ -354,10 +321,10 @@ struct __DRIdrawablePrivateRec { * \name Display and screen information. * * Basically just need these for when the locking code needs to call - * __driUtilUpdateDrawableInfo() which calls XF86DRIGetDrawableInfo(). + * \c __driUtilUpdateDrawableInfo. */ /*@{*/ - Display *display; + __DRInativeDisplay *display; int screen; /*@}*/ @@ -365,12 +332,6 @@ struct __DRIdrawablePrivateRec { * Called via glXSwapBuffers(). */ void (*swapBuffers)( __DRIdrawablePrivate *dPriv ); - - /** - * Get information about the location, size, and clip rects of the - * drawable within the display. - */ - GetDrawableInfo * getInfo; }; /** @@ -380,12 +341,12 @@ struct __DRIcontextPrivateRec { /** * 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. @@ -395,13 +356,18 @@ struct __DRIcontextPrivateRec { /** * This context's display pointer. */ - Display *display; + __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. */ @@ -415,7 +381,7 @@ struct __DRIscreenPrivateRec { /** * Display for this screen */ - Display *display; + __DRInativeDisplay *display; /** * Current screen's number @@ -485,7 +451,7 @@ struct __DRIscreenPrivateRec { * - the device lock * - the device-independent per-drawable and per-context(?) information */ - XF86DRISAREAPtr pSAREA; + drm_sarea_t *pSAREA; /** * \name Direct frame buffer access information @@ -554,6 +520,17 @@ struct __DRIscreenPrivateRec { }; +/** + * 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, ...); @@ -563,26 +540,27 @@ extern void __driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp); -extern __DRIscreenPrivate * __driUtilCreateNewScreen( Display *dpy, +extern __DRIscreenPrivate * __driUtilCreateNewScreen( __DRInativeDisplay *dpy, 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 ); -extern __DRIscreenPrivate * -__driUtilCreateScreen(Display *dpy, int scrn, __DRIscreen *psc, - int numConfigs, __GLXvisualConfig *config, - const struct __DriverAPIRec *driverAPI); - /* 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_ */