1 /* $Id: fxglidew.c,v 1.23 2003/10/13 11:14:58 dborca Exp $ */
4 * Mesa 3-D graphics library
7 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36 /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
51 FX_grGetInteger_NoLock(FxU32 pname
)
55 if (grGet(pname
, 4, &result
)) {
59 if (TDFX_DEBUG
& VERBOSE_DRIVER
) {
60 fprintf(stderr
, "%s: wrong parameter (%lx)\n", __FUNCTION__
, pname
);
66 FX_grSstControl(FxU32 code
)
68 /* The glide 3 sources call for grEnable/grDisable to be called in exchange
69 * for grSstControl. */
71 case GR_CONTROL_ACTIVATE
:
72 grEnable(GR_PASSTHRU
);
74 case GR_CONTROL_DEACTIVATE
:
75 grDisable(GR_PASSTHRU
);
78 /* Appearently GR_CONTROL_RESIZE can be ignored. */
89 grGet(GR_VIEWPORT
, sizeof(FxI32
) * 4, result
);
96 FX_grSstScreenHeight()
101 grGet(GR_VIEWPORT
, sizeof(FxI32
) * 4, result
);
108 FX_grSstPerfStats(GrSstPerfStats_t
* st
)
111 grGet(GR_STATS_PIXELS_IN
, 4, &n
);
113 grGet(GR_STATS_PIXELS_CHROMA_FAIL
, 4, &n
);
115 grGet(GR_STATS_PIXELS_DEPTHFUNC_FAIL
, 4, &n
);
117 grGet(GR_STATS_PIXELS_AFUNC_FAIL
, 4, &n
);
119 grGet(GR_STATS_PIXELS_OUT
, 4, &n
);
124 FX_setupGrVertexLayout(void)
127 grReset(GR_VERTEX_PARAMETER
);
129 grCoordinateSpace(GR_WINDOW_COORDS
);
130 grVertexLayout(GR_PARAM_XY
, GR_VERTEX_X_OFFSET
<< 2, GR_PARAM_ENABLE
);
131 grVertexLayout(GR_PARAM_PARGB
, GR_VERTEX_PARGB_OFFSET
<< 2, GR_PARAM_ENABLE
);
132 grVertexLayout(GR_PARAM_Q
, GR_VERTEX_OOW_OFFSET
<< 2, GR_PARAM_ENABLE
);
133 grVertexLayout(GR_PARAM_Z
, GR_VERTEX_OOZ_OFFSET
<< 2, GR_PARAM_ENABLE
);
134 grVertexLayout(GR_PARAM_ST0
, GR_VERTEX_SOW_TMU0_OFFSET
<< 2,
136 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
138 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
140 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
146 FX_grHints_NoLock(GrHint_t hintType
, FxU32 hintMask
)
149 case GR_HINT_STWHINT
:
151 if (hintMask
& GR_STWHINT_W_DIFF_TMU0
)
152 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
155 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
158 if (hintMask
& GR_STWHINT_ST_DIFF_TMU1
)
159 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
162 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
165 if (hintMask
& GR_STWHINT_W_DIFF_TMU1
)
166 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
169 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
177 * Glide3 doesn't have the grSstQueryHardware function anymore.
178 * Instead, we call grGet() and fill in the data structures ourselves.
181 FX_grSstQueryHardware(GrHwConfiguration
* config
)
188 grGet(GR_NUM_BOARDS
, 4, (void *) &(config
->num_sst
));
189 if (config
->num_sst
== 0)
192 for (i
= 0; i
< config
->num_sst
; i
++) {
194 const char *extension
;
198 extension
= grGetString(GR_HARDWARE
);
199 if (strstr(extension
, "Voodoo Banshee")) {
200 config
->SSTs
[i
].type
= GR_SSTTYPE_Banshee
;
201 } else if (strstr(extension
, "Voodoo3")) {
202 config
->SSTs
[i
].type
= GR_SSTTYPE_Voodoo3
;
203 } else if (strstr(extension
, "Voodoo4")) {
204 config
->SSTs
[i
].type
= GR_SSTTYPE_Voodoo4
;
205 } else if (strstr(extension
, "Voodoo5")) {
206 config
->SSTs
[i
].type
= GR_SSTTYPE_Voodoo5
;
207 } else { /* Voodoo1,2,rush */
208 /* ZZZ TO DO: Need to distinguish whether we have V1 or V2 or Rush. */
209 config
->SSTs
[i
].type
= GR_SSTTYPE_VOODOO
;
212 grGet(GR_MEMORY_FB
, 4, &result
); /* ZZZ: differs after grSstWinOpen */
213 config
->SSTs
[i
].fbRam
= result
/ (1024 * 1024);
215 grGet(GR_NUM_TMU
, 4, &result
);
216 config
->SSTs
[i
].nTexelfx
= result
;
218 grGet(GR_REVISION_FB
, 4, &result
);
219 config
->SSTs
[i
].fbiRev
= result
;
221 for (j
= 0; j
< config
->SSTs
[i
].nTexelfx
; j
++) {
222 grGet(GR_MEMORY_TMU
, 4, &result
); /* ZZZ: differs after grSstWinOpen */
223 config
->SSTs
[i
].tmuConfig
[j
].tmuRam
= result
/ (1024 * 1024);
224 grGet(GR_REVISION_TMU
, 4, &result
);
225 config
->SSTs
[i
].tmuConfig
[j
].tmuRev
= result
;
228 extension
= grGetString(GR_EXTENSION
);
229 config
->SSTs
[i
].HavePixExt
= (strstr(extension
, " PIXEXT ") != NULL
);
230 config
->SSTs
[i
].HaveTexFmt
= (strstr(extension
, " TEXFMT ") != NULL
);
231 config
->SSTs
[i
].HaveCmbExt
= (strstr(extension
, " COMBINE ") != NULL
);
232 config
->SSTs
[i
].HaveMirExt
= (strstr(extension
, " TEXMIRROR ") != NULL
);
233 config
->SSTs
[i
].HaveTexus2
= GL_FALSE
;
235 /* number of Voodoo chips */
236 grGet(GR_NUM_FB
, 4, (void *) &numFB
);
237 config
->SSTs
[i
].numChips
= numFB
;
241 tdfx_hook_glide(&config
->Glide
);
252 * Need this to provide at least one external definition.
255 extern int gl_fx_dummy_function_glidew(void);
257 gl_fx_dummy_function_glidew(void)