1 /* $Id: fxglidew.c,v 1.19 2001/09/23 16:50:01 brianp 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.
34 /* fxsetup.c - 3Dfx VooDoo rendering mode setup functions */
50 FX_grGetInteger_NoLock(FxU32 pname
)
52 #if !defined(FX_GLIDE3)
54 case FX_FOG_TABLE_ENTRIES
:
55 return GR_FOG_TABLE_SIZE
;
56 case FX_GLIDE_STATE_SIZE
:
57 return sizeof(GrState
);
58 case FX_LFB_PIXEL_PIPE
:
60 case FX_PENDING_BUFFERSWAPS
:
61 return grBufferNumPending();
62 case FX_TEXTURE_ALIGN
:
63 /* This is a guess from reading the glide3 docs */
66 if (MESA_VERBOSE
& VERBOSE_DRIVER
) {
67 fprintf(stderr
, "Wrong parameter in FX_grGetInteger!\n");
76 case FX_FOG_TABLE_ENTRIES
:
77 case FX_GLIDE_STATE_SIZE
:
78 case FX_LFB_PIXEL_PIPE
:
79 case FX_PENDING_BUFFERSWAPS
:
80 case FX_TEXTURE_ALIGN
:
84 if (MESA_VERBOSE
& VERBOSE_DRIVER
) {
85 fprintf(stderr
, "Wrong parameter in FX_grGetInteger!\n");
90 grGet(grname
, 4, &result
);
96 FX_grGetInteger(FxU32 pname
)
101 result
= FX_grGetInteger_NoLock(pname
);
108 FX_grLfbLock(GrLock_t type
, GrBuffer_t buffer
,
109 GrLfbWriteMode_t writeMode
, GrOriginLocation_t origin
,
110 FxBool pixelPipeline
, GrLfbInfo_t
* info
)
115 result
= grLfbLock(type
, buffer
, writeMode
, origin
, pixelPipeline
, info
);
121 FX_grTexTextureMemRequired(FxU32 evenOdd
, GrTexInfo
* info
)
126 result
= grTexTextureMemRequired(evenOdd
, info
);
132 FX_grTexMinAddress(GrChipID_t tmu
)
137 result
= grTexMinAddress(tmu
);
143 FX_grTexMaxAddress(GrChipID_t tmu
)
148 result
= grTexMaxAddress(tmu
);
154 FX_grSstControl(FxU32 code
)
156 #if defined(FX_GLIDE3)
157 /* The glide 3 sources call for grEnable/grDisable to be called in exchange
158 * for grSstControl. */
160 case GR_CONTROL_ACTIVATE
:
161 grEnable(GR_PASSTHRU
);
163 case GR_CONTROL_DEACTIVATE
:
164 grDisable(GR_PASSTHRU
);
167 /* Appearently GR_CONTROL_RESIZE can be ignored. */
172 result
= grSstControl(code
);
179 #if defined(FX_GLIDE3)
182 FX_grGammaCorrectionValue(float val
)
189 FX_getFogTableSize(void)
193 grGet(GR_FOG_TABLE_ENTRIES
, sizeof(int), (void *) &result
);
199 FX_getGrStateSize(void)
203 grGet(GR_GLIDE_STATE_SIZE
, sizeof(int), (void *) &result
);
211 FX_grSstScreenWidth()
216 grGet(GR_VIEWPORT
, sizeof(FxI32
) * 4, result
);
223 FX_grSstScreenHeight()
228 grGet(GR_VIEWPORT
, sizeof(FxI32
) * 4, result
);
235 FX_grGlideGetVersion(char *buf
)
238 strcpy(buf
, grGetString(GR_VERSION
));
243 FX_grSstPerfStats(GrSstPerfStats_t
* st
)
246 grGet(GR_STATS_PIXELS_IN
, 4, &n
);
248 grGet(GR_STATS_PIXELS_CHROMA_FAIL
, 4, &n
);
250 grGet(GR_STATS_PIXELS_DEPTHFUNC_FAIL
, 4, &n
);
252 grGet(GR_STATS_PIXELS_AFUNC_FAIL
, 4, &n
);
254 grGet(GR_STATS_PIXELS_OUT
, 4, &n
);
259 FX_grAADrawLine(GrVertex
* a
, GrVertex
* b
)
268 FX_grAADrawPoint(GrVertex
* a
)
276 FX_grDrawPolygonVertexList(int n
, GrVertex
* verts
)
279 grDrawVertexArrayContiguous(GR_POLYGON
, n
, verts
, sizeof(GrVertex
));
284 FX_setupGrVertexLayout(void)
287 grReset(GR_VERTEX_PARAMETER
);
289 grCoordinateSpace(GR_WINDOW_COORDS
);
290 grVertexLayout(GR_PARAM_XY
, GR_VERTEX_X_OFFSET
<< 2, GR_PARAM_ENABLE
);
291 grVertexLayout(GR_PARAM_RGB
, GR_VERTEX_R_OFFSET
<< 2, GR_PARAM_ENABLE
);
292 grVertexLayout(GR_PARAM_A
, GR_VERTEX_A_OFFSET
<< 2, GR_PARAM_ENABLE
);
293 grVertexLayout(GR_PARAM_Q
, GR_VERTEX_OOW_OFFSET
<< 2, GR_PARAM_ENABLE
);
294 grVertexLayout(GR_PARAM_Z
, GR_VERTEX_OOZ_OFFSET
<< 2, GR_PARAM_ENABLE
);
295 grVertexLayout(GR_PARAM_ST0
, GR_VERTEX_SOW_TMU0_OFFSET
<< 2,
297 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
299 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
301 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
307 FX_grHints_NoLock(GrHint_t hintType
, FxU32 hintMask
)
310 case GR_HINT_STWHINT
:
312 if (hintMask
& GR_STWHINT_W_DIFF_TMU0
)
313 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
316 grVertexLayout(GR_PARAM_Q0
, GR_VERTEX_OOW_TMU0_OFFSET
<< 2,
319 if (hintMask
& GR_STWHINT_ST_DIFF_TMU1
)
320 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
323 grVertexLayout(GR_PARAM_ST1
, GR_VERTEX_SOW_TMU1_OFFSET
<< 2,
326 if (hintMask
& GR_STWHINT_W_DIFF_TMU1
)
327 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
330 grVertexLayout(GR_PARAM_Q1
, GR_VERTEX_OOW_TMU1_OFFSET
<< 2,
338 FX_grHints(GrHint_t hintType
, FxU32 hintMask
)
341 FX_grHints_NoLock(hintType
, hintMask
);
346 * Glide3 doesn't have the grSstQueryHardware function anymore.
347 * Instead, we call grGet() and fill in the data structures ourselves.
350 FX_grSstQueryHardware(GrHwConfiguration
* config
)
357 grGet(GR_NUM_BOARDS
, 4, (void *) &(config
->num_sst
));
358 if (config
->num_sst
== 0)
361 for (i
= 0; i
< config
->num_sst
; i
++) {
364 config
->SSTs
[i
].type
= GR_SSTTYPE_VOODOO
;
367 grGet(GR_MEMORY_FB
, 4, &result
);
368 config
->SSTs
[i
].sstBoard
.VoodooConfig
.fbRam
= result
/ (1024 * 1024);
370 grGet(GR_NUM_TMU
, 4, &result
);
371 config
->SSTs
[i
].sstBoard
.VoodooConfig
.nTexelfx
= result
;
373 grGet(GR_REVISION_FB
, 4, &result
);
374 config
->SSTs
[i
].sstBoard
.VoodooConfig
.fbiRev
= result
;
376 grGet(GR_NUM_FB
, 4, (void *) &numFB
);
378 config
->SSTs
[i
].sstBoard
.VoodooConfig
.sliDetect
= FXTRUE
;
380 config
->SSTs
[i
].sstBoard
.VoodooConfig
.sliDetect
= FXFALSE
;
382 for (j
= 0; j
< config
->SSTs
[i
].sstBoard
.VoodooConfig
.nTexelfx
; j
++) {
383 grGet(GR_MEMORY_TMU
, 4, &result
);
384 config
->SSTs
[i
].sstBoard
.VoodooConfig
.tmuConfig
[j
].tmuRam
=
385 result
/ (1024 * 1024);
386 grGet(GR_REVISION_TMU
, 4, &result
);
387 config
->SSTs
[i
].sstBoard
.VoodooConfig
.tmuConfig
[j
].tmuRev
= result
;
397 FX_grSstScreenWidth()
401 i
= grSstScreenWidth();
407 FX_grSstScreenHeight()
411 i
= grSstScreenHeight();
417 FX_grSstQueryHardware(GrHwConfiguration
* c
)
421 i
= grSstQueryHardware(c
);
427 #endif /* FX_GLIDE3 */
429 /* It appears to me that this function is needed either way. */
431 FX_grSstWinOpen(FxU32 hWnd
,
432 GrScreenResolution_t screen_resolution
,
433 GrScreenRefresh_t refresh_rate
,
434 GrColorFormat_t color_format
,
435 GrOriginLocation_t origin_location
,
436 int nColBuffers
, int nAuxBuffers
)
440 i
= grSstWinOpen(hWnd
,
443 color_format
, origin_location
, nColBuffers
, nAuxBuffers
);
447 "grSstWinOpen( win %d res %d ref %d fmt %d\n"
448 " org %d ncol %d naux %d )\n"
468 * Need this to provide at least one external definition.
471 extern int gl_fx_dummy_function_glidew(void);
473 gl_fx_dummy_function_glidew(void)