1 /* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_context.h,v 1.12 2002/12/16 16:18:52 dawes Exp $ */
2 /**************************************************************************
4 Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc.,
8 Permission is hereby granted, free of charge, to any person obtaining a
9 copy of this software and associated documentation files (the "Software"),
10 to deal in the Software without restriction, including without limitation
11 on the rights to use, copy, modify, merge, publish, distribute, sub
12 license, and/or sell copies of the Software, and to permit persons to whom
13 the Software is furnished to do so, subject to the following conditions:
15 The above copyright notice and this permission notice (including the next
16 paragraph) shall be included in all copies or substantial portions of the
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
22 ATI, PRECISION INSIGHT AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
23 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25 USE OR OTHER DEALINGS IN THE SOFTWARE.
27 **************************************************************************/
31 * Kevin E. Martin <martin@valinux.com>
32 * Gareth Hughes <gareth@valinux.com>
36 #ifndef __R128_CONTEXT_H__
37 #define __R128_CONTEXT_H__
39 #ifdef GLX_DIRECT_RENDERING
44 #include "r128_common.h"
53 typedef struct r128_context r128ContextRec
;
54 typedef struct r128_context
*r128ContextPtr
;
56 #include "r128_lock.h"
57 #include "r128_texobj.h"
58 #include "r128_screen.h"
60 /* Flags for what context state needs to be updated:
62 #define R128_NEW_ALPHA 0x0001
63 #define R128_NEW_DEPTH 0x0002
64 #define R128_NEW_FOG 0x0004
65 #define R128_NEW_CLIP 0x0008
66 #define R128_NEW_CULL 0x0010
67 #define R128_NEW_MASKS 0x0020
68 #define R128_NEW_RENDER_NOT 0x0040
69 #define R128_NEW_WINDOW 0x0080
70 #define R128_NEW_CONTEXT 0x0100
71 #define R128_NEW_ALL 0x01ff
73 /* Flags for software fallback cases:
75 #define R128_FALLBACK_TEXTURE 0x0001
76 #define R128_FALLBACK_DRAW_BUFFER 0x0002
77 #define R128_FALLBACK_READ_BUFFER 0x0004
78 #define R128_FALLBACK_STENCIL 0x0008
79 #define R128_FALLBACK_RENDER_MODE 0x0010
80 #define R128_FALLBACK_MULTIDRAW 0x0020
81 #define R128_FALLBACK_LOGICOP 0x0040
82 #define R128_FALLBACK_SEP_SPECULAR 0x0080
83 #define R128_FALLBACK_BLEND_EQ 0x0100
84 #define R128_FALLBACK_BLEND_FUNC 0x0200
87 /* Use the templated vertex format:
89 #define TAG(x) r128##x
90 #include "tnl_dd/t_dd_vertex.h"
93 /* Reasons why the GL_BLEND fallback mightn't work:
95 #define R128_BLEND_ENV_COLOR 0x1
96 #define R128_BLEND_MULTITEX 0x2
98 /* Subpixel offsets for window coordinates (triangles):
100 #define SUBPIXEL_X (0.0F)
101 #define SUBPIXEL_Y (0.125F)
104 typedef void (*r128_tri_func
)( r128ContextPtr
,
109 typedef void (*r128_line_func
)( r128ContextPtr
,
113 typedef void (*r128_point_func
)( r128ContextPtr
,
117 struct r128_context
{
118 GLcontext
*glCtx
; /* Mesa context */
120 /* Driver and hardware state management
123 GLuint dirty
; /* Hardware state to be updated */
124 r128_context_regs_t setup
;
129 GLuint SetupNewInputs
;
131 GLfloat hw_viewport
[16];
134 GLuint vertex_stride_shift
;
135 GLuint vertex_format
;
139 CARD32 ClearColor
; /* Color used to clear color buffer */
140 CARD32 ClearDepth
; /* Value used to clear depth buffer */
141 CARD32 ClearStencil
; /* Value used to clear stencil */
143 /* Map GL texture units onto hardware
147 GLuint tex_combine
[2];
151 /* Texture object bookkeeping
154 driTexHeap
* texture_heaps
[ R128_NR_TEX_HEAPS
];
155 driTextureObject swapped
;
157 r128TexObjPtr CurrentTexObj
[2];
161 /* Fallback rasterization functions
163 r128_point_func draw_point
;
164 r128_line_func draw_line
;
165 r128_tri_func draw_tri
;
172 GLenum render_primitive
;
178 /* Drawable, cliprect and scissor information
180 GLint drawOffset
, drawPitch
;
181 GLint readOffset
, readPitch
;
183 GLuint numClipRects
; /* Cliprects for the draw buffer */
184 XF86DRIClipRectPtr pClipRects
;
187 XF86DRIClipRectRec ScissorRect
; /* Current software scissor */
189 /* Mirrors of some DRI state
191 __DRIcontextPrivate
*driContext
; /* DRI context */
192 __DRIscreenPrivate
*driScreen
; /* DRI screen */
193 __DRIdrawablePrivate
*driDrawable
; /* DRI drawable bound to this ctx */
195 unsigned int lastStamp
; /* mirror driDrawable->lastStamp */
197 drmContext hHWContext
;
201 r128ScreenPtr r128Screen
; /* Screen private DRI data */
202 R128SAREAPrivPtr sarea
; /* Private SAREA data */
204 /* Performance counters
206 GLuint boxes
; /* Draw performance boxes */
207 GLuint hardwareWentIdle
;
210 GLuint c_textureSwaps
;
211 GLuint c_textureBytes
;
212 GLuint c_vertexBuffers
;
219 /* Configuration cache
221 driOptionCache optionCache
;
224 #define R128_CONTEXT(ctx) ((r128ContextPtr)(ctx->DriverCtx))
226 #define R128_IS_PLAIN( rmesa ) \
227 (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128)
228 #define R128_IS_PRO( rmesa ) \
229 (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_PRO)
230 #define R128_IS_MOBILITY( rmesa ) \
231 (rmesa->r128Screen->chipset == R128_CARD_TYPE_R128_MOBILITY)
234 extern GLboolean
r128CreateContext( const __GLcontextModes
*glVisual
,
235 __DRIcontextPrivate
*driContextPriv
,
236 void *sharedContextPrivate
);
238 extern void r128DestroyContext( __DRIcontextPrivate
* );
240 extern GLboolean
r128MakeCurrent( __DRIcontextPrivate
*driContextPriv
,
241 __DRIdrawablePrivate
*driDrawPriv
,
242 __DRIdrawablePrivate
*driReadPriv
);
244 extern GLboolean
r128UnbindContext( __DRIcontextPrivate
*driContextPriv
);
246 /* ================================================================
250 #define ENABLE_PERF_BOXES 0
253 extern int R128_DEBUG
;
258 #define DEBUG_ALWAYS_SYNC 0x01
259 #define DEBUG_VERBOSE_API 0x02
260 #define DEBUG_VERBOSE_MSG 0x04
261 #define DEBUG_VERBOSE_LRU 0x08
262 #define DEBUG_VERBOSE_DRI 0x10
263 #define DEBUG_VERBOSE_IOCTL 0x20
264 #define DEBUG_VERBOSE_2D 0x40
267 #endif /* __R128_CONTEXT_H__ */