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