dri_util.h revision aceccda56b08338e217991e54607f1c9f18fc3e6
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/** 70680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used by DRI_VALIDATE_DRAWABLE_INFO 71680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 72680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO_ONCE(pDrawPriv) \ 73680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell do { \ 74680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell if (*(pDrawPriv->pStamp) != pDrawPriv->lastStamp) { \ 75680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __driUtilUpdateDrawableInfo(pDrawPriv); \ 76680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 77680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } while (0) 78680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 79680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 80680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 81680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Utility macro to validate the drawable information. 82680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 83680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * See __DRIdrawablePrivate::pStamp and __DRIdrawablePrivate::lastStamp. 84680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 85680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define DRI_VALIDATE_DRAWABLE_INFO(psp, pdp) \ 86680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwelldo { \ 87680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell while (*(pdp->pStamp) != pdp->lastStamp) { \ 885ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell register unsigned int hwContext = psp->pSAREA->lock.lock & \ 895ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell ~(DRM_LOCK_HELD | DRM_LOCK_CONT); \ 905ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell DRM_UNLOCK(psp->fd, &psp->pSAREA->lock, hwContext); \ 91680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 92680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 93680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp); \ 94680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID); \ 95680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell \ 965ac93f86210eb5c2a8dee74ec19b0ecd54376863Keith Whitwell DRM_LIGHT_LOCK(psp->fd, &psp->pSAREA->lock, hwContext); \ 97680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell } \ 98680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell} while (0) 99680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 100680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 101680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 102680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver callback functions. 103680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 104680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Each DRI driver must have one of these structures with all the pointers set 105680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * to appropriate functions within the driver. 106680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 107680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * When glXCreateContext() is called, for example, it'll call a helper function 108680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * dri_util.c which in turn will jump through the \a CreateContext pointer in 109680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * this structure. 110680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 111680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DriverAPIRec { 112680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 113680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver initialization callback 114680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 115680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*InitDriver)(__DRIscreenPrivate *driScrnPriv); 116680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 117680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 118680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Screen destruction callback 119680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 120680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyScreen)(__DRIscreenPrivate *driScrnPriv); 121680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 122680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 123680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context creation callback 124680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 125680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateContext)(const __GLcontextModes *glVis, 126680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv, 127680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *sharedContextPrivate); 128680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 129680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 130680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context destruction callback 131680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 132680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyContext)(__DRIcontextPrivate *driContextPriv); 133680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 134680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 135680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) creation callback 136680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 137680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*CreateBuffer)(__DRIscreenPrivate *driScrnPriv, 138680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 139680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __GLcontextModes *glVis, 140680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean pixmapBuffer); 141680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 142680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 143680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer (drawable) destruction callback 144680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 145680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*DestroyBuffer)(__DRIdrawablePrivate *driDrawPriv); 146680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 147680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 148680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Buffer swapping callback 149680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 150680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*SwapBuffers)(__DRIdrawablePrivate *driDrawPriv); 151680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 152680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 153680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context activation callback 154680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 155680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*MakeCurrent)(__DRIcontextPrivate *driContextPriv, 156680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawPriv, 157680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driReadPriv); 158680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 159680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 160680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Context unbinding callback 161680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 162680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean (*UnbindContext)(__DRIcontextPrivate *driContextPriv); 163680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 164680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 165680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Retrieves statistics about buffer swap operations. Required if 166680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX_OML_sync_control or GLX_MESA_swap_frame_usage is supported. 167680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 168680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetSwapInfo)( __DRIdrawablePrivate *dPriv, __DRIswapInfo * sInfo ); 169680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 170680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 171680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 172680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Required if GLX_SGI_video_sync or GLX_OML_sync_control is 173680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * supported. 174680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 175680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*GetMSC)( __DRIscreenPrivate * priv, int64_t * count ); 176680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 177680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 178680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * These are required if GLX_OML_sync_control is supported. 179680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 180680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 181680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 182680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder, 183680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc ); 184680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int (*WaitForSBC)( __DRIdrawablePrivate *priv, int64_t target_sbc, 185680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t * msc, int64_t * sbc ); 186680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 187680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t (*SwapBuffersMSC)( __DRIdrawablePrivate *priv, int64_t target_msc, 188680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t divisor, int64_t remainder ); 189680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 190f2ad1b60c0da11283b399008f491792790cea294Brian Paul void (*CopySubBuffer)(__DRIdrawablePrivate *driDrawPriv, 191f2ad1b60c0da11283b399008f491792790cea294Brian Paul int x, int y, int w, int h); 192043d219b6da0636886f739613380cf44e334f268Michel Dänzer 193043d219b6da0636886f739613380cf44e334f268Michel Dänzer /** 194043d219b6da0636886f739613380cf44e334f268Michel Dänzer * See corresponding field in \c __DRIscreenRec. 195043d219b6da0636886f739613380cf44e334f268Michel Dänzer */ 196043d219b6da0636886f739613380cf44e334f268Michel Dänzer void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 197043d219b6da0636886f739613380cf44e334f268Michel Dänzer unsigned long long offset, GLint depth, GLuint pitch); 198680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 199680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 200680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 201680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIswapInfoRec { 202680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 203680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swapBuffers operations that have been *completed*. 204680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 20538b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_count; 206680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 207680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 208680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Unadjusted system time of the last buffer swap. This is the time 209680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * when the swap completed, not the time when swapBuffers was called. 210680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 211680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t swap_ust; 212680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 213680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 214680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Number of swap operations that occurred after the swap deadline. That 215680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is if a swap happens more than swap_interval frames after the previous 216680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap, it has missed its deadline. If swap_interval is 0, then the 217680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * swap deadline is 1 frame after the previous swap. 218680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 21938b317d508a2a3a4cc6d700ebca80c3b06c913e2Alan Hourihane u_int64_t swap_missed_count; 220680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 221680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 222680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Amount of time used by the last swap that missed its deadline. This 223680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * is calculated as (__glXGetUST() - swap_ust) / (swap_interval * 224680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * time_for_single_vrefresh)). If the actual value of swap_interval is 225680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 0, then 1 is used instead. If swap_missed_count is non-zero, this 226680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * should be greater-than 1.0. 227680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 228680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell float swap_missed_usage; 229680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 230680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 231680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 232680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 233680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-drawable private DRI driver information. 234680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 235680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIdrawablePrivateRec { 236680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 237680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel drawable handle 238680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 239c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_drawable_t hHWDrawable; 240680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 241680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 242680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver's private drawable information. 243680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 244680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This structure is opaque. 245680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 246680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 247680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 248680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 249680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * X's drawable ID associated with this private drawable. 250680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 2510521ab46c1340d785ecfe64f4041c86912bc86afIan Romanick __DRIid draw; 252680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawable *pdraw; 253680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 254680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 255680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Reference count for number of context's currently bound to this 256680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable. 257680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 258680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Once it reaches zero, the drawable can be destroyed. 259680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 260680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note This behavior will change with GLX 1.3. 261680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 262680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int refcount; 263680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 264680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 265680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Index of this drawable information in the SAREA. 266680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 267680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int index; 268680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 269680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 270680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to the "drawable has changed ID" stamp in the SAREA. 271680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 272680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int *pStamp; 273680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 274680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 275680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Last value of the stamp. 276680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 277680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * If this differs from the value stored at __DRIdrawablePrivate::pStamp, 278680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * then the drawable information has been modified by the X server, and the 279680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable information (below) should be retrieved from the X server. 280680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 281680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int lastStamp; 282680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 283680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 284680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Drawable 285680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 286680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Drawable information used in software fallbacks. 287680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 288680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 289680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int x; 290680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int y; 291680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int w; 292680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int h; 293680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numClipRects; 294f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pClipRects; 295680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 296680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 297680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 298680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Back and depthbuffer 299680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 300680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Information about the back and depthbuffer where different from above. 301680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 302680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 303680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backX; 304680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backY; 305680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int backClipRectType; 306680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int numBackClipRects; 307f7423f462882ce96725e84cf7f28cee2c45f801bDave Airlie drm_clip_rect_t *pBackClipRects; 308680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 309680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 310680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 311680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to context to which this drawable is currently bound. 312680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 313680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate *driContextPriv; 314680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 315680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 316680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this drawable was created. 317680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 318680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 319680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 320680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 321680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Called via glXSwapBuffers(). 322680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 323680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void (*swapBuffers)( __DRIdrawablePrivate *dPriv ); 324680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 325680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 326680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 327680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-context private driver information. 328680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 329680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIcontextPrivateRec { 330680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 331680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel context handle used to access the device lock. 332680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 3336632a751be851699eebc85082ebb83a2c3a9da79Ian Romanick __DRIid contextID; 334680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 335680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 336680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Kernel context handle used to access the device lock. 337680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 338c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick drm_context_t hHWContext; 339680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 340680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 341680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device driver's private context data. This structure is opaque. 342680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 343680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 344680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 345680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 346aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg * Pointer back to the \c __DRIcontext that contains this structure. 347680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 348aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg __DRIcontext *pctx; 349680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 350680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 3517b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for drawing. 352680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 353680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIdrawablePrivate *driDrawablePriv; 354680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 355680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 3567b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for reading. 3577b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick */ 3587b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick __DRIdrawablePrivate *driReadablePriv; 3597b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick 3607b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick /** 361680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this context was created. 362680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 363680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreenPrivate *driScreenPriv; 364680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 365680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 366680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 367680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-screen private driver information. 368680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 369680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DRIscreenPrivateRec { 370680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 371680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Current screen's number 372680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 373680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int myNum; 374680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 375680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 376680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Callback functions into the hardware-specific DRI driver code. 377680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 378680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell struct __DriverAPIRec DriverAPI; 379680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 380680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 381680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DDX version 382680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DDX / 2D driver version information. 383680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 384680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 385680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 386680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxMajor; 387680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxMinor; 388680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int ddxPatch; 389680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 390680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 391680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 392680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DRI version 393680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRI X extension version information. 394680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 395680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 396680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 397680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driMajor; 398680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driMinor; 399680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int driPatch; 400680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 401680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 402680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 403680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name DRM version 404680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * DRM (kernel module) version information. 405680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \todo Replace these fields with a \c __DRIversionRec. 406680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 407680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 408680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmMajor; 409680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmMinor; 410680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drmPatch; 411680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 412680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 413680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 414680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * ID used when the client sets the drawable lock. 415680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 416680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The X server uses this value to detect if the client has died while 417680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * holding the drawable lock. 418680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 419680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int drawLockID; 420680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 421680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 422680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * File descriptor returned when the kernel device driver is opened. 423680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 424680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to: 425680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - authenticate client to kernel 426680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - map the frame buffer, SAREA, etc. 427680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - close the kernel device driver 428680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 429680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fd; 430680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 431680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 432680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * SAREA pointer 433680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 434680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to access: 435680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device lock 436680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - the device-independent per-drawable and per-context(?) information 437680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 438ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA; 439680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 440680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 441680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Direct frame buffer access information 442680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used for software fallbacks. 443680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 444680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 445680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned char *pFB; 446680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbSize; 447680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbOrigin; 448680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbStride; 449680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbWidth; 450680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbHeight; 451680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fbBPP; 452680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 453680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 454680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 455680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \name Device-dependent private information (stored in the SAREA). 456680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 457680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This data is accessed by the client driver only. 458680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 459680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@{*/ 460680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *pDevPriv; 461680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int devPrivSize; 462680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /*@}*/ 463680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 464680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 465680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Dummy context to which drawables are bound when not bound to any 466680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * other context. 467680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 468680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * A dummy hHWContext is created for this context, and is used by the GL 469680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * core when a hardware lock is required but the drawable is not currently 470680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * bound (e.g., potentially during a SwapBuffers request). The dummy 471680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * context is created when the first "real" context is created on this 472680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * screen. 473680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 474680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIcontextPrivate dummyContextPriv; 475680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 476680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 477680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device-dependent private information (not stored in the SAREA). 478680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 479680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This pointer is never touched by the DRI layer. 480680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 481680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *private; 482680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 483680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 484680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * GLX visuals / FBConfigs for this screen. These are stored as a 485680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * linked list. 486680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 487680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note 488680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This field is \b only used in conjunction with the old interfaces. If 489680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the new interfaces are used, this field will be set to \c NULL and will 490680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * not be dereferenced. 491680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 492680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __GLcontextModes *modes; 493680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 494680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 495680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer back to the \c __DRIscreen that contains this structure. 496680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 497680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 498680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell __DRIscreen *psc; 499680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 500680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 501680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 5027104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger/** 5037104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * Used to store a version which includes a major range instead of a single 5047104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger * major version number. 5057104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger */ 5067104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheideggerstruct __DRIutilversionRec2 { 5077104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_min; /** min allowed Major version number. */ 5087104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int major_max; /** max allowed Major version number. */ 5097104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int minor; /**< Minor version number. */ 5107104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger int patch; /**< Patch-level. */ 5117104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger}; 5127104ce0a0e8f25bf097ad695d007b1a4b3e5d051Roland Scheidegger 513680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 514680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 515680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilMessage(const char *f, ...); 516680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 517680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 518680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern void 519680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell__driUtilUpdateDrawableInfo(__DRIdrawablePrivate *pdp); 520680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 521680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 522aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsbergextern __DRIscreenPrivate * __driUtilCreateNewScreen( int scr, __DRIscreen *psc, 523aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg __GLcontextModes * modes, 524680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * ddx_version, const __DRIversion * dri_version, 525680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, 526ffb36d57a5f6359b5b91b73af60482a0016dd431Jon Smirl drm_sarea_t *pSAREA, int fd, int internal_api_version, 527680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell const struct __DriverAPIRec *driverAPI ); 528680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 529680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* Test the version of the internal GLX API. Returns a value like strcmp. */ 530680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern int 5318d12a6d537ca346291bc3e3bc90cc73509f4b419Dave AirliedriCompareGLXAPIVersion( GLint required_version ); 532680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 533680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellextern float 534680ec7f85158eae58fd5ab56da8c66a645883cb0Keith WhitwelldriCalculateSwapUsage( __DRIdrawablePrivate *dPriv, 535680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int64_t last_swap_ust, int64_t current_ust ); 536680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 5375f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick/** 5385f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Pointer to the \c __DRIinterfaceMethods passed to the driver by the loader. 5395f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 5405f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This pointer is set in the driver's \c __driCreateNewScreen function and 5415f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * is defined in dri_util.c. 5425f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 5435f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanickextern const __DRIinterfaceMethods * dri_interface; 544c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl 545680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#endif /* _DRI_UTIL_H_ */ 546