dri_util.h revision 8d12a6d537ca346291bc3e3bc90cc73509f4b419
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 52680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define CAPI /* XXX this should be globally defined somewhere */ 53680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 54e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#ifdef DRI_NEW_INTERFACE_ONLY 55e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick# include <GL/gl.h> 56e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#else 57e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick# include "glxclient.h" 58e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#endif /* DRI_NEW_INTERFACE_ONLY */ 59e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "drm.h" 60e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "drm_sarea.h" 61e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "GL/internal/glcore.h" 62e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#include "GL/internal/dri_interface.h" 63e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick 64e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick#define GLX_BAD_CONTEXT 5 65680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 665c113461df885d2de7eae405e058fb97cf4028dcIan Romanick/* This is a temporary relic. Once all drivers are converted to support 675c113461df885d2de7eae405e058fb97cf4028dcIan Romanick * the new interface, it can go away. 685c113461df885d2de7eae405e058fb97cf4028dcIan Romanick */ 695c113461df885d2de7eae405e058fb97cf4028dcIan Romanick#ifdef DRI_NEW_INTERFACE_ONLY 705c113461df885d2de7eae405e058fb97cf4028dcIan Romanick#define USE_NEW_INTERFACE 715c113461df885d2de7eae405e058fb97cf4028dcIan Romanick#endif 72680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 73680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIdisplayPrivateRec __DRIdisplayPrivate; 74680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIscreenPrivateRec __DRIscreenPrivate; 75680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIcontextPrivateRec __DRIcontextPrivate; 76680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIdrawablePrivateRec __DRIdrawablePrivate; 77680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelltypedef struct __DRIswapInfoRec __DRIswapInfo; 787104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheideggertypedef struct __DRIutilversionRec2 __DRIutilversion2; 79680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 80680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 81680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 82680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used by DRI_VALIDATE_DRAWABLE_INFO 83680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 84680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO_ONCE(pDrawPriv) \ 85680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell do { \ 86680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell if (*(pDrawPriv->pStamp) != pDrawPriv->lastStamp) { \ 87680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __driUtilUpdateDrawableInfo(pDrawPriv); \ 88680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 89680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } while (0) 90680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 91680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 92680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 93680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Utility macro to validate the drawable information. 94680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 95680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * See __DRIdrawablePrivate::pStamp and __DRIdrawablePrivate::lastStamp. 96680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 97680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO(psp, pdp) \ 98680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelldo { \ 99680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell while (*(pdp->pStamp) != pdp->lastStamp) { \ 100680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_UNLOCK(psp->fd, &psp->pSAREA->lock, \ 101680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell pdp->driContextPriv->hHWContext); \ 102680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 103680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 104680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp); \ 105680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 106680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 107680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_LIGHT_LOCK(psp->fd, &psp->pSAREA->lock, \ 108680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell pdp->driContextPriv->hHWContext); \ 109680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 110680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} while (0) 111680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 112680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 113680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 114680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver callback functions. 115680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 116680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Each DRI driver must have one of these structures with all the pointers set 117680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * to appropriate functions within the driver. 118680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 119680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * When glXCreateContext() is called, for example, it'll call a helper function 120680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * dri_util.c which in turn will jump through the \a CreateContext pointer in 121680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * this structure. 122680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 123680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DriverAPIRec { 124680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 125680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver initialization callback 126680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 127680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*InitDriver)(__DRIscreenPrivate *driScrnPriv); 128680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 129680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 130680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Screen destruction callback 131680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 132680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyScreen)(__DRIscreenPrivate *driScrnPriv); 133680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 134680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 135680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context creation callback 136680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 137680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateContext)(const __GLcontextModes *glVis, 138680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv, 139680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *sharedContextPrivate); 140680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 141680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 142680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context destruction callback 143680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 144680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyContext)(__DRIcontextPrivate *driContextPriv); 145680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 146680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 147680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) creation callback 148680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 149680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateBuffer)(__DRIscreenPrivate *driScrnPriv, 150680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 151680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __GLcontextModes *glVis, 152680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean pixmapBuffer); 153680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 154680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 155680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) destruction callback 156680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 157680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyBuffer)(__DRIdrawablePrivate *driDrawPriv); 158680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 159680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 160680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer swapping callback 161680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 162680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*SwapBuffers)(__DRIdrawablePrivate *driDrawPriv); 163680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 164680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 165680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context activation callback 166680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 167680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*MakeCurrent)(__DRIcontextPrivate *driContextPriv, 168680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 169680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driReadPriv); 170680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 171680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 172680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context unbinding callback 173680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 174680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*UnbindContext)(__DRIcontextPrivate *driContextPriv); 175680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 176680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 177680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Retrieves statistics about buffer swap operations. Required if 178680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX_OML_sync_control or GLX_MESA_swap_frame_usage is supported. 179680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 180680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetSwapInfo)( __DRIdrawablePrivate *dPriv, __DRIswapInfo * sInfo ); 181680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 182680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 183680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 184680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Required if GLX_SGI_video_sync or GLX_OML_sync_control is 185680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * supported. 186680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 187680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetMSC)( __DRIscreenPrivate * priv, int64_t * count ); 188680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 189680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 190680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * These are required if GLX_OML_sync_control is supported. 191680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 192680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 193680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 194680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder, 195680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc ); 196680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForSBC)( __DRIdrawablePrivate *priv, int64_t target_sbc, 197680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc, int64_t * sbc ); 198680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 199680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t (*SwapBuffersMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 200680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder ); 201680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 202680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 203680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 204680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 205680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIswapInfoRec { 206680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 207680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swapBuffers operations that have been *completed*. 208680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 20938b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_count; 210680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 211680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 212680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Unadjusted system time of the last buffer swap. This is the time 213680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * when the swap completed, not the time when swapBuffers was called. 214680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 215680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t swap_ust; 216680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 217680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 218680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swap operations that occurred after the swap deadline. That 219680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is if a swap happens more than swap_interval frames after the previous 220680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap, it has missed its deadline. If swap_interval is 0, then the 221680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap deadline is 1 frame after the previous swap. 222680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 22338b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_missed_count; 224680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 225680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 226680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Amount of time used by the last swap that missed its deadline. This 227680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is calculated as (__glXGetUST() - swap_ust) / (swap_interval * 228680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * time_for_single_vrefresh)). If the actual value of swap_interval is 229680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 0, then 1 is used instead. If swap_missed_count is non-zero, this 230680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * should be greater-than 1.0. 231680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 232680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell float swap_missed_usage; 233680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 234680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 235680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 236680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 237680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-drawable private DRI driver information. 238680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 239680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIdrawablePrivateRec { 240680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 241680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel drawable handle 242680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 243c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_drawable_t hHWDrawable; 244680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 245680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 246680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver's private drawable information. 247680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 248680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This structure is opaque. 249680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 250680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 251680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 252680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 253680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * X's drawable ID associated with this private drawable. 254680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 2550521ab46c1340d785ecfe64f4041c86912bc86afIan Romanick __DRIid draw; 256680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawable *pdraw; 257680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 258680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 259680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Reference count for number of context's currently bound to this 260680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable. 261680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 262680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Once it reaches zero, the drawable can be destroyed. 263680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 264680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note This behavior will change with GLX 1.3. 265680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 266680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int refcount; 267680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 268680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 269680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Index of this drawable information in the SAREA. 270680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 271680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int index; 272680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 273680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 274680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to the "drawable has changed ID" stamp in the SAREA. 275680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 276680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int *pStamp; 277680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 278680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 279680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Last value of the stamp. 280680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 281680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * If this differs from the value stored at __DRIdrawablePrivate::pStamp, 282680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * then the drawable information has been modified by the X server, and the 283680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable information (below) should be retrieved from the X server. 284680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 285680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int lastStamp; 286680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 287680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 288680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Drawable 289680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 290680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Drawable information used in software fallbacks. 291680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 292680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 293680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int x; 294680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int y; 295680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int w; 296680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int h; 297680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numClipRects; 298f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pClipRects; 299680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 300680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 301680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 302680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Back and depthbuffer 303680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 304680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Information about the back and depthbuffer where different from above. 305680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 306680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 307680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backX; 308680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backY; 309680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backClipRectType; 310680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numBackClipRects; 311f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pBackClipRects; 312680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 313680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 314680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 315680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to context to which this drawable is currently bound. 316680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 317680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv; 318680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 319680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 320680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this drawable was created. 321680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 322680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 323680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 324680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 325680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Display and screen information. 326680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 327680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Basically just need these for when the locking code needs to call 328680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * __driUtilUpdateDrawableInfo() which calls XF86DRIGetDrawableInfo(). 329680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 330680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 33160b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick __DRInativeDisplay *display; 332680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int screen; 333680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 334680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 335680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 336680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Called via glXSwapBuffers(). 337680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 338680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*swapBuffers)( __DRIdrawablePrivate *dPriv ); 339680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 340680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 341680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Get information about the location, size, and clip rects of the 342680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable within the display. 343680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 34460b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick PFNGLXGETDRAWABLEINFOPROC getInfo; 345680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 346680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 347680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 348680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-context private driver information. 349680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 350680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIcontextPrivateRec { 351680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 352680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel context handle used to access the device lock. 353680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 3546632a751be851699eebc85082ebb83a2c3a9da79Ian Romanick __DRIid contextID; 355680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 356680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 357680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel context handle used to access the device lock. 358680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 359c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_context_t hHWContext; 360680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 361680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 362680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device driver's private context data. This structure is opaque. 363680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 364680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 365680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 366680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 367680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This context's display pointer. 368680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 36960b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick __DRInativeDisplay *display; 370680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 371680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 372680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to drawable currently bound to this context. 373680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 374680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawablePriv; 375680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 376680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 377680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this context was created. 378680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 379680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 380680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 381680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 382680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 383680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-screen private driver information. 384680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 385680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIscreenPrivateRec { 386680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 387680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Display for this screen 388680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 38960b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick __DRInativeDisplay *display; 390680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 391680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 392680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Current screen's number 393680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 394680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int myNum; 395680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 396680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 397680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Callback functions into the hardware-specific DRI driver code. 398680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 399680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell struct __DriverAPIRec DriverAPI; 400680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 401680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 402680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DDX version 403680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DDX / 2D driver version information. 404680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 405680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 406680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 407680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxMajor; 408680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxMinor; 409680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxPatch; 410680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 411680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 412680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 413680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DRI version 414680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRI X extension version information. 415680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 416680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 417680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 418680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driMajor; 419680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driMinor; 420680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driPatch; 421680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 422680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 423680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 424680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DRM version 425680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRM (kernel module) version information. 426680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 427680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 428680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 429680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmMajor; 430680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmMinor; 431680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmPatch; 432680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 433680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 434680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 435680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * ID used when the client sets the drawable lock. 436680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 437680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The X server uses this value to detect if the client has died while 438680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * holding the drawable lock. 439680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 440680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drawLockID; 441680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 442680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 443680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * File descriptor returned when the kernel device driver is opened. 444680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 445680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to: 446680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - authenticate client to kernel 447680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - map the frame buffer, SAREA, etc. 448680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - close the kernel device driver 449680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 450680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fd; 451680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 452680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 453680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * SAREA pointer 454680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 455680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to access: 456680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device lock 457680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device-independent per-drawable and per-context(?) information 458680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 459ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA; 460680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 461680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 462680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Direct frame buffer access information 463680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used for software fallbacks. 464680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 465680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 466680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned char *pFB; 467680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbSize; 468680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbOrigin; 469680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbStride; 470680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbWidth; 471680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbHeight; 472680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbBPP; 473680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 474680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 475680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 476680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Device-dependent private information (stored in the SAREA). 477680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 478680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This data is accessed by the client driver only. 479680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 480680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 481680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *pDevPriv; 482680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int devPrivSize; 483680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 484680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 485680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 486680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Dummy context to which drawables are bound when not bound to any 487680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * other context. 488680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 489680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * A dummy hHWContext is created for this context, and is used by the GL 490680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * core when a hardware lock is required but the drawable is not currently 491680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * bound (e.g., potentially during a SwapBuffers request). The dummy 492680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * context is created when the first "real" context is created on this 493680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * screen. 494680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 495680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate dummyContextPriv; 496680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 497680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 498680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Hash table to hold the drawable information for this screen. 499680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 500680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *drawHash; 501680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 502680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 503680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device-dependent private information (not stored in the SAREA). 504680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 505680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This pointer is never touched by the DRI layer. 506680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 507680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *private; 508680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 509680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 510680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX visuals / FBConfigs for this screen. These are stored as a 511680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * linked list. 512680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 513680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note 514680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This field is \b only used in conjunction with the old interfaces. If 515680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the new interfaces are used, this field will be set to \c NULL and will 516680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * not be dereferenced. 517680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 518680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __GLcontextModes *modes; 519680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 520680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 521680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer back to the \c __DRIscreen that contains this structure. 522680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 523680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 524680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreen *psc; 525680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 526680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 527680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 5287104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger/** 5297104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * Used to store a version which includes a major range instead of a single 5307104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * major version number. 5317104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger */ 5327104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheideggerstruct __DRIutilversionRec2 { 5337104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_min; /** min allowed Major version number. */ 5347104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_max; /** max allowed Major version number. */ 5357104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int minor; /**< Minor version number. */ 5367104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int patch; /**< Patch-level. */ 5377104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger}; 5387104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger 539680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 540680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 541680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilMessage(const char *f, ...); 542680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 543680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 544680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 545680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp); 546680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 547680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 54860b0e12830310e7c05b4043857ed277b28b1c781Ian Romanickextern __DRIscreenPrivate * __driUtilCreateNewScreen( __DRInativeDisplay *dpy, 549680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int scrn, __DRIscreen *psc, __GLcontextModes * modes, 550680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * ddx_version, const __DRIversion * dri_version, 551680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, 552ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA, int fd, int internal_api_version, 553680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const struct __DriverAPIRec *driverAPI ); 554680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 55560b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick#ifndef DRI_NEW_INTERFACE_ONLY 556680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern __DRIscreenPrivate * 557680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilCreateScreen(Display *dpy, int scrn, __DRIscreen *psc, 558680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numConfigs, __GLXvisualConfig *config, 559680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const struct __DriverAPIRec *driverAPI); 56060b0e12830310e7c05b4043857ed277b28b1c781Ian Romanick#endif /* DRI_NEW_INTERFACE_ONLY */ 561680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 562680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* Test the version of the internal GLX API. Returns a value like strcmp. */ 563680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern int 5648d12a6d537ca346291bc3e3bc90cc73509f4b419Dave AirliedriCompareGLXAPIVersion( GLint required_version ); 565680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 566680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern float 567680ec7f85158eae58fd5ab56da8c66a645883cb0Keith WhitwelldriCalculateSwapUsage( __DRIdrawablePrivate *dPriv, 568680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t last_swap_ust, int64_t current_ust ); 569680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 57086356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane/* Test for the GLX header glx.h */ 57186356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane#ifndef GLX 572c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirlextern void 573c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl(*glXGetProcAddress(const GLubyte *procname))( void ); 57486356155018fce96ba3367fd1a48a18cd6db3c40Alan Hourihane#endif 575c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl 576680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#endif /* _DRI_UTIL_H_ */ 577