dri_util.h revision 64106d0d9aeefa6974317042b6bc3e5eaabac5a2
1680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* $XFree86: xc/lib/GL/dri/dri_util.h,v 1.1 2002/02/22 21:32:52 dawes Exp $ */ 2680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 3680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \file dri_util.h 4680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRI utility functions definitions. 5680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 6680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This module acts as glue between GLX and the actual hardware driver. A DRI 7680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * driver doesn't really \e have to use any of this - it's optional. But, some 8680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * useful stuff is done here that otherwise would have to be duplicated in most 9680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drivers. 10680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 11680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Basically, these utility functions take care of some of the dirty details of 12680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * screen initialization, context creation, context binding, DRM setup, etc. 13680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 14680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * These functions are compiled into each DRI driver so libGL.so knows nothing 15680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * about them. 16680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 17680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \sa dri_util.c. 18680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 19680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \author Kevin E. Martin <kevin@precisioninsight.com> 20680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \author Brian Paul <brian@precisioninsight.com> 21680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 22680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 23680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* 24680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 25680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * All Rights Reserved. 26680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 27680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 28680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * copy of this software and associated documentation files (the 29680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * "Software"), to deal in the Software without restriction, including 30680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 31680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 32680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 33680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the following conditions: 34680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 35680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The above copyright notice and this permission notice (including the 36680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 37680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * of the Software. 38680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 39680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 40680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 41680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 42680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 43680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 44680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 45680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 46680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 47680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 48680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 49680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#ifndef _DRI_UTIL_H_ 50680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define _DRI_UTIL_H_ 51680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 52c39bf5e273a4995a279ae2af59fc29e06ab47e29Ian Romanick#include <GL/gl.h> 53e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "drm.h" 54e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "drm_sarea.h" 5596f216565e09032021bafa7a805aa7707777fda1Brian Paul#include "xf86drm.h" 56e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "GL/internal/glcore.h" 57e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "GL/internal/dri_interface.h" 58e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick 59e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#define GLX_BAD_CONTEXT 5 60680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 61680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIdisplayPrivateRec __DRIdisplayPrivate; 62680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIscreenPrivateRec __DRIscreenPrivate; 63680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIcontextPrivateRec __DRIcontextPrivate; 64680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIdrawablePrivateRec __DRIdrawablePrivate; 65680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIswapInfoRec __DRIswapInfo; 667104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheideggertypedef struct __DRIutilversionRec2 __DRIutilversion2; 67680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 68680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 69680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 7064106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg * Driver specific entry point. Implemented by the driver. Called 7164106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg * from the top level createNewScreen entry point to initialize the 7264106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg * __DRIscreenPrivate struct. 7364106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg */ 7464106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsbergextern __GLcontextModes *__driDriverInitScreen(__DRIscreenPrivate *psp); 7564106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg 7664106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg/** 77680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used by DRI_VALIDATE_DRAWABLE_INFO 78680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 79680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO_ONCE(pDrawPriv) \ 80680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell do { \ 81680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell if (*(pDrawPriv->pStamp) != pDrawPriv->lastStamp) { \ 82680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __driUtilUpdateDrawableInfo(pDrawPriv); \ 83680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 84680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } while (0) 85680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 86680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 87680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 88680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Utility macro to validate the drawable information. 89680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 90680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * See __DRIdrawablePrivate::pStamp and __DRIdrawablePrivate::lastStamp. 91680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 92680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO(psp, pdp) \ 93680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelldo { \ 94680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell while (*(pdp->pStamp) != pdp->lastStamp) { \ 955ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell register unsigned int hwContext = psp->pSAREA->lock.lock & \ 965ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell ~(DRM_LOCK_HELD | DRM_LOCK_CONT); \ 975ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell DRM_UNLOCK(psp->fd, &psp->pSAREA->lock, hwContext); \ 98680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 99680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 100680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp); \ 101680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 102680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 1035ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell DRM_LIGHT_LOCK(psp->fd, &psp->pSAREA->lock, hwContext); \ 104680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 105680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} while (0) 106680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 107680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 108680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 109680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver callback functions. 110680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 111680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Each DRI driver must have one of these structures with all the pointers set 112680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * to appropriate functions within the driver. 113680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 114680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * When glXCreateContext() is called, for example, it'll call a helper function 115680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * dri_util.c which in turn will jump through the \a CreateContext pointer in 116680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * this structure. 117680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 118680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DriverAPIRec { 119680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 120680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Screen destruction callback 121680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 122680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyScreen)(__DRIscreenPrivate *driScrnPriv); 123680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 124680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 125680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context creation callback 126680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 127680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateContext)(const __GLcontextModes *glVis, 128680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv, 129680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *sharedContextPrivate); 130680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 131680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 132680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context destruction callback 133680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 134680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyContext)(__DRIcontextPrivate *driContextPriv); 135680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 136680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 137680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) creation callback 138680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 139680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateBuffer)(__DRIscreenPrivate *driScrnPriv, 140680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 141680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __GLcontextModes *glVis, 142680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean pixmapBuffer); 143680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 144680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 145680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) destruction callback 146680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 147680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyBuffer)(__DRIdrawablePrivate *driDrawPriv); 148680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 149680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 150680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer swapping callback 151680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 152680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*SwapBuffers)(__DRIdrawablePrivate *driDrawPriv); 153680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 154680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 155680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context activation callback 156680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 157680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*MakeCurrent)(__DRIcontextPrivate *driContextPriv, 158680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 159680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driReadPriv); 160680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 161680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 162680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context unbinding callback 163680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 164680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*UnbindContext)(__DRIcontextPrivate *driContextPriv); 165680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 166680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 167680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Retrieves statistics about buffer swap operations. Required if 168680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX_OML_sync_control or GLX_MESA_swap_frame_usage is supported. 169680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 170680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetSwapInfo)( __DRIdrawablePrivate *dPriv, __DRIswapInfo * sInfo ); 171680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 172680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 173680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 174680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Required if GLX_SGI_video_sync or GLX_OML_sync_control is 175680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * supported. 176680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 177680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetMSC)( __DRIscreenPrivate * priv, int64_t * count ); 178680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 179680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 180680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * These are required if GLX_OML_sync_control is supported. 181680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 182680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 183680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 184680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder, 185680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc ); 186680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForSBC)( __DRIdrawablePrivate *priv, int64_t target_sbc, 187680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc, int64_t * sbc ); 188680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 189680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t (*SwapBuffersMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 190680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder ); 191680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 192f2ad1b60c0da11283b399008f491792790cea294Brian Paul void (*CopySubBuffer)(__DRIdrawablePrivate *driDrawPriv, 193f2ad1b60c0da11283b399008f491792790cea294Brian Paul int x, int y, int w, int h); 194043d219b6da0636886f739613380cf44e334f268Michel Dänzer 195043d219b6da0636886f739613380cf44e334f268Michel Dänzer /** 196043d219b6da0636886f739613380cf44e334f268Michel Dänzer * See corresponding field in \c __DRIscreenRec. 197043d219b6da0636886f739613380cf44e334f268Michel Dänzer */ 198043d219b6da0636886f739613380cf44e334f268Michel Dänzer void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 199043d219b6da0636886f739613380cf44e334f268Michel Dänzer unsigned long long offset, GLint depth, GLuint pitch); 200680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 201680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 202680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 203680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIswapInfoRec { 204680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 205680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swapBuffers operations that have been *completed*. 206680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 20738b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_count; 208680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 209680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 210680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Unadjusted system time of the last buffer swap. This is the time 211680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * when the swap completed, not the time when swapBuffers was called. 212680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 213680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t swap_ust; 214680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 215680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 216680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swap operations that occurred after the swap deadline. That 217680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is if a swap happens more than swap_interval frames after the previous 218680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap, it has missed its deadline. If swap_interval is 0, then the 219680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap deadline is 1 frame after the previous swap. 220680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 22138b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_missed_count; 222680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 223680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 224680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Amount of time used by the last swap that missed its deadline. This 225680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is calculated as (__glXGetUST() - swap_ust) / (swap_interval * 226680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * time_for_single_vrefresh)). If the actual value of swap_interval is 227680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 0, then 1 is used instead. If swap_missed_count is non-zero, this 228680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * should be greater-than 1.0. 229680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 230680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell float swap_missed_usage; 231680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 232680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 233680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 234680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 235680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-drawable private DRI driver information. 236680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 237680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIdrawablePrivateRec { 238680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 239680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel drawable handle 240680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 241c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_drawable_t hHWDrawable; 242680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 243680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 244680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver's private drawable information. 245680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 246680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This structure is opaque. 247680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 248680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 249680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 250680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 251680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * X's drawable ID associated with this private drawable. 252680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 253680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawable *pdraw; 254680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 255680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 256680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Reference count for number of context's currently bound to this 257680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable. 258680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 259680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Once it reaches zero, the drawable can be destroyed. 260680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 261680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note This behavior will change with GLX 1.3. 262680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 263680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int refcount; 264680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 265680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 266680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Index of this drawable information in the SAREA. 267680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 268680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int index; 269680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 270680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 271680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to the "drawable has changed ID" stamp in the SAREA. 272680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 273680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int *pStamp; 274680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 275680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 276680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Last value of the stamp. 277680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 278680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * If this differs from the value stored at __DRIdrawablePrivate::pStamp, 279680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * then the drawable information has been modified by the X server, and the 280680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable information (below) should be retrieved from the X server. 281680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 282680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int lastStamp; 283680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 284680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 285680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Drawable 286680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 287680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Drawable information used in software fallbacks. 288680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 289680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 290680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int x; 291680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int y; 292680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int w; 293680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int h; 294680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numClipRects; 295f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pClipRects; 296680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 297680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 298680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 299680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Back and depthbuffer 300680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 301680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Information about the back and depthbuffer where different from above. 302680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 303680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 304680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backX; 305680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backY; 306680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backClipRectType; 307680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numBackClipRects; 308f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pBackClipRects; 309680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 310680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 311680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 312680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to context to which this drawable is currently bound. 313680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 314680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv; 315680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 316680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 317680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this drawable was created. 318680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 319680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 320680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 321680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 322680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Called via glXSwapBuffers(). 323680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 324680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*swapBuffers)( __DRIdrawablePrivate *dPriv ); 325680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 326680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 327680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 328680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-context private driver information. 329680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 330680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIcontextPrivateRec { 331680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 332680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel context handle used to access the device lock. 333680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 334c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_context_t hHWContext; 335680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 336680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 337680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device driver's private context data. This structure is opaque. 338680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 339680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 340680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 341680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 342aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg * Pointer back to the \c __DRIcontext that contains this structure. 343680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 344aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg __DRIcontext *pctx; 345680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 346680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 3477b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for drawing. 348680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 349680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawablePriv; 350680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 351680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 3527b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for reading. 3537b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick */ 3547b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick __DRIdrawablePrivate *driReadablePriv; 3557b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick 3567b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick /** 357680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this context was created. 358680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 359680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 360680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 361680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 362680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 363680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-screen private driver information. 364680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 365680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIscreenPrivateRec { 366680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 367680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Current screen's number 368680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 369680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int myNum; 370680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 371680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 372680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Callback functions into the hardware-specific DRI driver code. 373680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 374680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell struct __DriverAPIRec DriverAPI; 375680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 376680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 377680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DDX / 2D driver version information. 378680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 379efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg __DRIversion ddx_version; 380680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 381680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 382680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRI X extension version information. 383680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 384efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg __DRIversion dri_version; 385680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 386680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 387680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRM (kernel module) version information. 388680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 389efd03a278ae55b454509e9659c42899133983ebdKristian Høgsberg __DRIversion drm_version; 390680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 391680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 392680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * ID used when the client sets the drawable lock. 393680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 394680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The X server uses this value to detect if the client has died while 395680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * holding the drawable lock. 396680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 397680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drawLockID; 398680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 399680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 400680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * File descriptor returned when the kernel device driver is opened. 401680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 402680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to: 403680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - authenticate client to kernel 404680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - map the frame buffer, SAREA, etc. 405680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - close the kernel device driver 406680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 407680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fd; 408680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 409680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 410680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * SAREA pointer 411680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 412680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to access: 413680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device lock 414680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device-independent per-drawable and per-context(?) information 415680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 416ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA; 417680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 418680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 419680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Direct frame buffer access information 420680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used for software fallbacks. 421680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 422680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 423680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned char *pFB; 424680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbSize; 425680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbOrigin; 426680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbStride; 427680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbWidth; 428680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbHeight; 429680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbBPP; 430680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 431680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 432680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 433680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Device-dependent private information (stored in the SAREA). 434680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 435680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This data is accessed by the client driver only. 436680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 437680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 438680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *pDevPriv; 439680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int devPrivSize; 440680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 441680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 442680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 443680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Dummy context to which drawables are bound when not bound to any 444680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * other context. 445680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 446680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * A dummy hHWContext is created for this context, and is used by the GL 447680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * core when a hardware lock is required but the drawable is not currently 448680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * bound (e.g., potentially during a SwapBuffers request). The dummy 449680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * context is created when the first "real" context is created on this 450680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * screen. 451680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 452680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate dummyContextPriv; 453680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 454680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 455680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device-dependent private information (not stored in the SAREA). 456680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 457680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This pointer is never touched by the DRI layer. 458680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 459680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *private; 460680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 461680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 462680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX visuals / FBConfigs for this screen. These are stored as a 463680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * linked list. 464680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 465680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note 466680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This field is \b only used in conjunction with the old interfaces. If 467680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the new interfaces are used, this field will be set to \c NULL and will 468680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * not be dereferenced. 469680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 470680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __GLcontextModes *modes; 471680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 472680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 473680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer back to the \c __DRIscreen that contains this structure. 474680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 475680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 476680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreen *psc; 477680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 478680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 479680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 4807104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger/** 4817104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * Used to store a version which includes a major range instead of a single 4827104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * major version number. 4837104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger */ 4847104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheideggerstruct __DRIutilversionRec2 { 4857104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_min; /** min allowed Major version number. */ 4867104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_max; /** max allowed Major version number. */ 4877104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int minor; /**< Minor version number. */ 4887104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int patch; /**< Patch-level. */ 4897104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger}; 4907104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger 491680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 492680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 493680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilMessage(const char *f, ...); 494680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 495680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 496680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 497680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp); 498680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 499680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 500aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsbergextern __DRIscreenPrivate * __driUtilCreateNewScreen( int scr, __DRIscreen *psc, 501aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg __GLcontextModes * modes, 502680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * ddx_version, const __DRIversion * dri_version, 503680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, 504ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA, int fd, int internal_api_version, 505680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const struct __DriverAPIRec *driverAPI ); 506680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 507680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* Test the version of the internal GLX API. Returns a value like strcmp. */ 508680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern int 5098d12a6d537ca346291bc3e3bc90cc73509f4b419Dave AirliedriCompareGLXAPIVersion( GLint required_version ); 510680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 511680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern float 512680ec7f85158eae58fd5ab56da8c66a645883cb0Keith WhitwelldriCalculateSwapUsage( __DRIdrawablePrivate *dPriv, 513680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t last_swap_ust, int64_t current_ust ); 514680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 5155f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick/** 5165f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Pointer to the \c __DRIinterfaceMethods passed to the driver by the loader. 5175f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 5185f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This pointer is set in the driver's \c __driCreateNewScreen function and 5195f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * is defined in dri_util.c. 5205f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 5215f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanickextern const __DRIinterfaceMethods * dri_interface; 522c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl 523680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#endif /* _DRI_UTIL_H_ */ 524