dri_util.h revision e438a36d8379d2ccb06aab2fa53fb52ae100198c
1680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/* 2680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 3680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * All Rights Reserved. 4680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 5680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 6680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * copy of this software and associated documentation files (the 7680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * "Software"), to deal in the Software without restriction, including 8680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 9680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 10680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * permit persons to whom the Software is furnished to do so, subject to 11680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * the following conditions: 12680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 13680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * The above copyright notice and this permission notice (including the 14680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * next paragraph) shall be included in all copies or substantial portions 15680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * of the Software. 16680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 17680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 25680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 266f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane/** 276f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * \file dri_util.h 286f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * DRI utility functions definitions. 296f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * 306f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * This module acts as glue between GLX and the actual hardware driver. A DRI 316f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * driver doesn't really \e have to use any of this - it's optional. But, some 326f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * useful stuff is done here that otherwise would have to be duplicated in most 336f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * drivers. 346f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * 356f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * Basically, these utility functions take care of some of the dirty details of 366f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * screen initialization, context creation, context binding, DRM setup, etc. 376f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * 386f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * These functions are compiled into each DRI driver so libGL.so knows nothing 396f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * about them. 406f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * 416f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * \sa dri_util.c. 426f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * 436f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * \author Kevin E. Martin <kevin@precisioninsight.com> 446f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane * \author Brian Paul <brian@precisioninsight.com> 456f7ed99b306990f284f9d57c0b66efaa7f2277e1Alan Hourihane */ 46680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 47680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#ifndef _DRI_UTIL_H_ 48680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#define _DRI_UTIL_H_ 49680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 50c39bf5e273a4995a279ae2af59fc29e06ab47e29Ian Romanick#include <GL/gl.h> 517192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis#include <GL/internal/dri_interface.h> 52a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg#include "main/mtypes.h" 537192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis#include "xmlconfig.h" 54e1a7f31c2b47e053ad70f5c4c519e294c273724cIan Romanick 55680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 5664106d0d9aeefa6974317042b6bc3e5eaabac5a2Kristian Høgsberg/** 57ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg * Extensions. 58ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg */ 59e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergextern const __DRIcoreExtension driCoreExtension; 6039a0e4e7de379a182c1544fa24d5cb2a7687ec72Kristian Høgsbergextern const __DRIdri2Extension driDRI2Extension; 61234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnesextern const __DRI2configQueryExtension dri2ConfigQueryExtension; 62ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg 63ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg/** 64680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Driver callback functions. 65680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 66680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Each DRI driver must have one of these structures with all the pointers set 67680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * to appropriate functions within the driver. 68680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 69680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * When glXCreateContext() is called, for example, it'll call a helper function 70680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * dri_util.c which in turn will jump through the \a CreateContext pointer in 71680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * this structure. 72680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 73680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwellstruct __DriverAPIRec { 747192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis const __DRIconfig **(*InitScreen) (__DRIscreen * priv); 757192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis 76e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*DestroyScreen)(__DRIscreen *driScrnPriv); 77680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 78a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg GLboolean (*CreateContext)(gl_api api, 797192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis const struct gl_config *glVis, 807192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis __DRIcontext *driContextPriv, 81680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *sharedContextPrivate); 82680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 83e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*DestroyContext)(__DRIcontext *driContextPriv); 84680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 85e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean (*CreateBuffer)(__DRIscreen *driScrnPriv, 86e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *driDrawPriv, 87d3491e775fb07f891463b2185d74bbad62f3ed24Kristian Høgsberg const struct gl_config *glVis, 88680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell GLboolean pixmapBuffer); 897192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis 90e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*DestroyBuffer)(__DRIdrawable *driDrawPriv); 91680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 927192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis void (*SwapBuffers)(__DRIdrawable *driDrawPriv); 937192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis 94e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean (*MakeCurrent)(__DRIcontext *driContextPriv, 95e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *driDrawPriv, 96e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *driReadPriv); 97680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 98e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean (*UnbindContext)(__DRIcontext *driContextPriv); 99e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 1001b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke __DRIbuffer *(*AllocateBuffer) (__DRIscreen *screenPrivate, 1017192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis unsigned int attachment, 1027192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis unsigned int format, 1037192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis int width, int height); 1047192c37294964b3f6e1551469f161593ec8f851dGeorge Sapountzis 1051b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke void (*ReleaseBuffer) (__DRIscreen *screenPrivate, __DRIbuffer *buffer); 106680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 107680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 108e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergextern const struct __DriverAPIRec driDriverAPI; 109e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 110680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 111680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 112680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-drawable private DRI driver information. 113680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 114e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIdrawableRec { 115680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 116e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis * Driver's private drawable information. 117680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 118680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This structure is opaque. 119680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 120680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 121680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 122680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 123e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Private data from the loader. We just hold on to it and pass 124e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * it back when calling into loader provided functions. 125680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 126e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate; 127680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 128680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 129e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis * Pointer to context to which this drawable is currently bound. 130e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis */ 131e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis __DRIcontext *driContextPriv; 132e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis 133e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis /** 134e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis * Pointer to screen on which this drawable was created. 135e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis */ 136e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis __DRIscreen *driScreenPriv; 137e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis 138e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis /** 139680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Reference count for number of context's currently bound to this 140e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis * drawable. 141680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 142680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Once it reaches zero, the drawable can be destroyed. 143680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 144680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * \note This behavior will change with GLX 1.3. 145680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 146680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int refcount; 147680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 148680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 149680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Last value of the stamp. 150680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 151e9beaf65fdaf82a7845cbe176f353ddb6b8466c7Kristian Høgsberg * If this differs from the value stored at __DRIdrawable::dri2.stamp, 152680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * then the drawable information has been modified by the X server, and the 153680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * drawable information (below) should be retrieved from the X server. 154680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 155680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell unsigned int lastStamp; 156680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 157d24b81e0e0f4109f3256dc45b0adc5ffd59fb749Kristian Høgsberg int w, h; 158680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 159680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 160e9beaf65fdaf82a7845cbe176f353ddb6b8466c7Kristian Høgsberg * Drawable timestamp. Increased when the loader calls invalidate. 161e9beaf65fdaf82a7845cbe176f353ddb6b8466c7Kristian Høgsberg */ 162925b901ba313a3ddd7567eca088951be39414430Kristian Høgsberg struct { 16361d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez unsigned int stamp; 164925b901ba313a3ddd7567eca088951be39414430Kristian Høgsberg } dri2; 165680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 166680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 167680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 168680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-context private driver information. 169680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 170e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIcontextRec { 171680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 172680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device driver's private context data. This structure is opaque. 173680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 174680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell void *driverPrivate; 175680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 176680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 177e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis * The loaders's private context data. This structure is opaque. 178e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis */ 179e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis void *loaderPrivate; 180e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis 181e438a36d8379d2ccb06aab2fa53fb52ae100198cGeorge Sapountzis /** 1827b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for drawing. 183680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 184e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *driDrawablePriv; 185680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 186680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 1877b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick * Pointer to drawable currently bound to this context for reading. 1887b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick */ 189e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *driReadablePriv; 1907b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick 1917b1ff326071658d5bd6e7feb2ad78d0e0209211dIan Romanick /** 192680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Pointer to screen on which this context was created. 193680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 194e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *driScreenPriv; 19593931d9e684cd5a5659c3f28f8da7294ac174542Kristian Høgsberg 196d449627829e1a4a3250a1a723af2f4e3cd5fd194Kristian Høgsberg struct { 197d449627829e1a4a3250a1a723af2f4e3cd5fd194Kristian Høgsberg int draw_stamp; 198d449627829e1a4a3250a1a723af2f4e3cd5fd194Kristian Høgsberg int read_stamp; 199d449627829e1a4a3250a1a723af2f4e3cd5fd194Kristian Høgsberg } dri2; 200680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 201680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 202680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell/** 203680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Per-screen private driver information. 204680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 205e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIscreenRec { 206680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 207680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Current screen's number 208680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 209680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int myNum; 210680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 211680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 212680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * File descriptor returned when the kernel device driver is opened. 213680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 214680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Used to: 215680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - authenticate client to kernel 216680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - map the frame buffer, SAREA, etc. 217680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * - close the kernel device driver 218680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 219680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell int fd; 220680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 221680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell /** 222875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis * DRM (kernel module) version information. 223875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis */ 224875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis __DRIversion drm_version; 225875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis 226875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis /** 227680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * Device-dependent private information (not stored in the SAREA). 228680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * 229680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell * This pointer is never touched by the DRI layer. 230680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell */ 231875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis void *driverPrivate; 232875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis 233875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis void *loaderPrivate; 234875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis 235875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis const __DRIextension **extensions; 236875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis 237875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis const __DRIswrastLoaderExtension *swrast_loader; 238680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 2397da5705b090d9c97a9b765d786c5e89afe9d1f25Kristian Høgsberg struct { 2407da5705b090d9c97a9b765d786c5e89afe9d1f25Kristian Høgsberg /* Flag to indicate that this is a DRI2 screen. Many of the above 2417da5705b090d9c97a9b765d786c5e89afe9d1f25Kristian Høgsberg * fields will not be valid or initializaed in that case. */ 242f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIdri2LoaderExtension *loader; 243c26247100bfd453a7ec013f630abe366c12fbd8bKristian Høgsberg __DRIimageLookupExtension *image; 244db2993faa0211b60efd46016de5d07110cb9777aKristian Høgsberg __DRIuseInvalidateExtension *useInvalidate; 2457da5705b090d9c97a9b765d786c5e89afe9d1f25Kristian Høgsberg } dri2; 2467da5705b090d9c97a9b765d786c5e89afe9d1f25Kristian Høgsberg 247a482e033082bb0794fdf56c47dd76d949afde6faEric Anholt driOptionCache optionInfo; 248234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes driOptionCache optionCache; 249875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis 250875a757ddd103722cfe9a2b21035024aa5a23d32George Sapountzis unsigned int api_mask; 251680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell}; 252680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell 25361d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerezextern void 25461d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerezdri2InvalidateDrawable(__DRIdrawable *drawable); 25561d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez 256c467db4cc765965bd347cf5b91aec39b831273ecKristian Høgsbergextern void 257c467db4cc765965bd347cf5b91aec39b831273ecKristian HøgsbergdriUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv); 258c467db4cc765965bd347cf5b91aec39b831273ecKristian Høgsberg 259680ec7f85158eae58fd5ab56da8c66a645883cb0Keith Whitwell#endif /* _DRI_UTIL_H_ */ 260