i965: const buffer debug code (disabled)
[mesa.git] / src / mesa / drivers / glide / fxglidew.c
1 /*
2 * Mesa 3-D graphics library
3 * Version: 4.0
4 *
5 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25 /* Authors:
26 * David Bucciarelli
27 * Brian Paul
28 * Daryll Strauss
29 * Keith Whitwell
30 * Daniel Borca
31 * Hiroshi Morii
32 */
33
34 /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
35
36
37 #ifdef HAVE_CONFIG_H
38 #include "conf.h"
39 #endif
40
41 #if defined(FX)
42 #include "fxglidew.h"
43 #include "fxdrv.h"
44
45 #include <stdlib.h>
46 #include <string.h>
47
48 FxI32
49 FX_grGetInteger_NoLock(FxU32 pname)
50 {
51 FxI32 result;
52
53 if (grGet(pname, 4, &result)) {
54 return result;
55 }
56
57 if (TDFX_DEBUG & VERBOSE_DRIVER) {
58 fprintf(stderr, "FX_grGetInteger_NoLock: wrong parameter (%lx)\n", pname);
59 }
60 return -1;
61 }
62
63 FxBool
64 FX_grSstControl(FxU32 code)
65 {
66 /* The glide 3 sources call for grEnable/grDisable to be called in exchange
67 * for grSstControl. */
68 switch (code) {
69 case GR_CONTROL_ACTIVATE:
70 grEnable(GR_PASSTHRU);
71 break;
72 case GR_CONTROL_DEACTIVATE:
73 grDisable(GR_PASSTHRU);
74 break;
75 }
76 /* Appearently GR_CONTROL_RESIZE can be ignored. */
77 return 1; /* OK? */
78 }
79
80
81 int
82 FX_grSstScreenWidth()
83 {
84 FxI32 result[4];
85
86 BEGIN_BOARD_LOCK();
87 grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);
88 END_BOARD_LOCK();
89
90 return result[2];
91 }
92
93 int
94 FX_grSstScreenHeight()
95 {
96 FxI32 result[4];
97
98 BEGIN_BOARD_LOCK();
99 grGet(GR_VIEWPORT, sizeof(FxI32) * 4, result);
100 END_BOARD_LOCK();
101
102 return result[3];
103 }
104
105 void
106 FX_grSstPerfStats(GrSstPerfStats_t * st)
107 {
108 FxI32 n;
109 grGet(GR_STATS_PIXELS_IN, 4, &n);
110 st->pixelsIn = n;
111 grGet(GR_STATS_PIXELS_CHROMA_FAIL, 4, &n);
112 st->chromaFail = n;
113 grGet(GR_STATS_PIXELS_DEPTHFUNC_FAIL, 4, &n);
114 st->zFuncFail = n;
115 grGet(GR_STATS_PIXELS_AFUNC_FAIL, 4, &n);
116 st->aFuncFail = n;
117 grGet(GR_STATS_PIXELS_OUT, 4, &n);
118 st->pixelsOut = n;
119 }
120
121 void
122 FX_setupGrVertexLayout(void)
123 {
124 BEGIN_BOARD_LOCK();
125 grReset(GR_VERTEX_PARAMETER);
126
127 grCoordinateSpace(GR_WINDOW_COORDS);
128 grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
129 #if FX_PACKEDCOLOR
130 grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
131 #else /* !FX_PACKEDCOLOR */
132 grVertexLayout(GR_PARAM_RGB, GR_VERTEX_RGB_OFFSET << 2, GR_PARAM_ENABLE);
133 grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
134 #endif /* !FX_PACKEDCOLOR */
135 grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
136 grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
137 grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2,
138 GR_PARAM_ENABLE);
139 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
140 GR_PARAM_DISABLE);
141 grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
142 GR_PARAM_DISABLE);
143 grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
144 GR_PARAM_DISABLE);
145 END_BOARD_LOCK();
146 }
147
148 void
149 FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask)
150 {
151 switch (hintType) {
152 case GR_HINT_STWHINT:
153 {
154 if (hintMask & GR_STWHINT_W_DIFF_TMU0)
155 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
156 GR_PARAM_ENABLE);
157 else
158 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2,
159 GR_PARAM_DISABLE);
160
161 if (hintMask & GR_STWHINT_ST_DIFF_TMU1)
162 grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
163 GR_PARAM_ENABLE);
164 else
165 grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2,
166 GR_PARAM_DISABLE);
167
168 if (hintMask & GR_STWHINT_W_DIFF_TMU1)
169 grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
170 GR_PARAM_ENABLE);
171 else
172 grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2,
173 GR_PARAM_DISABLE);
174
175 }
176 }
177 }
178
179 /*
180 * Glide3 doesn't have the grSstQueryHardware function anymore.
181 * Instead, we call grGet() and fill in the data structures ourselves.
182 */
183 int
184 FX_grSstQueryHardware(GrHwConfiguration * config)
185 {
186 int i, j;
187 int numFB;
188
189 BEGIN_BOARD_LOCK();
190
191 grGet(GR_NUM_BOARDS, 4, (void *) &(config->num_sst));
192 if (config->num_sst == 0)
193 return 0;
194
195 for (i = 0; i < config->num_sst; i++) {
196 FxI32 result;
197 const char *extension;
198
199 grSstSelect(i);
200
201 extension = grGetString(GR_HARDWARE);
202 if (strstr(extension, "Rush")) {
203 config->SSTs[i].type = GR_SSTTYPE_SST96;
204 } else if (strstr(extension, "Voodoo2")) {
205 config->SSTs[i].type = GR_SSTTYPE_Voodoo2;
206 } else if (strstr(extension, "Voodoo Banshee")) {
207 config->SSTs[i].type = GR_SSTTYPE_Banshee;
208 } else if (strstr(extension, "Voodoo3")) {
209 config->SSTs[i].type = GR_SSTTYPE_Voodoo3;
210 } else if (strstr(extension, "Voodoo4")) {
211 config->SSTs[i].type = GR_SSTTYPE_Voodoo4;
212 } else if (strstr(extension, "Voodoo5")) {
213 config->SSTs[i].type = GR_SSTTYPE_Voodoo5;
214 } else {
215 config->SSTs[i].type = GR_SSTTYPE_VOODOO;
216 }
217
218 grGet(GR_MEMORY_FB, 4, &result);
219 config->SSTs[i].fbRam = result / (1024 * 1024);
220
221 grGet(GR_NUM_TMU, 4, &result);
222 config->SSTs[i].nTexelfx = result;
223
224 grGet(GR_REVISION_FB, 4, &result);
225 config->SSTs[i].fbiRev = result;
226
227 for (j = 0; j < config->SSTs[i].nTexelfx; j++) {
228 grGet(GR_MEMORY_TMU, 4, &result);
229 config->SSTs[i].tmuConfig[j].tmuRam = result / (1024 * 1024);
230 grGet(GR_REVISION_TMU, 4, &result);
231 config->SSTs[i].tmuConfig[j].tmuRev = result;
232 }
233
234 extension = grGetString(GR_EXTENSION);
235 config->SSTs[i].HavePalExt = (strstr(extension, " PALETTE6666 ") != NULL);
236 config->SSTs[i].HavePixExt = (strstr(extension, " PIXEXT ") != NULL);
237 config->SSTs[i].HaveTexFmt = (strstr(extension, " TEXFMT ") != NULL);
238 config->SSTs[i].HaveCmbExt = (strstr(extension, " COMBINE ") != NULL);
239 config->SSTs[i].HaveMirExt = (strstr(extension, " TEXMIRROR ") != NULL);
240 config->SSTs[i].HaveTexUma = (strstr(extension, " TEXUMA ") != NULL);
241
242 /* number of Voodoo chips */
243 grGet(GR_NUM_FB, 4, (void *) &numFB);
244 config->SSTs[i].numChips = numFB;
245
246 }
247
248 tdfx_hook_glide(&config->Glide, getenv("MESA_FX_POINTCAST") != NULL);
249
250 END_BOARD_LOCK();
251 return 1;
252 }
253
254
255
256 #else
257
258 /*
259 * Need this to provide at least one external definition.
260 */
261
262 extern int gl_fx_dummy_function_glidew(void);
263 int
264 gl_fx_dummy_function_glidew(void)
265 {
266 return 0;
267 }
268
269 #endif /* FX */