Packed RGBA support.
[mesa.git] / src / mesa / drivers / glide / fxglidew.c
1 /* $Id: fxglidew.c,v 1.3 1999/10/05 19:26:54 miklos Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.1
6 *
7 * Copyright (C) 1999 Brian Paul All Rights Reserved.
8 *
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:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
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.
25 */
26
27 #ifdef HAVE_CONFIG_H
28 #include "conf.h"
29 #endif
30
31 #if defined(FX)
32 #include "glide.h"
33 #include "fxglidew.h"
34 #include "fxdrv.h"
35
36 #include <stdlib.h>
37 #include <string.h>
38
39
40 FxI32 FX_grGetInteger(FxU32 pname)
41 {
42 #if !defined(FX_GLIDE3)
43 switch (pname)
44 {
45 case FX_FOG_TABLE_ENTRIES:
46 return GR_FOG_TABLE_SIZE;
47 case FX_GLIDE_STATE_SIZE:
48 return sizeof(GrState);
49 case FX_LFB_PIXEL_PIPE:
50 return FXFALSE;
51 case FX_PENDING_BUFFERSWAPS:
52 return grBufferNumPending();
53 default:
54 if (MESA_VERBOSE&VERBOSE_DRIVER) {
55 fprintf(stderr,"Wrong parameter in FX_grGetInteger!\n");
56 }
57 return -1;
58 }
59 #else
60 FxU32 grname;
61 FxI32 result;
62
63 switch (pname)
64 {
65 case FX_FOG_TABLE_ENTRIES:
66 case FX_GLIDE_STATE_SIZE:
67 case FX_LFB_PIXEL_PIPE:
68 case FX_PENDING_BUFFERSWAPS:
69 grname = pname;
70 break;
71 default:
72 if (MESA_VERBOSE&VERBOSE_DRIVER) {
73 fprintf(stderr,"Wrong parameter in FX_grGetInteger!\n");
74 }
75 return -1;
76 }
77
78 grGet(grname,4,&result);
79 return result;
80 #endif
81 }
82
83
84
85 #if defined(FX_GLIDE3)
86
87 void FX_grGammaCorrectionValue(float val)
88 {
89 (void)val;
90 /* ToDo */
91 }
92
93 void FX_grSstControl(int par)
94 {
95 (void)par;
96 /* ToDo */
97 }
98 int FX_getFogTableSize(void)
99 {
100 int result;
101 grGet(GR_FOG_TABLE_ENTRIES,sizeof(int),(void*)&result);
102 return result;
103 }
104
105 int FX_getGrStateSize(void)
106 {
107 int result;
108 grGet(GR_GLIDE_STATE_SIZE,sizeof(int),(void*)&result);
109
110 return result;
111
112 }
113 int FX_grBufferNumPending()
114 {
115 int result;
116 grGet(GR_PENDING_BUFFERSWAPS,sizeof(int),(void*)&result);
117
118 return result;
119 }
120
121 int FX_grSstScreenWidth()
122 {
123 FxI32 result[4];
124
125 grGet(GR_VIEWPORT,sizeof(FxI32)*4,result);
126
127 return result[2];
128 }
129
130 int FX_grSstScreenHeight()
131 {
132 FxI32 result[4];
133
134 grGet(GR_VIEWPORT,sizeof(FxI32)*4,result);
135
136 return result[3];
137 }
138
139 void FX_grGlideGetVersion(char *buf)
140 {
141 strcpy(buf,grGetString(GR_VERSION));
142 }
143
144 void FX_grSstPerfStats(GrSstPerfStats_t *st)
145 {
146 /* ToDo */
147 st->pixelsIn = 0;
148 st->chromaFail = 0;
149 st->zFuncFail = 0;
150 st->aFuncFail = 0;
151 st->pixelsOut = 0;
152 }
153
154 void FX_grAADrawLine(GrVertex *a,GrVertex *b)
155 {
156 /* ToDo */
157 grDrawLine(a,b);
158 }
159 void FX_grAADrawPoint(GrVertex *a)
160 {
161 grDrawPoint(a);
162 }
163
164 #if FX_USE_PARGB
165 void FX_setupGrVertexLayout(void)
166 {
167 grReset(GR_VERTEX_PARAMETER);
168
169 grCoordinateSpace(GR_WINDOW_COORDS);
170 grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
171 grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
172 grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
173 grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
174 grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
175 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
176 grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
177 grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
178 }
179 #else /* FX_USE_PARGB */
180 void FX_setupGrVertexLayout(void)
181 {
182 grReset(GR_VERTEX_PARAMETER);
183
184 grCoordinateSpace(GR_WINDOW_COORDS);
185 grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
186 grVertexLayout(GR_PARAM_RGB, GR_VERTEX_R_OFFSET << 2, GR_PARAM_ENABLE);
187 /* grVertexLayout(GR_PARAM_Z, GR_VERTEX_Z_OFFSET << 2, GR_PARAM_ENABLE); */
188 grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
189 grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
190 grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
191 grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
192 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
193 grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
194 grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
195 }
196 #endif
197
198 void FX_grHints(GrHint_t hintType, FxU32 hintMask)
199 {
200 switch(hintType) {
201 case GR_HINT_STWHINT:
202 {
203 if (hintMask & GR_STWHINT_W_DIFF_TMU0)
204 grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
205 else
206 grVertexLayout(GR_PARAM_Q0,GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
207
208 if (hintMask & GR_STWHINT_ST_DIFF_TMU1)
209 grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
210 else
211 grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
212
213 if (hintMask & GR_STWHINT_W_DIFF_TMU1)
214 grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
215 else
216 grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
217
218 }
219 }
220 }
221 int FX_grSstQueryHardware(GrHwConfiguration *config)
222 {
223 int i,j;
224 int numFB;
225 grGet(GR_NUM_BOARDS,4,(void*)&(config->num_sst));
226 if (config->num_sst == 0)
227 return 0;
228 for (i = 0; i< config->num_sst; i++)
229 {
230 config->SSTs[i].type = GR_SSTTYPE_VOODOO;
231 grSstSelect(i);
232 grGet(GR_MEMORY_FB,4,(void*)&(config->SSTs[i].sstBoard.VoodooConfig.fbRam));
233 config->SSTs[i].sstBoard.VoodooConfig.fbRam/= 1024*1024;
234
235 grGet(GR_NUM_TMU,4,(void*)&(config->SSTs[i].sstBoard.VoodooConfig.nTexelfx));
236
237
238 grGet(GR_NUM_FB,4,(void*)&numFB);
239 if (numFB > 1)
240 config->SSTs[i].sstBoard.VoodooConfig.sliDetect = FXTRUE;
241 else
242 config->SSTs[i].sstBoard.VoodooConfig.sliDetect = FXFALSE;
243 for (j = 0; j < config->SSTs[i].sstBoard.VoodooConfig.nTexelfx; j++)
244 {
245 grGet(GR_MEMORY_TMU,4,(void*)&(config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRam));
246 config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRam /= 1024*1024;
247 }
248 }
249 return 1;
250 }
251
252
253 #endif
254 #else
255
256 /*
257 * Need this to provide at least one external definition.
258 */
259
260 int gl_fx_dummy_function_glidew(void)
261 {
262 return 0;
263 }
264
265 #endif /* FX */