ac11431b877f49da62ae2b77cd94a244b564f9a0
[mesa.git] / src / mesa / drivers / dri / intel / intel_screen.h
1 /**************************************************************************
2 *
3 * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
16 * of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28 #ifndef _INTEL_INIT_H_
29 #define _INTEL_INIT_H_
30
31 #include <sys/time.h>
32 #include "dri_util.h"
33 #include "i830_common.h"
34 #include "xmlconfig.h"
35 #include "dri_bufmgr.h"
36
37 /* XXX: change name or eliminate to avoid conflict with "struct
38 * intel_region"!!!
39 */
40 typedef struct
41 {
42 drm_handle_t handle;
43 drmSize size; /* region size in bytes */
44 char *map; /* memory map */
45 int offset; /* from start of video mem, in bytes */
46 int pitch; /* row stride, in bytes */
47 unsigned int bo_handle; /* buffer object id if available, or -1 */
48 /**
49 * Flags if the region is tiled.
50 *
51 * Not included is Y versus X tiling.
52 */
53 GLboolean tiled;
54 } intelRegion;
55
56 typedef struct
57 {
58 intelRegion front;
59 intelRegion back;
60 intelRegion third;
61 intelRegion depth;
62 intelRegion tex;
63
64 struct intel_region *front_region;
65 struct intel_region *back_region;
66 struct intel_region *third_region;
67 struct intel_region *depth_region;
68
69 int deviceID;
70 int width;
71 int height;
72 int mem; /* unused */
73
74 int cpp; /* for front and back buffers */
75 /* int bitsPerPixel; */
76 int fbFormat; /* XXX FBO: this is obsolete - remove after i830 updates */
77
78 int logTextureGranularity;
79
80 __DRIscreenPrivate *driScrnPriv;
81 unsigned int sarea_priv_offset;
82
83 int drmMinor;
84
85 int irq_active;
86 int allow_batchbuffer;
87
88 /**
89 * Configuration cache with default values for all contexts
90 */
91 driOptionCache optionCache;
92
93 dri_bufmgr *bufmgr;
94 unsigned int maxBatchSize;
95
96 /**
97 * This value indicates that the kernel memory manager is being used
98 * instead of the fake client-side memory manager.
99 */
100 GLboolean ttm;
101
102 unsigned batch_id;
103 } intelScreenPrivate;
104
105
106
107 extern GLboolean intelMapScreenRegions(__DRIscreenPrivate * sPriv);
108
109 extern void intelUnmapScreenRegions(intelScreenPrivate * intelScreen);
110
111 extern void
112 intelUpdateScreenFromSAREA(intelScreenPrivate * intelScreen,
113 drmI830Sarea * sarea);
114
115 extern void intelDestroyContext(__DRIcontextPrivate * driContextPriv);
116
117 extern GLboolean intelUnbindContext(__DRIcontextPrivate * driContextPriv);
118
119 extern GLboolean
120 intelMakeCurrent(__DRIcontextPrivate * driContextPriv,
121 __DRIdrawablePrivate * driDrawPriv,
122 __DRIdrawablePrivate * driReadPriv);
123
124 extern void intelSwapBuffers(__DRIdrawablePrivate * dPriv);
125
126 extern void
127 intelCopySubBuffer(__DRIdrawablePrivate * dPriv, int x, int y, int w, int h);
128
129 extern struct intel_context *intelScreenContext(intelScreenPrivate *intelScreen);
130
131 #endif