updates from Erdi Chen
[mesa.git] / src / mesa / drivers / dri / unichrome / via_state.c
1 /*
2 * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
3 * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sub license,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
14 * of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
19 * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25 #include <stdio.h>
26
27 #include "glheader.h"
28 #include "context.h"
29 #include "macros.h"
30 #include "colormac.h"
31 #include "enums.h"
32 #include "dd.h"
33
34 #include "mm.h"
35 #include "via_context.h"
36 #include "via_state.h"
37 #include "via_tex.h"
38 #include "via_vb.h"
39 #include "via_tris.h"
40 #include "via_ioctl.h"
41
42 #include "swrast/swrast.h"
43 #include "array_cache/acache.h"
44 #include "tnl/tnl.h"
45 #include "swrast_setup/swrast_setup.h"
46
47 #include "tnl/t_pipeline.h"
48
49 static GLuint ROP[16] = {
50 HC_HROP_BLACK, /* GL_CLEAR 0 */
51 HC_HROP_DPa, /* GL_AND s & d */
52 HC_HROP_PDna, /* GL_AND_REVERSE s & ~d */
53 HC_HROP_P, /* GL_COPY s */
54 HC_HROP_DPna, /* GL_AND_INVERTED ~s & d */
55 HC_HROP_D, /* GL_NOOP d */
56 HC_HROP_DPx, /* GL_XOR s ^ d */
57 HC_HROP_DPo, /* GL_OR s | d */
58 HC_HROP_DPon, /* GL_NOR ~(s | d) */
59 HC_HROP_DPxn, /* GL_EQUIV ~(s ^ d) */
60 HC_HROP_Dn, /* GL_INVERT ~d */
61 HC_HROP_PDno, /* GL_OR_REVERSE s | ~d */
62 HC_HROP_Pn, /* GL_COPY_INVERTED ~s */
63 HC_HROP_DPno, /* GL_OR_INVERTED ~s | d */
64 HC_HROP_DPan, /* GL_NAND ~(s & d) */
65 HC_HROP_WHITE /* GL_SET 1 */
66 };
67
68 static __inline__ GLuint viaPackColor(GLuint format,
69 GLubyte r, GLubyte g,
70 GLubyte b, GLubyte a)
71 {
72 switch (format) {
73 case 0x10:
74 return PACK_COLOR_565(r, g, b);
75 case 0x20:
76 return PACK_COLOR_8888(a, r, g, b);
77 default:
78 #ifdef DEBUG
79 if (VIA_DEBUG) fprintf(stderr, "unknown format %d\n", (int)format);
80 #endif
81 return PACK_COLOR_8888(a, r, g, b);
82 }
83 }
84
85 static void viaAlphaFunc(GLcontext *ctx, GLenum func, GLfloat ref)
86 {
87 viaContextPtr vmesa = VIA_CONTEXT(ctx);
88 vmesa = vmesa;
89 }
90
91 static void viaBlendEquationSeparate(GLcontext *ctx, GLenum rgbMode, GLenum aMode)
92 {
93 #ifdef DEBUG
94 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
95 #endif
96
97 /* GL_EXT_blend_equation_separate not supported */
98 ASSERT(rgbMode == aMode);
99
100 /* Can only do GL_ADD equation in hardware */
101 FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_BLEND_EQ, rgbMode != GL_FUNC_ADD_EXT);
102
103 /* BlendEquation sets ColorLogicOpEnabled in an unexpected
104 * manner.
105 */
106 FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_LOGICOP,
107 (ctx->Color.ColorLogicOpEnabled &&
108 ctx->Color.LogicOp != GL_COPY));
109 #ifdef DEBUG
110 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
111 #endif
112 }
113
114 static void viaBlendFunc(GLcontext *ctx, GLenum sfactor, GLenum dfactor)
115 {
116 viaContextPtr vmesa = VIA_CONTEXT(ctx);
117 GLboolean fallback = GL_FALSE;
118 #ifdef DEBUG
119 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
120 #endif
121 switch (ctx->Color.BlendSrcRGB) {
122 case GL_ZERO: break;
123 case GL_SRC_ALPHA: break;
124 case GL_ONE: break;
125 case GL_DST_COLOR: break;
126 case GL_ONE_MINUS_DST_COLOR: break;
127 case GL_ONE_MINUS_SRC_ALPHA: break;
128 case GL_DST_ALPHA: break;
129 case GL_ONE_MINUS_DST_ALPHA: break;
130 case GL_SRC_ALPHA_SATURATE: /*a |= SDM_SRC_SRC_ALPHA; break;*/
131 case GL_CONSTANT_COLOR:
132 case GL_ONE_MINUS_CONSTANT_COLOR:
133 case GL_CONSTANT_ALPHA:
134 case GL_ONE_MINUS_CONSTANT_ALPHA:
135 fallback = GL_TRUE;
136 break;
137 default:
138 return;
139 }
140
141 switch (ctx->Color.BlendDstRGB) {
142 case GL_SRC_ALPHA: break;
143 case GL_ONE_MINUS_SRC_ALPHA: break;
144 case GL_ZERO: break;
145 case GL_ONE: break;
146 case GL_SRC_COLOR: break;
147 case GL_ONE_MINUS_SRC_COLOR: break;
148 case GL_DST_ALPHA: break;
149 case GL_ONE_MINUS_DST_ALPHA: break;
150 case GL_CONSTANT_COLOR:
151 case GL_ONE_MINUS_CONSTANT_COLOR:
152 case GL_CONSTANT_ALPHA:
153 case GL_ONE_MINUS_CONSTANT_ALPHA:
154 fallback = GL_TRUE;
155 break;
156 default:
157 return;
158 }
159
160 FALLBACK(vmesa, VIA_FALLBACK_BLEND_FUNC, fallback);
161 #ifdef DEBUG
162 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
163 #endif
164 }
165
166 /* Shouldn't be called as the extension is disabled.
167 */
168 static void viaBlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
169 GLenum dfactorRGB, GLenum sfactorA,
170 GLenum dfactorA)
171 {
172 if (dfactorRGB != dfactorA || sfactorRGB != sfactorA) {
173 _mesa_error(ctx, GL_INVALID_OPERATION, "glBlendEquation (disabled)");
174 }
175
176 viaBlendFunc(ctx, sfactorRGB, dfactorRGB);
177 }
178
179
180 static void viaDepthFunc(GLcontext *ctx, GLenum func)
181 {
182 viaContextPtr vmesa = VIA_CONTEXT(ctx);
183 vmesa = vmesa;
184 }
185
186 static void viaDepthMask(GLcontext *ctx, GLboolean flag)
187 {
188 viaContextPtr vmesa = VIA_CONTEXT(ctx);
189 vmesa = vmesa;
190 }
191
192 static void viaPolygonStipple(GLcontext *ctx, const GLubyte *mask)
193 {
194 viaContextPtr vmesa = VIA_CONTEXT(ctx);
195 vmesa = vmesa;
196 }
197
198
199 /* =============================================================
200 * Hardware clipping
201 */
202 static void viaScissor(GLcontext *ctx, GLint x, GLint y,
203 GLsizei w, GLsizei h)
204 {
205 viaContextPtr vmesa = VIA_CONTEXT(ctx);
206 #ifdef DEBUG
207 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
208 #endif
209 if (ctx->Scissor.Enabled) {
210 VIA_FIREVERTICES(vmesa); /* don't pipeline cliprect changes */
211 vmesa->uploadCliprects = GL_TRUE;
212 }
213
214 vmesa->scissorRect.x1 = x;
215 vmesa->scissorRect.y1 = vmesa->driDrawable->h - (y + h);
216 vmesa->scissorRect.x2 = x + w;
217 vmesa->scissorRect.y2 = vmesa->driDrawable->h - y;
218 #ifdef DEBUG
219 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
220 #endif
221 }
222
223
224 static void viaLogicOp(GLcontext *ctx, GLenum opcode)
225 {
226 #ifdef DEBUG
227 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
228 if (VIA_DEBUG) fprintf(stderr, "opcode = %x\n", opcode);
229 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
230 #endif
231 }
232
233 /* Fallback to swrast for select and feedback.
234 */
235 static void viaRenderMode(GLcontext *ctx, GLenum mode)
236 {
237 viaContextPtr vmesa = VIA_CONTEXT(ctx);
238 #ifdef DEBUG
239 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
240 #endif
241 FALLBACK(vmesa, VIA_FALLBACK_RENDERMODE, (mode != GL_RENDER));
242 #ifdef DEBUG
243 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
244 #endif
245 }
246
247
248 static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
249 {
250 viaContextPtr vmesa = VIA_CONTEXT(ctx);
251 #ifdef DEBUG
252 if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
253 #endif
254 if (mode == GL_FRONT) {
255 VIA_FIREVERTICES(vmesa);
256 VIA_STATECHANGE(vmesa, VIA_UPLOAD_BUFFERS);
257 vmesa->drawMap = (char *)vmesa->driScreen->pFB;
258 vmesa->readMap = (char *)vmesa->driScreen->pFB;
259 vmesa->drawPitch = vmesa->front.pitch;
260 vmesa->readPitch = vmesa->front.pitch;
261 viaXMesaSetFrontClipRects(vmesa);
262 FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);
263 return;
264 }
265 else if (mode == GL_BACK) {
266 VIA_FIREVERTICES(vmesa);
267 VIA_STATECHANGE(vmesa, VIA_UPLOAD_BUFFERS);
268 vmesa->drawMap = vmesa->back.map;
269 vmesa->readMap = vmesa->back.map;
270 vmesa->drawPitch = vmesa->back.pitch;
271 vmesa->readPitch = vmesa->back.pitch;
272 viaXMesaSetBackClipRects(vmesa);
273 FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_FALSE);
274 return;
275 }
276 else {
277 FALLBACK(vmesa, VIA_FALLBACK_DRAW_BUFFER, GL_TRUE);
278 return;
279 }
280 #ifdef DEBUG
281 if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
282 #endif
283 }
284
285 static void viaClearColor(GLcontext *ctx, const GLfloat color[4])
286 {
287 viaContextPtr vmesa = VIA_CONTEXT(ctx);
288 GLubyte pcolor[4];
289 pcolor[0] = (GLubyte) (255 * color[0]);
290 pcolor[1] = (GLubyte) (255 * color[1]);
291 pcolor[2] = (GLubyte) (255 * color[2]);
292 pcolor[3] = (GLubyte) (255 * color[3]);
293 vmesa->ClearColor = viaPackColor(vmesa->viaScreen->bitsPerPixel,
294 pcolor[0], pcolor[1],
295 pcolor[2], pcolor[3]);
296
297 }
298
299 /* =============================================================
300 * Culling - the via isn't quite as clean here as the rest of
301 * its interfaces, but it's not bad.
302 */
303 static void viaCullFaceFrontFace(GLcontext *ctx, GLenum unused)
304 {
305 viaContextPtr vmesa = VIA_CONTEXT(ctx);
306 vmesa = vmesa;
307 }
308
309 static void viaLineWidth(GLcontext *ctx, GLfloat widthf)
310 {
311 viaContextPtr vmesa = VIA_CONTEXT(ctx);
312 vmesa = vmesa;
313 }
314
315 static void viaPointSize(GLcontext *ctx, GLfloat sz)
316 {
317 viaContextPtr vmesa = VIA_CONTEXT(ctx);
318 vmesa = vmesa;
319 }
320
321 static void viaBitmap( GLcontext *ctx, GLint px, GLint py,
322 GLsizei width, GLsizei height,
323 const struct gl_pixelstore_attrib *unpack,
324 const GLubyte *bitmap )
325 {
326 viaContextPtr vmesa = VIA_CONTEXT(ctx);
327
328 /*=* [DBG] csmash : fix background overlap option menu *=*/
329 LOCK_HARDWARE(vmesa);
330 viaFlushPrimsLocked(vmesa);
331 UNLOCK_HARDWARE(vmesa);
332
333 WAIT_IDLE
334 /*=* [DBG] csmash : fix segmentation fault *=*/
335 /*=* John Sheng [2003.7.18] texenv *=*/
336 /*if (!vmesa->drawMap && !vmesa->readMap) {*/
337 if (1) {
338 if (vmesa->glCtx->Color._DrawDestMask == __GL_BACK_BUFFER_MASK) {
339 viaDrawBuffer(ctx, GL_BACK);
340 }
341 else {
342 viaDrawBuffer(ctx, GL_FRONT);
343 }
344 }
345 /*=* [DBG] csmash : white option words become brown *=*/
346 /*_swrast_Bitmap(ctx, px, py, width, height, unpack, bitmap );*/
347 {
348 GLboolean fog;
349 fog = ctx->Fog.Enabled;
350 ctx->Fog.Enabled = GL_FALSE;
351 _swrast_Bitmap(ctx, px, py, width, height, unpack, bitmap );
352 ctx->Fog.Enabled = fog;
353 }
354 }
355
356 /* =============================================================
357 * Color masks
358 */
359 static void viaColorMask(GLcontext *ctx,
360 GLboolean r, GLboolean g,
361 GLboolean b, GLboolean a)
362 {
363 viaContextPtr vmesa = VIA_CONTEXT(ctx);
364 vmesa = vmesa;
365 }
366
367 /* Seperate specular not fully implemented on the via.
368 */
369 static void viaLightModelfv(GLcontext *ctx, GLenum pname,
370 const GLfloat *param)
371 {
372 viaContextPtr vmesa = VIA_CONTEXT(ctx);
373 vmesa = vmesa;
374 }
375
376
377 /* In Mesa 3.5 we can reliably do native flatshading.
378 */
379 static void viaShadeModel(GLcontext *ctx, GLenum mode)
380 {
381 viaContextPtr vmesa = VIA_CONTEXT(ctx);
382 vmesa = vmesa;
383 }
384
385 /* =============================================================
386 * Fog
387 */
388 static void viaFogfv(GLcontext *ctx, GLenum pname, const GLfloat *param)
389 {
390 viaContextPtr vmesa = VIA_CONTEXT(ctx);
391 vmesa = vmesa;
392 }
393
394 /* =============================================================
395 */
396 static void viaEnable(GLcontext *ctx, GLenum cap, GLboolean state)
397 {
398 viaContextPtr vmesa = VIA_CONTEXT(ctx);
399 vmesa = vmesa;
400 }
401
402 /* =============================================================
403 */
404 void viaEmitDrawingRectangle(viaContextPtr vmesa)
405 {
406 __DRIdrawablePrivate *dPriv = vmesa->driDrawable;
407 viaScreenPrivate *viaScreen = vmesa->viaScreen;
408 int x0 = vmesa->drawX;
409 int y0 = vmesa->drawY;
410 int x1 = x0 + dPriv->w;
411 int y1 = y0 + dPriv->h;
412 /* GLuint dr2, dr3, dr4;
413 */
414
415 /* Coordinate origin of the window - may be offscreen.
416 */
417 /* dr4 = vmesa->BufferSetup[VIA_DESTREG_DR4] = ((y0 << 16) |
418 (((unsigned)x0) & 0xFFFF));
419 */
420
421 /* Clip to screen.
422 */
423 if (x0 < 0) x0 = 0;
424 if (y0 < 0) y0 = 0;
425 if (x1 > viaScreen->width - 1) x1 = viaScreen->width - 1;
426 if (y1 > viaScreen->height - 1) y1 = viaScreen->height - 1;
427
428 /* Onscreen drawing rectangle.
429 */
430 /* dr2 = vmesa->BufferSetup[VIA_DESTREG_DR2] = ((y0 << 16) | x0);
431 dr3 = vmesa->BufferSetup[VIA_DESTREG_DR3] = (((y1 + 1) << 16) | (x1 + 1));
432 */
433
434 vmesa->dirty |= VIA_UPLOAD_BUFFERS;
435 }
436
437
438 static void viaCalcViewport(GLcontext *ctx)
439 {
440 viaContextPtr vmesa = VIA_CONTEXT(ctx);
441 const GLfloat *v = ctx->Viewport._WindowMap.m;
442 GLfloat *m = vmesa->ViewportMatrix.m;
443
444 /* See also via_translate_vertex. SUBPIXEL adjustments can be done
445 * via state vars, too.
446 */
447 m[MAT_SX] = v[MAT_SX];
448 m[MAT_TX] = v[MAT_TX] + vmesa->drawXoff;
449 m[MAT_SY] = - v[MAT_SY];
450 m[MAT_TY] = - v[MAT_TY] + vmesa->driDrawable->h;
451 /*=* John Sheng [2003.7.2] for visual config & viewperf drv-08 *=*/
452 if (vmesa->depth.bpp == 16) {
453 m[MAT_SZ] = v[MAT_SZ] * (1.0 / 0xffff);
454 m[MAT_TZ] = v[MAT_TZ] * (1.0 / 0xffff);
455 }
456 else {
457 m[MAT_SZ] = v[MAT_SZ] * (1.0 / 0xffffffff);
458 m[MAT_TZ] = v[MAT_TZ] * (1.0 / 0xffffffff);
459 }
460 }
461
462 static void viaViewport(GLcontext *ctx,
463 GLint x, GLint y,
464 GLsizei width, GLsizei height)
465 {
466 viaCalcViewport(ctx);
467 }
468
469 static void viaDepthRange(GLcontext *ctx,
470 GLclampd nearval, GLclampd farval)
471 {
472 viaCalcViewport(ctx);
473 }
474
475 void viaPrintDirty(const char *msg, GLuint state)
476 {
477 #ifdef DEBUG
478 if (VIA_DEBUG)
479 fprintf(stderr, "%s (0x%x): %s%s%s%s\n",
480 msg,
481 (unsigned int) state,
482 (state & VIA_UPLOAD_TEX0) ? "upload-tex0, " : "",
483 (state & VIA_UPLOAD_TEX1) ? "upload-tex1, " : "",
484 (state & VIA_UPLOAD_CTX) ? "upload-ctx, " : "",
485 (state & VIA_UPLOAD_BUFFERS) ? "upload-bufs, " : ""
486 );
487 #endif
488 }
489
490
491 void viaInitState(GLcontext *ctx)
492 {
493 viaContextPtr vmesa = VIA_CONTEXT(ctx);
494
495 vmesa->regCmdA = HC_ACMD_HCmdA;
496 vmesa->regCmdB = HC_ACMD_HCmdB | HC_HVPMSK_X | HC_HVPMSK_Y | HC_HVPMSK_Z;
497 vmesa->regEnable = HC_HenCW_MASK;
498
499 if (vmesa->glCtx->Color._DrawDestMask == __GL_BACK_BUFFER_MASK) {
500 vmesa->drawMap = vmesa->back.map;
501 vmesa->readMap = vmesa->back.map;
502 }
503 else {
504 vmesa->drawMap = (char *)vmesa->driScreen->pFB;
505 vmesa->readMap = (char *)vmesa->driScreen->pFB;
506 }
507 }
508
509 void viaChooseTextureState(GLcontext *ctx)
510 {
511 viaContextPtr vmesa = VIA_CONTEXT(ctx);
512 struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0];
513 struct gl_texture_unit *texUnit1 = &ctx->Texture.Unit[1];
514 /*=* John Sheng [2003.7.18] texture combine *=*/
515 GLboolean AlphaCombine[3];
516 #ifdef DEBUG
517 if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
518 #endif
519 if (texUnit0->_ReallyEnabled || texUnit1->_ReallyEnabled) {
520 #ifdef DEBUG
521 if (VIA_DEBUG) {
522 fprintf(stderr, "Texture._ReallyEnabled - in\n");
523 fprintf(stderr, "texUnit0->_ReallyEnabled = %x\n",texUnit0->_ReallyEnabled);
524 }
525 #endif
526
527 if (texUnit0->_ReallyEnabled) {
528 struct gl_texture_object *texObj = texUnit0->_Current;
529 struct gl_texture_image *texImage = texObj->Image[0][0];
530 GLint r, g, b, a;
531 #ifdef DEBUG
532 if (VIA_DEBUG) fprintf(stderr, "texUnit0->_ReallyEnabled\n");
533 #endif
534 if (texImage->Border) {
535 FALLBACK(vmesa, VIA_FALLBACK_TEXTURE, GL_TRUE);
536 return;
537 }
538 vmesa->regCmdB |= HC_HVPMSK_S | HC_HVPMSK_T | HC_HVPMSK_W | HC_HVPMSK_Cs;
539 vmesa->regEnable |= HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK;
540
541 switch (texObj->MinFilter) {
542 case GL_NEAREST:
543 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
544 HC_HTXnFLTs_Nearest;
545 break;
546 case GL_LINEAR:
547 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
548 HC_HTXnFLTs_Linear;
549 break;
550 case GL_NEAREST_MIPMAP_NEAREST:
551 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
552 HC_HTXnFLTs_Nearest;
553 vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Nearest;
554 break;
555 case GL_LINEAR_MIPMAP_NEAREST:
556 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
557 HC_HTXnFLTs_Linear;
558 vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Nearest;
559 break;
560 case GL_NEAREST_MIPMAP_LINEAR:
561 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
562 HC_HTXnFLTs_Nearest;
563 vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Linear;
564 break;
565 case GL_LINEAR_MIPMAP_LINEAR:
566 vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
567 HC_HTXnFLTs_Linear;
568 vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Linear;
569 break;
570 default:
571 break;
572 }
573
574 if (texObj->MagFilter) {
575 vmesa->regHTXnTB_0 |= HC_HTXnFLSe_Linear |
576 HC_HTXnFLTe_Linear;
577 }
578 else {
579 vmesa->regHTXnTB_0 |= HC_HTXnFLSe_Nearest |
580 HC_HTXnFLTe_Nearest;
581 }
582
583 if (texObj->WrapS == GL_REPEAT)
584 vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Srepeat;
585 else
586 vmesa->regHTXnMPMD_0 = HC_HTXnMPMD_Sclamp;
587
588 if (GL_TRUE) {
589 if (texObj->WrapT == GL_REPEAT)
590 vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Trepeat;
591 else
592 vmesa->regHTXnMPMD_0 |= HC_HTXnMPMD_Tclamp;
593 }
594 #ifdef DEBUG
595 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode %x\n",texUnit0->EnvMode);
596 #endif
597 switch (texUnit0->EnvMode) {
598 case GL_MODULATE:
599 switch (texImage->Format) {
600 case GL_ALPHA:
601 /* C = Cf, A = At*Af
602 * RGB part.
603 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
604 */
605 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
606 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
607 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
608 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
609 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
610 HC_HTXnTBLCshift_No;
611 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
612 /* Alpha part.
613 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
614 */
615 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
616 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
617 HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
618 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
619 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
620 vmesa->regHTXnTBLRAa_0 = 0x0;
621 vmesa->regHTXnTBLRFog_0 = 0x0;
622 break;
623 case GL_LUMINANCE:
624 /* C = Lt*Cf, A = Af
625 * RGB part.
626 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
627 */
628 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
629 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
630 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
631 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
632 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
633 HC_HTXnTBLCshift_No;
634 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
635 /* Alpha part.
636 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
637 */
638 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
639 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
640 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
641 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
642 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
643 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
644 vmesa->regHTXnTBLRAa_0 = 0x0;
645 break;
646 case GL_LUMINANCE_ALPHA:
647 /* C = Lt*Cf, A = At*Af
648 * RGB part.
649 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
650 */
651 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
652 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
653 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
654 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
655 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
656 HC_HTXnTBLCshift_No;
657 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
658 /* Alpha part.
659 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
660 */
661 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
662 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
663 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
664 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
665 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
666 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
667 vmesa->regHTXnTBLRAa_0 = 0x0;
668 vmesa->regHTXnTBLRFog_0 = 0x0;
669 break;
670 case GL_INTENSITY:
671 /* C = It*Cf, A = It*Af
672 * RGB part.
673 * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
674 */
675 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
676 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
677 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
678 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
679 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
680 HC_HTXnTBLCshift_No;
681 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
682 /* Alpha part.
683 * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
684 */
685 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
686 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
687 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
688 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
689 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
690 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
691 vmesa->regHTXnTBLRAa_0 = 0x0;
692 vmesa->regHTXnTBLRFog_0 = 0x0;
693 break;
694 case GL_RGB:
695 /* C = Ct*Cf, A = Af
696 * RGB part.
697 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
698 */
699 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
700 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
701 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
702 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
703 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
704 HC_HTXnTBLCshift_No;
705 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
706 /* Alpha part.
707 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
708 */
709 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
710 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
711 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
712 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
713 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
714 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
715 vmesa->regHTXnTBLRAa_0 = 0x0;
716 #ifdef DEBUG
717 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGB\n");
718 #endif
719 break;
720 case GL_RGBA:
721 /* C = Ct*Cf, A = At*Af
722 * RGB part.
723 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
724 */
725 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
726 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
727 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
728 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
729 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
730 HC_HTXnTBLCshift_No;
731 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
732 /* Alpha part.
733 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
734 */
735 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
736 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
737 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
738 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
739 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
740 HC_HTXnTBLAbias_HTXnTBLRAbias
741 | HC_HTXnTBLAshift_No;
742
743 vmesa->regHTXnTBLRAa_0 = 0x0;
744 vmesa->regHTXnTBLRFog_0 = 0x0;
745 #ifdef DEBUG
746 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_MODULATE: GL_RGBA\n");
747 #endif
748 break;
749 case GL_COLOR_INDEX:
750 switch (texObj->Palette.Format) {
751 case GL_ALPHA:
752 /* C = Cf, A = At*Af
753 * RGB part.
754 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
755 */
756 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
757 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
758 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
759 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
760 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
761 HC_HTXnTBLCshift_No;
762 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
763 /* Alpha part.
764 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
765 */
766 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
767 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
768 HC_HTXnTBLAb_Adif | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
769 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
770 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
771 vmesa->regHTXnTBLRAa_0 = 0x0;
772 vmesa->regHTXnTBLRFog_0 = 0x0;
773 break;
774 case GL_LUMINANCE:
775 /* C = Lt*Cf, A = Af
776 * RGB part.
777 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
778 */
779 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
780 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
781 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
782 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
783 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
784 HC_HTXnTBLCshift_No;
785 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
786 /* Alpha part.
787 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
788 */
789 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
790 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
791 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
792 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
793 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
794 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
795 vmesa->regHTXnTBLRAa_0 = 0x0;
796 break;
797 case GL_LUMINANCE_ALPHA:
798 /* C = Lt*Cf, A = At*Af
799 * RGB part.
800 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
801 */
802 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
803 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
804 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
805 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
806 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
807 HC_HTXnTBLCshift_No;
808 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
809 /* Alpha part.
810 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
811 */
812 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
813 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
814 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
815 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
816 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
817 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
818 vmesa->regHTXnTBLRAa_0 = 0x0;
819 vmesa->regHTXnTBLRFog_0 = 0x0;
820 break;
821 case GL_INTENSITY:
822 /* C = It*Cf, A = It*Af
823 * RGB part.
824 * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
825 */
826 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
827 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
828 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
829 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
830 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
831 HC_HTXnTBLCshift_No;
832 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
833 /* Alpha part.
834 * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
835 */
836 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
837 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
838 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
839 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
840 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
841 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
842 vmesa->regHTXnTBLRAa_0 = 0x0;
843 vmesa->regHTXnTBLRFog_0 = 0x0;
844 break;
845 case GL_RGB:
846 /* C = Ct*Cf, A = Af
847 * RGB part.
848 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
849 */
850 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
851 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
852 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
853 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
854 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
855 HC_HTXnTBLCshift_No;
856 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
857 /* Alpha part.
858 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
859 */
860 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
861 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
862 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
863 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
864 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
865 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
866 vmesa->regHTXnTBLRAa_0 = 0x0;
867 break;
868 case GL_RGBA:
869 /* C = Ct*Cf, A = At*Af
870 * RGB part.
871 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
872 */
873 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
874 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
875 HC_HTXnTBLCb_Dif | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
876 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
877 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
878 HC_HTXnTBLCshift_No;
879 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
880 /* Alpha part.
881 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
882 */
883 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
884 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
885 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
886 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
887 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
888 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
889 vmesa->regHTXnTBLRAa_0 = 0x0;
890 vmesa->regHTXnTBLRFog_0 = 0x0;
891 break;
892 }
893 break;
894 }
895 break;
896 case GL_DECAL:
897 switch (texImage->Format) {
898 case GL_ALPHA:
899 case GL_LUMINANCE:
900 case GL_LUMINANCE_ALPHA:
901 case GL_INTENSITY:
902 /* Undefined.
903 */
904 break;
905 case GL_RGB:
906 /* C = Ct, A = Af
907 * RGB part.
908 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
909 */
910 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
911 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
912 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
913 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
914 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
915 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
916 HC_HTXnTBLCshift_No;
917 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
918 /* Alpha part.
919 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
920 */
921 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
922 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
923 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
924 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
925 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
926 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
927 vmesa->regHTXnTBLRAa_0 = 0x0;
928 #ifdef DEBUG
929 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGB\n");
930 #endif
931 break;
932 case GL_RGBA:
933 /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
934 * RGB part.
935 * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
936 */
937 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
938 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
939 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
940 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
941 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
942 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
943 HC_HTXnTBLCshift_No;
944 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
945 /* Alpha part.
946 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
947 */
948 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
949 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
950 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
951 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
952 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
953 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
954 vmesa->regHTXnTBLRAa_0 = 0x0;
955 #ifdef DEBUG
956 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_DECAL: GL_RGBA\n");
957 #endif
958 break;
959 case GL_COLOR_INDEX:
960 switch (texObj->Palette.Format) {
961 case GL_ALPHA:
962 case GL_LUMINANCE:
963 case GL_LUMINANCE_ALPHA:
964 case GL_INTENSITY:
965 /* Undefined.
966 */
967 break;
968 case GL_RGB:
969 /* C = Ct, A = Af
970 * RGB part.
971 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
972 */
973 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
974 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
975 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
976 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
977 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
978 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
979 HC_HTXnTBLCshift_No;
980 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
981 /* Alpha part.
982 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
983 */
984 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
985 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
986 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
987 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
988 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
989 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
990 vmesa->regHTXnTBLRAa_0 = 0x0;
991 #ifdef DEBUG
992 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGB\n");
993 #endif
994 break;
995 case GL_RGBA:
996 /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
997 * RGB part.
998 * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
999 */
1000 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1001 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
1002 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
1003 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1004 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1005 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1006 HC_HTXnTBLCshift_No;
1007 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1008 /* Alpha part.
1009 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1010 */
1011 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1012 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1013 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1014 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1015 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1016 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1017 vmesa->regHTXnTBLRAa_0 = 0x0;
1018 #ifdef DEBUG
1019 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_COLOR_INDEX: GL_RGBA\n");
1020 #endif
1021 break;
1022 }
1023 break;
1024 }
1025 break;
1026 case GL_BLEND:
1027 switch (texImage->Format) {
1028 case GL_ALPHA:
1029 /* C = Cf, A = Af
1030 * RGB part.
1031 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
1032 */
1033 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1034 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1035 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1036 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1037 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1038 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1039 HC_HTXnTBLCshift_No;
1040 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1041 /* Alpha part.
1042 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1043 */
1044 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1045 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1046 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1047 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1048 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1049 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1050 vmesa->regHTXnTBLRAa_0 = 0x0;
1051 break;
1052 case GL_LUMINANCE:
1053 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1054 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1055 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1056 /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
1057 * RGB part.
1058 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1059 */
1060 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1061 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1062 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1063 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1064 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1065 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1066 HC_HTXnTBLCshift_No;
1067 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1068 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1069 /* Alpha part.
1070 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1071 */
1072 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1073 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1074 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1075 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1076 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1077 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1078 vmesa->regHTXnTBLRAa_0 = 0x0;
1079 break;
1080 case GL_LUMINANCE_ALPHA:
1081 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1082 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1083 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1084 /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
1085 * RGB part.
1086 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1087 */
1088 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1089 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1090 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1091 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1092 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1093 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1094 HC_HTXnTBLCshift_No;
1095 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1096 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1097 /* Alpha part.
1098 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
1099 */
1100 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1101 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1102 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
1103 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1104 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1105 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
1106 vmesa->regHTXnTBLRAa_0 = 0x0;
1107 vmesa->regHTXnTBLRFog_0 = 0x0;
1108 break;
1109 case GL_INTENSITY:
1110 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1111 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1112 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1113 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1114 /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
1115 * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
1116 * RGB part.
1117 * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1118 */
1119 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1120 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1121 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1122 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1123 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1124 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1125 HC_HTXnTBLCshift_No;
1126 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1127 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1128 /* Alpha part.
1129 * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
1130 */
1131 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1132 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1133 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1134 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
1135 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub |
1136 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1137 vmesa->regHTXnTBLRAa_0 = (a << 8);
1138 break;
1139 case GL_RGB:
1140 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1141 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1142 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1143 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1144 /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
1145 * RGB part.
1146 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1147 */
1148 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1149 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1150 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1151 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1152 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1153 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1154 HC_HTXnTBLCshift_No;
1155 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1156 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1157 /* Alpha part.
1158 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1159 */
1160 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1161 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1162 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1163 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1164 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1165 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1166 vmesa->regHTXnTBLRAa_0 = 0x0;
1167 #ifdef DEBUG
1168 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGB\n");
1169 #endif
1170 break;
1171 case GL_RGBA:
1172 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1173 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1174 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1175 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1176 /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
1177 * RGB part.
1178 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1179 */
1180 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1181 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1182 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1183 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1184 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1185 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1186 HC_HTXnTBLCshift_No;
1187 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1188 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1189 /* Alpha part.
1190 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
1191 */
1192 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1193 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1194 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
1195 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1196 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1197 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
1198 vmesa->regHTXnTBLRAa_0 = 0x0;
1199 vmesa->regHTXnTBLRFog_0 = 0x0;
1200 #ifdef DEBUG
1201 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_BLEND: GL_RGBA\n");
1202 #endif
1203 break;
1204 case GL_COLOR_INDEX:
1205 switch (texObj->Palette.Format) {
1206 case GL_ALPHA:
1207 /* C = Cf, A = Af
1208 * RGB part.
1209 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
1210 */
1211 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1212 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1213 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1214 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1215 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1216 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1217 HC_HTXnTBLCshift_No;
1218 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1219 /* Alpha part.
1220 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1221 */
1222 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1223 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1224 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1225 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1226 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1227 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1228 vmesa->regHTXnTBLRAa_0 = 0x0;
1229 break;
1230 case GL_LUMINANCE:
1231 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1232 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1233 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1234 /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
1235 * RGB part.
1236 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1237 */
1238 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1239 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1240 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1241 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1242 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1243 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1244 HC_HTXnTBLCshift_No;
1245 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1246 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1247 /* Alpha part.
1248 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1249 */
1250 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1251 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1252 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1253 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1254 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1255 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1256 vmesa->regHTXnTBLRAa_0 = 0x0;
1257 break;
1258 case GL_LUMINANCE_ALPHA:
1259 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1260 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1261 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1262 /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
1263 * RGB part.
1264 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1265 */
1266 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1267 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1268 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1269 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1270 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1271 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1272 HC_HTXnTBLCshift_No;
1273 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1274 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1275 /* Alpha part.
1276 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
1277 */
1278 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1279 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1280 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
1281 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1282 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1283 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
1284 vmesa->regHTXnTBLRAa_0 = 0x0;
1285 vmesa->regHTXnTBLRFog_0 = 0x0;
1286 break;
1287 case GL_INTENSITY:
1288 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1289 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1290 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1291 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1292 /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
1293 * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
1294 * RGB part.
1295 * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1296 */
1297 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1298 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1299 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1300 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1301 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1302 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1303 HC_HTXnTBLCshift_No;
1304 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1305 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1306 /* Alpha part.
1307 * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
1308 */
1309 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1310 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1311 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1312 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
1313 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub |
1314 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1315 vmesa->regHTXnTBLRAa_0 = (a << 8);
1316 break;
1317 case GL_RGB:
1318 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1319 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1320 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1321 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1322 /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
1323 * RGB part.
1324 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1325 */
1326 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1327 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1328 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1329 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1330 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1331 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1332 HC_HTXnTBLCshift_No;
1333 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1334 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1335 /* Alpha part.
1336 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1337 */
1338 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1339 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1340 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1341 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1342 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1343 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1344 vmesa->regHTXnTBLRAa_0 = 0x0;
1345 break;
1346 case GL_RGBA:
1347 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1348 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1349 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1350 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1351 /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
1352 * RGB part.
1353 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
1354 */
1355 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1356 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
1357 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
1358 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
1359 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
1360 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1361 HC_HTXnTBLCshift_No;
1362 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1363 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1364 /* Alpha part.
1365 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
1366 */
1367 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1368 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
1369 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
1370 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1371 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1372 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
1373 vmesa->regHTXnTBLRAa_0 = 0x0;
1374 vmesa->regHTXnTBLRFog_0 = 0x0;
1375 break;
1376 }
1377 break;
1378 }
1379 break;
1380 case GL_REPLACE:
1381 switch (texImage->Format) {
1382 case GL_ALPHA:
1383 /* C = Cf, A = At
1384 * RGB part.
1385 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
1386 */
1387 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1388 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1389 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1390 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1391 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1392 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1393 HC_HTXnTBLCshift_No;
1394 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1395 /* Alpha part.
1396 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1397 */
1398 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1399 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1400 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1401 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1402 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1403 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1404 vmesa->regHTXnTBLRAa_0 = 0x0;
1405 break;
1406 case GL_LUMINANCE:
1407 /* C = Lt, A = Af
1408 * RGB part.
1409 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
1410 */
1411 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1412 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1413 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1414 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1415 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1416 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1417 HC_HTXnTBLCshift_No;
1418 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1419 /* Alpha part.
1420 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1421 */
1422 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1423 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1424 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1425 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1426 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1427 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1428 vmesa->regHTXnTBLRAa_0 = 0x0;
1429 break;
1430 case GL_LUMINANCE_ALPHA:
1431 /* C = Lt, A = At
1432 * RGB part.
1433 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
1434 */
1435 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1436 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1437 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1438 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1439 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1440 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1441 HC_HTXnTBLCshift_No;
1442 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1443 /* Alpha part.
1444 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1445 */
1446 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1447 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1448 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1449 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1450 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1451 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1452 vmesa->regHTXnTBLRAa_0 = 0x0;
1453 break;
1454 case GL_INTENSITY:
1455 /* C = It, A = It
1456 * RGB part.
1457 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
1458 */
1459 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1460 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1461 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1462 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1463 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1464 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1465 HC_HTXnTBLCshift_No;
1466 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1467 /* Alpha part.
1468 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
1469 */
1470 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1471 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1472 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1473 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1474 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1475 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1476 vmesa->regHTXnTBLRAa_0 = 0x0;
1477 break;
1478 case GL_RGB:
1479 /* C = Ct, A = Af
1480 * RGB part.
1481 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
1482 */
1483 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1484 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1485 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1486 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1487 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1488 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1489 HC_HTXnTBLCshift_No;
1490 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1491 /* Alpha part.
1492 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1493 */
1494 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1495 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1496 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1497 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1498 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1499 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1500 vmesa->regHTXnTBLRAa_0 = 0x0;
1501 #ifdef DEBUG
1502 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGB\n");
1503 #endif
1504 break;
1505 case GL_RGBA:
1506 /* C = Ct, A = At
1507 * RGB part.
1508 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
1509 */
1510 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1511 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1512 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1513 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1514 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1515 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1516 HC_HTXnTBLCshift_No;
1517 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1518 /* Alpha part.
1519 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1520 */
1521 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1522 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1523 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1524 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1525 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1526 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1527 vmesa->regHTXnTBLRAa_0 = 0x0;
1528 #ifdef DEBUG
1529 if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode: GL_REPLACE: GL_RGBA\n");
1530 #endif
1531 break;
1532 case GL_COLOR_INDEX:
1533 switch (texObj->Palette.Format) {
1534 case GL_ALPHA:
1535 /* C = Cf, A = At
1536 * RGB part.
1537 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
1538 */
1539 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1540 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1541 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1542 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1543 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1544 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
1545 HC_HTXnTBLCshift_No;
1546 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1547 /* Alpha part.
1548 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1549 */
1550 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1551 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1552 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1553 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1554 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1555 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1556 vmesa->regHTXnTBLRAa_0 = 0x0;
1557 break;
1558 case GL_LUMINANCE:
1559 /* C = Lt, A = Af
1560 * RGB part.
1561 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
1562 */
1563 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1564 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1565 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1566 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1567 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1568 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1569 HC_HTXnTBLCshift_No;
1570 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1571 /* Alpha part.
1572 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1573 */
1574 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1575 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1576 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1577 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1578 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1579 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1580 vmesa->regHTXnTBLRAa_0 = 0x0;
1581 break;
1582 case GL_LUMINANCE_ALPHA:
1583 /* C = Lt, A = At
1584 * RGB part.
1585 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
1586 */
1587 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1588 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1589 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1590 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1591 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1592 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1593 HC_HTXnTBLCshift_No;
1594 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1595 /* Alpha part.
1596 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1597 */
1598 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1599 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1600 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1601 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1602 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1603 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1604 vmesa->regHTXnTBLRAa_0 = 0x0;
1605 break;
1606 case GL_INTENSITY:
1607 /* C = It, A = It
1608 * RGB part.
1609 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
1610 */
1611 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1612 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1613 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1614 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1615 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1616 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1617 HC_HTXnTBLCshift_No;
1618 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1619 /* Alpha part.
1620 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
1621 */
1622 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1623 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1624 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1625 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1626 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1627 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1628 vmesa->regHTXnTBLRAa_0 = 0x0;
1629 break;
1630 case GL_RGB:
1631 /* C = Ct, A = Af
1632 * RGB part.
1633 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
1634 */
1635 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1636 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1637 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1638 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1639 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1640 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1641 HC_HTXnTBLCshift_No;
1642 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1643 /* Alpha part.
1644 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
1645 */
1646 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1647 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1648 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1649 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1650 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1651 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
1652 vmesa->regHTXnTBLRAa_0 = 0x0;
1653 break;
1654 case GL_RGBA:
1655 /* C = Ct, A = At
1656 * RGB part.
1657 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
1658 */
1659 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1660 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1661 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1662 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1663 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1664 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
1665 HC_HTXnTBLCshift_No;
1666 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1667 /* Alpha part.
1668 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
1669 */
1670 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
1671 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
1672 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
1673 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
1674 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
1675 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
1676 vmesa->regHTXnTBLRAa_0 = 0x0;
1677 break;
1678 }
1679 break;
1680 }
1681 break;
1682 /*=* John Sheng [2003.7.18] texture combine *=*/
1683 case GL_COMBINE:
1684 switch (texUnit0->Combine.ModeRGB) {
1685 case GL_REPLACE:
1686 switch (texUnit0->Combine.SourceRGB[0]) {
1687 case GL_TEXTURE:
1688 switch (texUnit0->Combine.OperandRGB[0]) {
1689 case GL_SRC_COLOR:
1690 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1691 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1692 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1693 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1694 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1695 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex;
1696 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1697 break;
1698 case GL_ONE_MINUS_SRC_COLOR:
1699 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1700 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1701 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1702 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1703 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1704 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex;
1705 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1706 break;
1707 case GL_SRC_ALPHA:
1708 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1709 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1710 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1711 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1712 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1713 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex;
1714 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1715 break;
1716 case GL_ONE_MINUS_SRC_ALPHA:
1717 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1718 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1719 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1720 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1721 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1722 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex;
1723 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1724 break;
1725 }
1726 break;
1727 case GL_CONSTANT :
1728 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1729 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1730 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1731 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1732 switch (texUnit0->Combine.OperandRGB[0]) {
1733 case GL_SRC_COLOR:
1734 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1735 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1736 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1737 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1738 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1739 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
1740
1741 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1742 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1743 break;
1744 case GL_ONE_MINUS_SRC_COLOR:
1745 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1746 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1747 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1748 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1749 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1750 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
1751 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1752 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1753 break;
1754 case GL_SRC_ALPHA:
1755 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1756 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1757 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1758 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1759 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1760 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
1761 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1762 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
1763 break;
1764 case GL_ONE_MINUS_SRC_ALPHA:
1765 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1766 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1767 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1768 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1769 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1770 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
1771 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1772 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
1773 break;
1774 }
1775 break;
1776 case GL_PRIMARY_COLOR :
1777 switch (texUnit0->Combine.OperandRGB[0]) {
1778 case GL_SRC_COLOR:
1779 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1780 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1781 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1782 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1783 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1784 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
1785 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1786 break;
1787 case GL_ONE_MINUS_SRC_COLOR:
1788 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1789 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1790 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1791 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1792 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1793 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
1794 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1795 break;
1796 case GL_SRC_ALPHA:
1797 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1798 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1799 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1800 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1801 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1802 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
1803 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1804 break;
1805 case GL_ONE_MINUS_SRC_ALPHA:
1806 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1807 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1808 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1809 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1810 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1811 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
1812 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1813 break;
1814 }
1815 break;
1816 case GL_PREVIOUS :
1817 switch (texUnit0->Combine.OperandRGB[0]) {
1818 case GL_SRC_COLOR:
1819 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1820 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1821 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1822 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1823 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1824 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
1825 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1826 break;
1827 case GL_ONE_MINUS_SRC_COLOR:
1828 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1829 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1830 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1831 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1832 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1833 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
1834 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1835 break;
1836 case GL_SRC_ALPHA:
1837 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1838 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1839 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1840 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1841 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1842 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
1843 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1844 break;
1845 case GL_ONE_MINUS_SRC_ALPHA:
1846 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
1847 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
1848 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
1849 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1850 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1851 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
1852 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1853 break;
1854 }
1855 break;
1856 }
1857 switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
1858 case 1:
1859 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
1860 break;
1861 case 2:
1862 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
1863 break;
1864 case 4:
1865 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
1866 break;
1867 }
1868 break;
1869
1870 case GL_MODULATE:
1871 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
1872 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
1873 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
1874 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
1875 switch (texUnit0->Combine.OperandRGB[0]) {
1876 case GL_SRC_COLOR:
1877 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
1878 AlphaCombine[0]=0;
1879 break;
1880 case GL_ONE_MINUS_SRC_COLOR:
1881 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
1882 AlphaCombine[0]=0;
1883 break;
1884 case GL_SRC_ALPHA:
1885 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
1886 AlphaCombine[0]=1;
1887 break;
1888 case GL_ONE_MINUS_SRC_ALPHA:
1889 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
1890 AlphaCombine[0]=1;
1891 break;
1892 }
1893 switch (texUnit0->Combine.OperandRGB[1]) {
1894 case GL_SRC_COLOR:
1895 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
1896 AlphaCombine[1]=0;
1897 break;
1898 case GL_ONE_MINUS_SRC_COLOR:
1899 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
1900 AlphaCombine[1]=0;
1901 break;
1902 case GL_SRC_ALPHA:
1903 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
1904 AlphaCombine[1]=1;
1905 break;
1906 case GL_ONE_MINUS_SRC_ALPHA:
1907 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
1908 AlphaCombine[1]=1;
1909 break;
1910 }
1911 switch (texUnit0->Combine.SourceRGB[0]) {
1912 case GL_TEXTURE:
1913 if (AlphaCombine[0]==0) {
1914 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
1915 }
1916 else {
1917 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
1918 }
1919 break;
1920 case GL_CONSTANT :
1921 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1922 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1923 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1924 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1925 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
1926 if (AlphaCombine[0]==0) {
1927 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
1928 }
1929 else {
1930 vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
1931 }
1932 break;
1933 case GL_PRIMARY_COLOR :
1934 if (AlphaCombine[0]==0) {
1935 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
1936 }
1937 else {
1938 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
1939 }
1940 break;
1941 case GL_PREVIOUS :
1942 if (AlphaCombine[0]==0) {
1943 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
1944 }
1945 else {
1946 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
1947 }
1948 break;
1949 }
1950 switch (texUnit0->Combine.SourceRGB[1]) {
1951 case GL_TEXTURE:
1952 if (AlphaCombine[1]==0) {
1953 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
1954 }
1955 else {
1956 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
1957 }
1958 break;
1959 case GL_CONSTANT :
1960 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
1961 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
1962 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
1963 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
1964 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
1965 if (AlphaCombine[1]==0) {
1966 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
1967 }
1968 else {
1969 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
1970 }
1971 break;
1972 case GL_PRIMARY_COLOR :
1973 if (AlphaCombine[1]==0) {
1974 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
1975 }
1976 else {
1977 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
1978 }
1979 break;
1980 case GL_PREVIOUS :
1981 if (AlphaCombine[1]==0) {
1982 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
1983 }
1984 else {
1985 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
1986 }
1987 break;
1988 }
1989 switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
1990 case 1:
1991 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
1992 break;
1993 case 2:
1994 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
1995 break;
1996 case 4:
1997 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
1998 break;
1999 }
2000 break;
2001 case GL_ADD:
2002 case GL_SUBTRACT :
2003 if (texUnit0->Combine.ModeRGB==GL_ADD) {
2004 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2005 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
2006 }
2007 else {
2008 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
2009 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
2010 }
2011 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2012 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC;
2013 vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
2014 switch (texUnit0->Combine.OperandRGB[0]) {
2015 case GL_SRC_COLOR:
2016 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
2017 AlphaCombine[0]=0;
2018 break;
2019 case GL_ONE_MINUS_SRC_COLOR:
2020 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
2021 AlphaCombine[0]=0;
2022 break;
2023 case GL_SRC_ALPHA:
2024 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
2025 AlphaCombine[0]=1;
2026 break;
2027 case GL_ONE_MINUS_SRC_ALPHA:
2028 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
2029 AlphaCombine[0]=1;
2030 break;
2031 }
2032 switch (texUnit0->Combine.OperandRGB[1]) {
2033 case GL_SRC_COLOR:
2034 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
2035 AlphaCombine[1]=0;
2036 break;
2037 case GL_ONE_MINUS_SRC_COLOR:
2038 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
2039 AlphaCombine[1]=0;
2040 break;
2041 case GL_SRC_ALPHA:
2042 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
2043 AlphaCombine[1]=1;
2044 break;
2045 case GL_ONE_MINUS_SRC_ALPHA:
2046 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
2047 AlphaCombine[1]=1;
2048 break;
2049 }
2050 switch (texUnit0->Combine.SourceRGB[0]) {
2051 case GL_TEXTURE:
2052 if (AlphaCombine[0]==0) {
2053 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
2054 }
2055 else {
2056 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
2057 }
2058 break;
2059 case GL_CONSTANT :
2060 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2061 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2062 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2063 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2064 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
2065 if (AlphaCombine[0]==0) {
2066 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
2067 }
2068 else {
2069 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
2070 }
2071 break;
2072 case GL_PRIMARY_COLOR :
2073 case GL_PREVIOUS :
2074 if (AlphaCombine[0]==0) {
2075 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
2076 }
2077 else {
2078 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
2079 }
2080 break;
2081 }
2082 switch (texUnit0->Combine.SourceRGB[1]) {
2083 case GL_TEXTURE:
2084 if (AlphaCombine[1]==0) {
2085 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
2086 }
2087 else {
2088 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
2089 }
2090 break;
2091 case GL_CONSTANT :
2092 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2093 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2094 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2095 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2096 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
2097 if (AlphaCombine[1]==0) {
2098 vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
2099 }
2100 else {
2101 vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
2102 }
2103 break;
2104 case GL_PRIMARY_COLOR :
2105 case GL_PREVIOUS :
2106 if (AlphaCombine[1]==0) {
2107 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
2108 }
2109 else {
2110 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
2111 }
2112 break;
2113 }
2114 switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
2115 case 1:
2116 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
2117 break;
2118 case 2:
2119 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
2120 break;
2121 case 4:
2122 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
2123 break;
2124 }
2125 break;
2126 case GL_ADD_SIGNED :
2127 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
2128 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2129 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2130 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC|
2131 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC;
2132 vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
2133 vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 );
2134 switch (texUnit0->Combine.OperandRGB[0]) {
2135 case GL_SRC_COLOR:
2136 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
2137 AlphaCombine[0]=0;
2138 break;
2139 case GL_ONE_MINUS_SRC_COLOR:
2140 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
2141 AlphaCombine[0]=0;
2142 break;
2143 case GL_SRC_ALPHA:
2144 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
2145 AlphaCombine[0]=1;
2146 break;
2147 case GL_ONE_MINUS_SRC_ALPHA:
2148 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
2149 AlphaCombine[0]=1;
2150 break;
2151 }
2152 switch (texUnit0->Combine.OperandRGB[1]) {
2153 case GL_SRC_COLOR:
2154 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
2155 AlphaCombine[1]=0;
2156 break;
2157 case GL_ONE_MINUS_SRC_COLOR:
2158 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
2159 AlphaCombine[1]=0;
2160 break;
2161 case GL_SRC_ALPHA:
2162 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
2163 AlphaCombine[1]=1;
2164 break;
2165 case GL_ONE_MINUS_SRC_ALPHA:
2166 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
2167 AlphaCombine[1]=1;
2168 break;
2169 }
2170 switch (texUnit0->Combine.SourceRGB[0]) {
2171 case GL_TEXTURE:
2172 if (AlphaCombine[0]==0) {
2173 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
2174 }
2175 else {
2176 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
2177 }
2178 break;
2179 case GL_CONSTANT :
2180 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2181 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2182 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2183 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2184 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
2185 if (AlphaCombine[0]==0) {
2186 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
2187 }
2188 else {
2189 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
2190 }
2191 break;
2192 case GL_PRIMARY_COLOR :
2193 case GL_PREVIOUS :
2194 if (AlphaCombine[0]==0) {
2195 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
2196 }
2197 else {
2198 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
2199 }
2200 break;
2201 }
2202 switch (texUnit0->Combine.SourceRGB[1]) {
2203 case GL_TEXTURE:
2204 if (AlphaCombine[1]==0) {
2205 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
2206 }
2207 else {
2208 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
2209 }
2210 break;
2211 case GL_CONSTANT :
2212 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2213 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2214 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2215 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2216 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
2217 if (AlphaCombine[1]==0) {
2218 vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
2219 }
2220 else {
2221 vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
2222 }
2223 break;
2224 case GL_PRIMARY_COLOR :
2225 case GL_PREVIOUS :
2226 if (AlphaCombine[1]==0) {
2227 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
2228 }
2229 else {
2230 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
2231 }
2232 break;
2233 }
2234 switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
2235 case 1:
2236 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
2237 break;
2238 case 2:
2239 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
2240 break;
2241 case 4:
2242 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
2243 break;
2244 }
2245 break;
2246 case GL_INTERPOLATE :
2247 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
2248 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2249 switch (texUnit0->Combine.OperandRGB[0]) {
2250 case GL_SRC_COLOR:
2251 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
2252 AlphaCombine[0]=0;
2253 break;
2254 case GL_ONE_MINUS_SRC_COLOR:
2255 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
2256 AlphaCombine[0]=0;
2257 break;
2258 case GL_SRC_ALPHA:
2259 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
2260 AlphaCombine[0]=1;
2261 break;
2262 case GL_ONE_MINUS_SRC_ALPHA:
2263 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
2264 AlphaCombine[0]=1;
2265 break;
2266 }
2267 switch (texUnit0->Combine.OperandRGB[1]) {
2268 case GL_SRC_COLOR:
2269 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
2270 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
2271 AlphaCombine[1]=0;
2272 break;
2273 case GL_ONE_MINUS_SRC_COLOR:
2274 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
2275 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
2276 AlphaCombine[1]=0;
2277 break;
2278 case GL_SRC_ALPHA:
2279 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
2280 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
2281 AlphaCombine[1]=1;
2282 break;
2283 case GL_ONE_MINUS_SRC_ALPHA:
2284 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
2285 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
2286 AlphaCombine[1]=1;
2287 break;
2288 }
2289 switch (texUnit0->Combine.OperandRGB[2]) {
2290 case GL_SRC_COLOR:
2291 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
2292 AlphaCombine[2]=0;
2293 break;
2294 case GL_ONE_MINUS_SRC_COLOR:
2295 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
2296 AlphaCombine[2]=0;
2297 break;
2298 case GL_SRC_ALPHA:
2299 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
2300 AlphaCombine[2]=1;
2301 break;
2302 case GL_ONE_MINUS_SRC_ALPHA:
2303 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
2304 AlphaCombine[2]=1;
2305 break;
2306 }
2307 switch (texUnit0->Combine.SourceRGB[0]) {
2308 case GL_TEXTURE:
2309 if (AlphaCombine[0]==0) {
2310 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
2311 }
2312 else {
2313 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
2314 }
2315 break;
2316 case GL_CONSTANT :
2317 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2318 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2319 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2320 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2321 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
2322 if (AlphaCombine[0]==0) {
2323 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
2324 }
2325 else {
2326 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
2327 }
2328 break;
2329 case GL_PRIMARY_COLOR :
2330 case GL_PREVIOUS :
2331 if (AlphaCombine[0]==0) {
2332 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
2333 }
2334 else {
2335 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
2336 }
2337 break;
2338 }
2339 switch (texUnit0->Combine.SourceRGB[1]) {
2340 case GL_TEXTURE:
2341 if (AlphaCombine[0]==0) {
2342 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
2343 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
2344 }
2345 else {
2346 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
2347 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
2348 }
2349 break;
2350 case GL_CONSTANT :
2351 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2352 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2353 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2354 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2355 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
2356 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
2357 if (AlphaCombine[0]==0) {
2358 vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
2359 vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
2360 }
2361 else {
2362 vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
2363 vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
2364 }
2365 break;
2366 case GL_PRIMARY_COLOR :
2367 case GL_PREVIOUS :
2368 if (AlphaCombine[0]==0) {
2369 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
2370 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
2371 }
2372 else {
2373 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
2374 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
2375 }
2376 break;
2377 }
2378 switch (texUnit0->Combine.SourceRGB[2]) {
2379 case GL_TEXTURE:
2380 if (AlphaCombine[0]==0) {
2381 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
2382 }
2383 else {
2384 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
2385 }
2386 break;
2387 case GL_CONSTANT :
2388 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
2389 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
2390 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
2391 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2392 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
2393 if (AlphaCombine[0]==0) {
2394 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
2395 }
2396 else {
2397 vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
2398 }
2399 break;
2400 case GL_PRIMARY_COLOR :
2401 case GL_PREVIOUS :
2402 if (AlphaCombine[0]==0) {
2403 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
2404 }
2405 else {
2406 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
2407 }
2408 break;
2409 }
2410 switch ((GLint)(texUnit0->Combine.ScaleShiftRGB)) {
2411 case 1:
2412 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
2413 break;
2414 case 2:
2415 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
2416 break;
2417 case 4:
2418 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
2419 break;
2420 }
2421 break;
2422 }
2423 switch (texUnit0->Combine.ModeA) {
2424 case GL_REPLACE:
2425 switch (texUnit0->Combine.SourceA[0]) {
2426 case GL_TEXTURE:
2427 switch (texUnit0->Combine.OperandA[0]) {
2428 case GL_SRC_ALPHA:
2429 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2430 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2431 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2432 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2433 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2434 HC_HTXnTBLAbias_Atex;
2435 vmesa->regHTXnTBLRAa_0 = 0x0;
2436 break;
2437 case GL_ONE_MINUS_SRC_ALPHA:
2438 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2439 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2440 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2441 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2442 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2443 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex;
2444 vmesa->regHTXnTBLRAa_0 = 0x0;
2445 break;
2446 }
2447 break;
2448 case GL_CONSTANT :
2449 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2450 switch (texUnit0->Combine.OperandA[0]) {
2451 case GL_SRC_ALPHA:
2452 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2453 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2454 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2455 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2456 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2457 HC_HTXnTBLAbias_HTXnTBLRAbias;
2458 vmesa->regHTXnTBLRAa_0 = 0x0;
2459 vmesa->regHTXnTBLRFog_0 = a;
2460 break;
2461 case GL_ONE_MINUS_SRC_ALPHA:
2462 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2463 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2464 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2465 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2466 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2467 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias;
2468 vmesa->regHTXnTBLRAa_0 = 0x0;
2469 vmesa->regHTXnTBLRFog_0 = a;
2470 break;
2471 }
2472 break;
2473 case GL_PRIMARY_COLOR :
2474 case GL_PREVIOUS :
2475 switch (texUnit0->Combine.OperandA[0]) {
2476 case GL_SRC_ALPHA:
2477 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2478 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2479 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2480 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2481 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2482 HC_HTXnTBLAbias_Adif;
2483 vmesa->regHTXnTBLRAa_0 = 0x0;
2484 break;
2485 case GL_ONE_MINUS_SRC_ALPHA:
2486 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2487 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2488 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2489 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2490 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2491 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif;
2492 vmesa->regHTXnTBLRAa_0 = 0x0;
2493 break;
2494 }
2495 break;
2496 }
2497 switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
2498 case 1:
2499 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
2500 break;
2501 case 2:
2502 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
2503 break;
2504 case 4:
2505 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
2506 break;
2507 }
2508 break;
2509 case GL_MODULATE:
2510 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2511 HC_HTXnTBLAbias_HTXnTBLRAbias;
2512 vmesa->regHTXnTBLRFog_0 = 0x0;
2513 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2514 vmesa->regHTXnTBLRAa_0= 0x0;
2515 switch (texUnit0->Combine.OperandA[0]) {
2516 case GL_SRC_ALPHA:
2517 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA;
2518 break;
2519 case GL_ONE_MINUS_SRC_ALPHA:
2520 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA;
2521 break;
2522 }
2523 switch (texUnit0->Combine.OperandA[1]) {
2524 case GL_SRC_ALPHA:
2525 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
2526 break;
2527 case GL_ONE_MINUS_SRC_ALPHA:
2528 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
2529 break;
2530 }
2531 switch (texUnit0->Combine.SourceA[0]) {
2532 case GL_TEXTURE:
2533 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
2534 break;
2535 case GL_CONSTANT :
2536 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2537 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
2538 vmesa->regHTXnTBLRAa_0 |= a<<16;
2539 break;
2540 case GL_PRIMARY_COLOR :
2541 case GL_PREVIOUS :
2542 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
2543 break;
2544 }
2545 switch (texUnit0->Combine.SourceA[1]) {
2546 case GL_TEXTURE:
2547 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
2548 break;
2549 case GL_CONSTANT :
2550 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2551 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
2552 vmesa->regHTXnTBLRAa_0 |= a<<8;
2553 break;
2554 case GL_PRIMARY_COLOR :
2555 case GL_PREVIOUS :
2556 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
2557 break;
2558 }
2559 switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
2560 case 1:
2561 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
2562 break;
2563 case 2:
2564 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
2565 break;
2566 case 4:
2567 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
2568 break;
2569 }
2570 break;
2571 case GL_ADD:
2572 case GL_SUBTRACT :
2573 if(texUnit0->Combine.ModeA==GL_ADD) {
2574 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias;
2575 }
2576 else {
2577 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias;
2578 }
2579 vmesa->regHTXnTBLRFog_0 = 0;
2580 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA;
2581 vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 );
2582 switch (texUnit0->Combine.OperandA[0]) {
2583 case GL_SRC_ALPHA:
2584 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
2585 break;
2586 case GL_ONE_MINUS_SRC_ALPHA:
2587 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
2588 break;
2589 }
2590 switch (texUnit0->Combine.OperandA[1]) {
2591 case GL_SRC_ALPHA:
2592 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA;
2593 break;
2594 case GL_ONE_MINUS_SRC_ALPHA:
2595 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA;
2596 break;
2597 }
2598 switch (texUnit0->Combine.SourceA[0]) {
2599 case GL_TEXTURE:
2600 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
2601 break;
2602 case GL_CONSTANT :
2603 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2604 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
2605 vmesa->regHTXnTBLRAa_0 |= (a << 8);
2606 break;
2607 case GL_PRIMARY_COLOR :
2608 case GL_PREVIOUS :
2609 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
2610 break;
2611 }
2612 switch (texUnit0->Combine.SourceA[1]) {
2613 case GL_TEXTURE:
2614 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
2615 break;
2616 case GL_CONSTANT :
2617 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2618 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
2619 vmesa->regHTXnTBLRAa_0 |= a;
2620 break;
2621 case GL_PRIMARY_COLOR :
2622 case GL_PREVIOUS :
2623 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
2624 break;
2625 }
2626 switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
2627 case 1:
2628 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
2629 break;
2630 case 2:
2631 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
2632 break;
2633 case 4:
2634 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
2635 break;
2636 }
2637 break;
2638 case GL_ADD_SIGNED :
2639 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
2640 vmesa->regHTXnTBLRFog_0 = 0x0;
2641 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2642 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA|
2643 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2644 vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 );
2645 switch (texUnit0->Combine.OperandA[0]) {
2646 case GL_SRC_ALPHA:
2647 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
2648 break;
2649 case GL_ONE_MINUS_SRC_ALPHA:
2650 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
2651 break;
2652 }
2653 switch (texUnit0->Combine.OperandA[1]) {
2654 case GL_SRC_ALPHA:
2655 break;
2656 case GL_ONE_MINUS_SRC_ALPHA:
2657 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
2658 break;
2659 }
2660 switch (texUnit0->Combine.SourceA[0]) {
2661 case GL_TEXTURE:
2662 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
2663 break;
2664 case GL_CONSTANT :
2665 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2666 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
2667 vmesa->regHTXnTBLRAa_0 |= (a << 8);
2668 break;
2669 case GL_PRIMARY_COLOR :
2670 case GL_PREVIOUS :
2671 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
2672 break;
2673 }
2674 switch (texUnit0->Combine.SourceA[1]) {
2675 case GL_TEXTURE:
2676 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
2677 break;
2678 case GL_CONSTANT :
2679 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2680 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
2681 vmesa->regHTXnTBLRFog_0 |= a;
2682 break;
2683 case GL_PRIMARY_COLOR :
2684 case GL_PREVIOUS :
2685 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
2686 break;
2687 }
2688 switch ((GLint)(texUnit0->Combine.ScaleShiftA)) {
2689 case 1:
2690 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
2691 break;
2692 case 2:
2693 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
2694 break;
2695 case 4:
2696 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
2697 break;
2698 }
2699 break;
2700 case GL_INTERPOLATE :
2701 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
2702 vmesa->regHTXnTBLRAa_0 = 0x0;
2703 vmesa->regHTXnTBLRFog_0 = 0x0;
2704 switch (texUnit0->Combine.OperandA[0]) {
2705 case GL_SRC_ALPHA:
2706 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA;
2707 break;
2708 case GL_ONE_MINUS_SRC_ALPHA:
2709 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA;
2710 break;
2711 }
2712 switch (texUnit0->Combine.OperandA[1]) {
2713 case GL_SRC_ALPHA:
2714 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA;
2715 break;
2716 case GL_ONE_MINUS_SRC_ALPHA:
2717 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA;
2718 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
2719 break;
2720 }
2721 switch (texUnit0->Combine.OperandA[2]) {
2722 case GL_SRC_ALPHA:
2723 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA;
2724 break;
2725 case GL_ONE_MINUS_SRC_ALPHA:
2726 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA;
2727 break;
2728 }
2729 switch (texUnit0->Combine.SourceA[0]) {
2730 case GL_TEXTURE:
2731 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
2732 break;
2733 case GL_CONSTANT :
2734 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2735 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
2736 vmesa->regHTXnTBLRAa_0 |= (a << 8);
2737 break;
2738 case GL_PRIMARY_COLOR :
2739 case GL_PREVIOUS :
2740 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
2741 break;
2742 }
2743 switch (texUnit0->Combine.SourceA[1]) {
2744 case GL_TEXTURE:
2745 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
2746 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
2747 break;
2748 case GL_CONSTANT :
2749 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2750 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
2751 vmesa->regHTXnTBLRAa_0 |= a;
2752 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
2753 vmesa->regHTXnTBLRFog_0 |= a;
2754 break;
2755 case GL_PRIMARY_COLOR :
2756 case GL_PREVIOUS :
2757 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
2758 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
2759 break;
2760 }
2761 switch (texUnit0->Combine.SourceA[2]) {
2762 case GL_TEXTURE:
2763 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
2764 break;
2765 case GL_CONSTANT :
2766 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[3], a);
2767 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
2768 vmesa->regHTXnTBLRAa_0 |= (a << 16);
2769 break;
2770 case GL_PRIMARY_COLOR :
2771 case GL_PREVIOUS :
2772 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
2773 break;
2774 }
2775 switch (texUnit0->Combine.ScaleShiftA) {
2776 case 1:
2777 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
2778 break;
2779 case 2:
2780 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
2781 break;
2782 case 4:
2783 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
2784 break;
2785 }
2786 break;
2787 case GL_DOT3_RGB :
2788 case GL_DOT3_RGBA :
2789 break;
2790 }
2791 break;
2792 /*=* John Sheng [2003.7.18] texture add *=*/
2793 case GL_ADD:
2794 switch(texImage->Format) {
2795 case GL_ALPHA:
2796 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2797 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
2798 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
2799 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2800 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
2801 HC_HTXnTBLCshift_No;
2802 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2803 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2804 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
2805 HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2806 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2807 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2808 vmesa->regHTXnTBLRAa_0 = 0x0;
2809 vmesa->regHTXnTBLRFog_0 = 0x0;
2810 break;
2811 case GL_LUMINANCE:
2812 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2813 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2814 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2815 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2816 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2817 HC_HTXnTBLCshift_No;
2818 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2819 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2820 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2821 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2822 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2823 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2824 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2825 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
2826 vmesa->regHTXnTBLRAa_0 = 0x0;
2827 break;
2828 case GL_LUMINANCE_ALPHA:
2829 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2830 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2831 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2832 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2833 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2834 HC_HTXnTBLCshift_No;
2835 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2836 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2837 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2838 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
2839 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
2840 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2841 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2842 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2843 vmesa->regHTXnTBLRAa_0 = 0x0;
2844 vmesa->regHTXnTBLRFog_0 = 0x0;
2845 break;
2846 case GL_INTENSITY:
2847 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2848 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2849 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2850 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2851 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2852 HC_HTXnTBLCshift_No;
2853 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2854 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2855 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2856 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2857 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
2858 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
2859 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2860 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2861 /*=* John Sheng [2003.7.18] texenv *=*/
2862 /*vmesa->regHTXnTBLRAa_0 = 0x0;*/
2863 vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;;
2864 vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
2865 break;
2866 case GL_RGB:
2867 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2868 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2869 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2870 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2871 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2872 HC_HTXnTBLCshift_No;
2873 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2874 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2875 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2876 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2877 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2878 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2879 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2880 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
2881 vmesa->regHTXnTBLRAa_0 = 0x0;
2882 break;
2883 case GL_RGBA:
2884 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2885 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2886 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2887 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2888 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2889 HC_HTXnTBLCshift_No;
2890 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2891 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2892 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2893 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
2894 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
2895 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2896 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2897 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2898 vmesa->regHTXnTBLRAa_0 = 0x0;
2899 vmesa->regHTXnTBLRFog_0 = 0x0;
2900 break;
2901 case GL_COLOR_INDEX:
2902 switch(texObj->Palette.Format) {
2903 case GL_ALPHA:
2904 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2905 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
2906 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
2907 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2908 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
2909 HC_HTXnTBLCshift_No;
2910 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2911 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2912 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
2913 HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2914 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2915 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2916 vmesa->regHTXnTBLRAa_0 = 0x0;
2917 vmesa->regHTXnTBLRFog_0 = 0x0;
2918 break;
2919 case GL_LUMINANCE:
2920 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2921 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2922 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2923 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2924 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2925 HC_HTXnTBLCshift_No;
2926 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2927 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2928 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2929 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2930 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2931 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2932 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2933 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
2934 vmesa->regHTXnTBLRAa_0 = 0x0;
2935 break;
2936 case GL_LUMINANCE_ALPHA:
2937 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2938 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2939 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2940 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2941 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2942 HC_HTXnTBLCshift_No;
2943 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2944 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2945 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2946 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
2947 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
2948 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2949 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2950 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2951 vmesa->regHTXnTBLRAa_0 = 0x0;
2952 vmesa->regHTXnTBLRFog_0 = 0x0;
2953 break;
2954 case GL_INTENSITY:
2955 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2956 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2957 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2958 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2959 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2960 HC_HTXnTBLCshift_No;
2961 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2962 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2963 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2964 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2965 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
2966 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
2967 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2968 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
2969 vmesa->regHTXnTBLRAa_0 = 0x0;
2970 vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
2971 break;
2972 case GL_RGB:
2973 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2974 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2975 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2976 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2977 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2978 HC_HTXnTBLCshift_No;
2979 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2980 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2981 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2982 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
2983 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
2984 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
2985 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
2986 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
2987 vmesa->regHTXnTBLRAa_0 = 0x0;
2988 break;
2989 case GL_RGBA:
2990 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
2991 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
2992 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
2993 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
2994 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
2995 HC_HTXnTBLCshift_No;
2996 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
2997 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
2998 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
2999 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3000 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
3001 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3002 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
3003 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3004 vmesa->regHTXnTBLRAa_0 = 0x0;
3005 vmesa->regHTXnTBLRFog_0 = 0x0;
3006 break;
3007 }
3008 break;
3009 }
3010 break;
3011 /*=* John Sheng [2003.7.18] texture dot3 *=*/
3012 case GL_DOT3_RGB :
3013 case GL_DOT3_RGBA :
3014 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
3015 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3016 HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
3017 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3018 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
3019 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
3020 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3021 vmesa->regHTXnTBLRFog_0 = 0x0;
3022 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
3023 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3024 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3025 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3026 vmesa->regHTXnTBLRAa_0 = 0x0;
3027 switch (texUnit0->Combine.OperandRGB[0]) {
3028 case GL_SRC_COLOR:
3029 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
3030 break;
3031 case GL_ONE_MINUS_SRC_COLOR:
3032 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
3033 break;
3034 }
3035 switch (texUnit0->Combine.OperandRGB[1]) {
3036 case GL_SRC_COLOR:
3037 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
3038 break;
3039 case GL_ONE_MINUS_SRC_COLOR:
3040 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
3041 break;
3042 }
3043 switch (texUnit0->Combine.SourceRGB[0]) {
3044 case GL_TEXTURE:
3045 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
3046 break;
3047 case GL_CONSTANT :
3048 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
3049 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
3050 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
3051 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
3052 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
3053 break;
3054 case GL_PRIMARY_COLOR :
3055 case GL_PREVIOUS :
3056 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
3057 break;
3058 }
3059 switch (texUnit0->Combine.SourceRGB[1]) {
3060 case GL_TEXTURE:
3061 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
3062 break;
3063 case GL_CONSTANT :
3064 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[0], r);
3065 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[1], g);
3066 CLAMPED_FLOAT_TO_UBYTE(texUnit0->EnvColor[2], b);
3067 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
3068 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
3069 break;
3070 case GL_PRIMARY_COLOR :
3071 case GL_PREVIOUS :
3072 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
3073 break;
3074 }
3075 break;
3076 default:
3077 break;
3078 }
3079 }
3080 else {
3081 /* Should turn Cs off if actually no Cs */
3082 }
3083
3084 if (texUnit1->_ReallyEnabled) {
3085 struct gl_texture_object *texObj = texUnit1->_Current;
3086 struct gl_texture_image *texImage = texObj->Image[0][0];
3087 GLint r, g, b, a;
3088
3089 if (texImage->Border) {
3090 FALLBACK(vmesa, VIA_FALLBACK_TEXTURE, GL_TRUE);
3091 return;
3092 }
3093
3094 switch (texObj->MinFilter) {
3095 case GL_NEAREST:
3096 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
3097 HC_HTXnFLTs_Nearest;
3098 break;
3099 case GL_LINEAR:
3100 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
3101 HC_HTXnFLTs_Linear;
3102 break;
3103 case GL_NEAREST_MIPMAP_NEAREST:
3104 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
3105 HC_HTXnFLTs_Nearest;
3106 vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Nearest;
3107 break ;
3108 case GL_LINEAR_MIPMAP_NEAREST:
3109 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
3110 HC_HTXnFLTs_Linear;
3111 vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Nearest;
3112 break ;
3113 case GL_NEAREST_MIPMAP_LINEAR:
3114 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
3115 HC_HTXnFLTs_Nearest;
3116 vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Linear;
3117 break ;
3118 case GL_LINEAR_MIPMAP_LINEAR:
3119 vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
3120 HC_HTXnFLTs_Linear;
3121 vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Linear;
3122 break ;
3123 default:
3124 break;
3125 }
3126
3127 switch(texObj->MagFilter) {
3128 case GL_NEAREST:
3129 vmesa->regHTXnTB_1 |= HC_HTXnFLSs_Nearest |
3130 HC_HTXnFLTs_Nearest;
3131 break;
3132 case GL_LINEAR:
3133 vmesa->regHTXnTB_1 |= HC_HTXnFLSs_Linear |
3134 HC_HTXnFLTs_Linear;
3135 break;
3136 }
3137
3138 if (texObj->WrapS == GL_REPEAT)
3139 vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Srepeat;
3140 else
3141 vmesa->regHTXnMPMD_1 = HC_HTXnMPMD_Sclamp;
3142
3143 if (GL_TRUE) {
3144 if (texObj->WrapT == GL_REPEAT)
3145 vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Trepeat;
3146 else
3147 vmesa->regHTXnMPMD_1 |= HC_HTXnMPMD_Tclamp;
3148 }
3149
3150 switch (texUnit1->EnvMode) {
3151 case GL_MODULATE:
3152 switch (texImage->Format) {
3153 case GL_ALPHA:
3154 /* C = Cf, A = At*Af
3155 * RGB part.
3156 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
3157 */
3158 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3159 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
3160 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3161 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3162 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3163 HC_HTXnTBLCshift_No;
3164 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3165 /* Alpha part.
3166 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3167 */
3168 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3169 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
3170 HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3171 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3172 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3173 vmesa->regHTXnTBLRAa_1 = 0x0;
3174 vmesa->regHTXnTBLRFog_1 = 0x0;
3175 break;
3176 case GL_LUMINANCE:
3177 /* C = Lt*Cf, A = Af
3178 * RGB part.
3179 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3180 */
3181 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3182 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3183 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3184 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3185 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3186 HC_HTXnTBLCshift_No;
3187 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3188 /* Alpha part.
3189 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3190 */
3191 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3192 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3193 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3194 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3195 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3196 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3197 vmesa->regHTXnTBLRAa_1 = 0x0;
3198 break;
3199 case GL_LUMINANCE_ALPHA:
3200 /* C = Lt*Cf, A = At*Af
3201 * RGB part.
3202 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3203 */
3204 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3205 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3206 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3207 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3208 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3209 HC_HTXnTBLCshift_No;
3210 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3211 /* Alpha part.
3212 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3213 */
3214 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3215 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3216 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3217 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3218 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3219 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3220 vmesa->regHTXnTBLRAa_1 = 0x0;
3221 vmesa->regHTXnTBLRFog_1 = 0x0;
3222 break;
3223 case GL_INTENSITY:
3224 /* C = It*Cf, A = It*Af
3225 * RGB part.
3226 * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3227 */
3228 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3229 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3230 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3231 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3232 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3233 HC_HTXnTBLCshift_No;
3234 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3235 /* Alpha part.
3236 * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3237 */
3238 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3239 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3240 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3241 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3242 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3243 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3244 vmesa->regHTXnTBLRAa_1 = 0x0;
3245 vmesa->regHTXnTBLRFog_1 = 0x0;
3246 break;
3247 case GL_RGB:
3248 /* C = Ct*Cf, A = Af
3249 * RGB part.
3250 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3251 */
3252 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3253 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3254 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3255 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3256 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3257 HC_HTXnTBLCshift_No;
3258 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3259 /* Alpha part.
3260 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3261 */
3262 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3263 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3264 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3265 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3266 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3267 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3268 vmesa->regHTXnTBLRAa_1 = 0x0;
3269 break;
3270 case GL_RGBA:
3271 /* C = Ct*Cf, A = At*Af
3272 * RGB part.
3273 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3274 */
3275 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3276 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3277 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3278 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3279 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3280 HC_HTXnTBLCshift_No;
3281 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3282 /* Alpha part.
3283 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3284 */
3285 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3286 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3287 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3288 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3289 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3290 HC_HTXnTBLAbias_HTXnTBLRAbias
3291 | HC_HTXnTBLAshift_No;
3292
3293 vmesa->regHTXnTBLRAa_1 = 0x0;
3294 vmesa->regHTXnTBLRFog_1 = 0x0;
3295 break;
3296 case GL_COLOR_INDEX:
3297 switch (texObj->Palette.Format) {
3298 case GL_ALPHA:
3299 /* C = Cf, A = At*Af
3300 * RGB part.
3301 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
3302 */
3303 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3304 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
3305 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3306 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3307 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3308 HC_HTXnTBLCshift_No;
3309 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3310 /* Alpha part.
3311 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3312 */
3313 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3314 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex | HC_HTXnTBLAb_TOPA |
3315 HC_HTXnTBLAb_Acur | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3316 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3317 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3318 vmesa->regHTXnTBLRAa_1 = 0x0;
3319 vmesa->regHTXnTBLRFog_1 = 0x0;
3320 break;
3321 case GL_LUMINANCE:
3322 /* C = Lt*Cf, A = Af
3323 * RGB part.
3324 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3325 */
3326 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3327 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3328 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3329 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3330 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3331 HC_HTXnTBLCshift_No;
3332 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3333 /* Alpha part.
3334 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3335 */
3336 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3337 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3338 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3339 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3340 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3341 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3342 vmesa->regHTXnTBLRAa_1 = 0x0;
3343 break;
3344 case GL_LUMINANCE_ALPHA:
3345 /* C = Lt*Cf, A = At*Af
3346 * RGB part.
3347 * Ca = Lt, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3348 */
3349 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3350 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3351 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3352 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3353 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3354 HC_HTXnTBLCshift_No;
3355 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3356 /* Alpha part.
3357 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3358 */
3359 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3360 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3361 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3362 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3363 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3364 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3365 vmesa->regHTXnTBLRAa_1 = 0x0;
3366 vmesa->regHTXnTBLRFog_1 = 0x0;
3367 break;
3368 case GL_INTENSITY:
3369 /* C = It*Cf, A = It*Af
3370 * RGB part.
3371 * Ca = It, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3372 */
3373 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3374 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3375 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3376 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3377 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3378 HC_HTXnTBLCshift_No;
3379 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3380 /* Alpha part.
3381 * Aa = It, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3382 */
3383 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3384 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3385 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3386 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3387 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3388 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3389 vmesa->regHTXnTBLRAa_1 = 0x0;
3390 vmesa->regHTXnTBLRFog_1 = 0x0;
3391 break;
3392 case GL_RGB:
3393 /* C = Ct*Cf, A = Af
3394 * RGB part.
3395 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3396 */
3397 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3398 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3399 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3400 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3401 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3402 HC_HTXnTBLCshift_No;
3403 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3404 /* Alpha part.
3405 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3406 */
3407 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3408 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3409 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3410 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3411 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3412 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3413 vmesa->regHTXnTBLRAa_1 = 0x0;
3414 break;
3415 case GL_RGBA:
3416 /* C = Ct*Cf, A = At*Af
3417 * RGB part.
3418 * Ca = Ct, Cb = Cf, Cop = +, Cc = 0, Cbias = 0, Cshift = No.
3419 */
3420 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3421 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex | HC_HTXnTBLCb_TOPC |
3422 HC_HTXnTBLCb_Cur | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3423 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3424 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
3425 HC_HTXnTBLCshift_No;
3426 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3427 /* Alpha part.
3428 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3429 */
3430 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3431 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3432 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3433 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3434 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3435 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3436 vmesa->regHTXnTBLRAa_1 = 0x0;
3437 vmesa->regHTXnTBLRFog_1 = 0x0;
3438 break;
3439 }
3440 break;
3441 }
3442 break;
3443 case GL_DECAL:
3444 switch (texImage->Format) {
3445 case GL_ALPHA:
3446 case GL_LUMINANCE:
3447 case GL_LUMINANCE_ALPHA:
3448 case GL_INTENSITY:
3449 /* Undefined.
3450 */
3451 break;
3452 case GL_RGB:
3453 /* C = Ct, A = Af
3454 * RGB part.
3455 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
3456 */
3457 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3458 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3459 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3460 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3461 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3462 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
3463 HC_HTXnTBLCshift_No;
3464 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3465 /* Alpha part.
3466 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3467 */
3468 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3469 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3470 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3471 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3472 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3473 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3474 vmesa->regHTXnTBLRAa_1 = 0x0;
3475 break;
3476 case GL_RGBA:
3477 /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
3478 * RGB part.
3479 * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3480 */
3481 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3482 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
3483 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
3484 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3485 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3486 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3487 HC_HTXnTBLCshift_No;
3488 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3489 /* Alpha part.
3490 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3491 */
3492 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3493 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3494 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3495 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3496 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3497 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3498 vmesa->regHTXnTBLRAa_1 = 0x0;
3499 break;
3500 case GL_COLOR_INDEX:
3501 switch (texObj->Palette.Format) {
3502 case GL_ALPHA:
3503 case GL_LUMINANCE:
3504 case GL_LUMINANCE_ALPHA:
3505 case GL_INTENSITY:
3506 /* Undefined.
3507 */
3508 break;
3509 case GL_RGB:
3510 /* C = Ct, A = Af
3511 * RGB part.
3512 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
3513 */
3514 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3515 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3516 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3517 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3518 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3519 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
3520 HC_HTXnTBLCshift_No;
3521 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3522 /* Alpha part.
3523 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3524 */
3525 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3526 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3527 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3528 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3529 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3530 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3531 vmesa->regHTXnTBLRAa_1 = 0x0;
3532 break;
3533 case GL_RGBA:
3534 /* C = (1-At)*Cf+At*Ct, A = Af --> At*(Ct-Cf)+Cf
3535 * RGB part.
3536 * Ca = At, Cb = Ct, Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3537 */
3538 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3539 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Atex |
3540 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_Tex |
3541 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3542 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3543 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3544 HC_HTXnTBLCshift_No;
3545 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3546 /* Alpha part.
3547 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3548 */
3549 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3550 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3551 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3552 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3553 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3554 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3555 vmesa->regHTXnTBLRAa_1 = 0x0;
3556 break;
3557 }
3558 break;
3559 }
3560 break;
3561 case GL_BLEND:
3562 switch (texImage->Format) {
3563 case GL_ALPHA:
3564 /* C = Cf, A = Af
3565 * RGB part.
3566 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
3567 */
3568 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3569 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3570 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3571 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3572 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3573 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3574 HC_HTXnTBLCshift_No;
3575 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3576 /* Alpha part.
3577 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3578 */
3579 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3580 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3581 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3582 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3583 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3584 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3585 vmesa->regHTXnTBLRAa_1 = 0x0;
3586 break;
3587 case GL_LUMINANCE:
3588 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3589 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3590 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3591 /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
3592 * RGB part.
3593 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3594 */
3595 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3596 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3597 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3598 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3599 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3600 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3601 HC_HTXnTBLCshift_No;
3602 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3603 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3604 /* Alpha part.
3605 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3606 */
3607 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3608 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3609 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3610 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3611 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3612 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3613 vmesa->regHTXnTBLRAa_1 = 0x0;
3614 break;
3615 case GL_LUMINANCE_ALPHA:
3616 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3617 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3618 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3619 /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
3620 * RGB part.
3621 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3622 */
3623 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3624 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3625 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3626 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3627 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3628 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3629 HC_HTXnTBLCshift_No;
3630 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3631 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3632 /* Alpha part.
3633 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3634 */
3635 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3636 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3637 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3638 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3639 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3640 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3641 vmesa->regHTXnTBLRAa_1 = 0x0;
3642 vmesa->regHTXnTBLRFog_1 = 0x0;
3643 break;
3644 case GL_INTENSITY:
3645 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3646 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3647 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3648 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3649 /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
3650 * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
3651 * RGB part.
3652 * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3653 */
3654 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3655 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3656 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3657 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3658 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3659 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3660 HC_HTXnTBLCshift_No;
3661 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3662 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3663 /* Alpha part.
3664 * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
3665 */
3666 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3667 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3668 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3669 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur;
3670 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub |
3671 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3672 vmesa->regHTXnTBLRAa_1 = (a << 8);
3673 break;
3674 case GL_RGB:
3675 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3676 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3677 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3678 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3679 /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
3680 * RGB part.
3681 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3682 */
3683 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3684 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3685 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3686 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3687 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3688 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3689 HC_HTXnTBLCshift_No;
3690 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3691 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3692 /* Alpha part.
3693 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3694 */
3695 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3696 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3697 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3698 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3699 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3700 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3701 vmesa->regHTXnTBLRAa_1 = 0x0;
3702 break;
3703 case GL_RGBA:
3704 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3705 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3706 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3707 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3708 /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
3709 * RGB part.
3710 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3711 */
3712 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3713 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3714 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3715 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3716 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3717 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3718 HC_HTXnTBLCshift_No;
3719 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3720 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3721 /* Alpha part.
3722 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3723 */
3724 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3725 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3726 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3727 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3728 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3729 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3730 vmesa->regHTXnTBLRAa_1 = 0x0;
3731 vmesa->regHTXnTBLRFog_1 = 0x0;
3732 break;
3733 case GL_COLOR_INDEX:
3734 switch (texObj->Palette.Format) {
3735 case GL_ALPHA:
3736 /* C = Cf, A = Af
3737 * RGB part.
3738 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
3739 */
3740 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3741 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3742 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3743 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3744 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3745 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3746 HC_HTXnTBLCshift_No;
3747 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3748 /* Alpha part.
3749 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3750 */
3751 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3752 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3753 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3754 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3755 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3756 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3757 vmesa->regHTXnTBLRAa_1 = 0x0;
3758 break;
3759 case GL_LUMINANCE:
3760 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3761 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3762 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3763 /* C = (1-Lt)*Cf+Lt*Cc, A = Af --> Lt*(Cc-Cf)+Cf
3764 * RGB part.
3765 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3766 */
3767 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3768 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3769 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3770 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3771 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3772 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3773 HC_HTXnTBLCshift_No;
3774 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3775 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3776 /* Alpha part.
3777 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3778 */
3779 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3780 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3781 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3782 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3783 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3784 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3785 vmesa->regHTXnTBLRAa_1 = 0x0;
3786 break;
3787 case GL_LUMINANCE_ALPHA:
3788 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3789 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3790 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3791 /* C = (1-Lt)*Cf+Lt*Cc, A = At*Af --> Lt*(Cc-Cf)+Cf
3792 * RGB part.
3793 * Ca = Lt, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3794 */
3795 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3796 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3797 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3798 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3799 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3800 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3801 HC_HTXnTBLCshift_No;
3802 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3803 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3804 /* Alpha part.
3805 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3806 */
3807 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3808 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3809 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3810 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3811 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3812 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3813 vmesa->regHTXnTBLRAa_1 = 0x0;
3814 vmesa->regHTXnTBLRFog_1 = 0x0;
3815 break;
3816 case GL_INTENSITY:
3817 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3818 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3819 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3820 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3821 /* C = (1-It)*Cf+It*Cc, A = (1-It)*Af+It*Ac
3822 * --> It*(Cc-Cf)+Cf, It*(Ac-Af)+Af
3823 * RGB part.
3824 * Ca = It, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3825 */
3826 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3827 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3828 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3829 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3830 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3831 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3832 HC_HTXnTBLCshift_No;
3833 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3834 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3835 /* Alpha part.
3836 * Aa = It, Ab = Ac(Reg), Cop = -, Ac = Af, Abias = Af, Ashift = No.
3837 */
3838 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3839 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3840 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3841 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Acur;
3842 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Sub |
3843 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3844 vmesa->regHTXnTBLRAa_1 = (a << 8);
3845 break;
3846 case GL_RGB:
3847 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3848 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3849 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3850 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3851 /* C = (1-Ct)*Cf+Ct*Cc, A = Af --> Ct*(Cc-Cf)+Cf
3852 * RGB part.
3853 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3854 */
3855 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3856 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3857 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3858 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3859 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3860 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3861 HC_HTXnTBLCshift_No;
3862 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3863 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3864 /* Alpha part.
3865 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3866 */
3867 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3868 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3869 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3870 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3871 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3872 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3873 vmesa->regHTXnTBLRAa_1 = 0x0;
3874 break;
3875 case GL_RGBA:
3876 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
3877 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
3878 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
3879 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
3880 /* C = (1-Ct)*Cf+Ct*Cc, A = At*Af --> Ct*(Cc-Cf)+Cf
3881 * RGB part.
3882 * Ca = Ct, Cb = Cc(Reg), Cop = -, Cc = Cf, Cbias = Cf, Cshift = No.
3883 */
3884 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3885 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_Tex |
3886 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_HTXnTBLRC |
3887 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Cur;
3888 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Sub |
3889 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3890 HC_HTXnTBLCshift_No;
3891 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3892 vmesa->regHTXnTBLRCb_1 = (r << 16) | (g << 8) | b;
3893 /* Alpha part.
3894 * Aa = At, Ab = Af, Cop = +, Ac = 0, Abias = 0, Ashift = No.
3895 */
3896 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3897 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
3898 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Acur |
3899 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3900 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3901 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
3902 vmesa->regHTXnTBLRAa_1 = 0x0;
3903 vmesa->regHTXnTBLRFog_1 = 0x0;
3904 break;
3905 }
3906 break;
3907 }
3908 break;
3909 case GL_REPLACE:
3910 switch (texImage->Format) {
3911 case GL_ALPHA:
3912 /* C = Cf, A = At
3913 * RGB part.
3914 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
3915 */
3916 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3917 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3918 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3919 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3920 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3921 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
3922 HC_HTXnTBLCshift_No;
3923 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3924 /* Alpha part.
3925 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
3926 */
3927 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3928 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3929 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3930 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3931 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3932 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
3933 vmesa->regHTXnTBLRAa_1 = 0x0;
3934 break;
3935 case GL_LUMINANCE:
3936 /* C = Lt, A = Af
3937 * RGB part.
3938 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
3939 */
3940 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3941 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3942 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3943 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3944 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3945 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
3946 HC_HTXnTBLCshift_No;
3947 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3948 /* Alpha part.
3949 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
3950 */
3951 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3952 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3953 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3954 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3955 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3956 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
3957 vmesa->regHTXnTBLRAa_1 = 0x0;
3958 break;
3959 case GL_LUMINANCE_ALPHA:
3960 /* C = Lt, A = At
3961 * RGB part.
3962 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
3963 */
3964 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3965 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3966 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3967 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3968 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3969 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
3970 HC_HTXnTBLCshift_No;
3971 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3972 /* Alpha part.
3973 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
3974 */
3975 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
3976 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
3977 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
3978 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
3979 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
3980 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
3981 vmesa->regHTXnTBLRAa_1 = 0x0;
3982 break;
3983 case GL_INTENSITY:
3984 /* C = It, A = It
3985 * RGB part.
3986 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
3987 */
3988 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
3989 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
3990 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
3991 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
3992 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
3993 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
3994 HC_HTXnTBLCshift_No;
3995 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
3996 /* Alpha part.
3997 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
3998 */
3999 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4000 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4001 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4002 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4003 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4004 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4005 vmesa->regHTXnTBLRAa_1 = 0x0;
4006 break;
4007 case GL_RGB:
4008 /* C = Ct, A = Af
4009 * RGB part.
4010 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
4011 */
4012 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4013 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4014 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4015 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4016 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4017 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4018 HC_HTXnTBLCshift_No;
4019 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4020 /* Alpha part.
4021 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
4022 */
4023 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4024 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4025 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4026 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4027 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4028 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
4029 vmesa->regHTXnTBLRAa_1 = 0x0;
4030 break;
4031 case GL_RGBA:
4032 /* C = Ct, A = At
4033 * RGB part.
4034 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
4035 */
4036 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4037 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4038 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4039 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4040 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4041 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4042 HC_HTXnTBLCshift_No;
4043 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4044 /* Alpha part.
4045 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
4046 */
4047 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4048 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4049 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4050 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4051 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4052 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4053 vmesa->regHTXnTBLRAa_1 = 0x0;
4054 break;
4055 case GL_COLOR_INDEX:
4056 switch (texObj->Palette.Format) {
4057 case GL_ALPHA:
4058 /* C = Cf, A = At
4059 * RGB part.
4060 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Cf, Cshift = No.
4061 */
4062 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4063 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4064 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4065 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4066 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4067 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Cur |
4068 HC_HTXnTBLCshift_No;
4069 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4070 /* Alpha part.
4071 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
4072 */
4073 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4074 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4075 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4076 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4077 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4078 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4079 vmesa->regHTXnTBLRAa_1 = 0x0;
4080 break;
4081 case GL_LUMINANCE:
4082 /* C = Lt, A = Af
4083 * RGB part.
4084 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
4085 */
4086 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4087 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4088 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4089 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4090 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4091 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4092 HC_HTXnTBLCshift_No;
4093 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4094 /* Alpha part.
4095 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
4096 */
4097 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4098 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4099 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4100 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4101 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4102 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
4103 vmesa->regHTXnTBLRAa_1 = 0x0;
4104 break;
4105 case GL_LUMINANCE_ALPHA:
4106 /* C = Lt, A = At
4107 * RGB part.
4108 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Lt, Cshift = No.
4109 */
4110 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4111 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4112 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4113 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4114 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4115 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4116 HC_HTXnTBLCshift_No;
4117 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4118 /* Alpha part.
4119 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
4120 */
4121 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4122 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4123 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4124 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4125 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4126 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4127 vmesa->regHTXnTBLRAa_1 = 0x0;
4128 break;
4129 case GL_INTENSITY:
4130 /* C = It, A = It
4131 * RGB part.
4132 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = It, Cshift = No.
4133 */
4134 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4135 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4136 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4137 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4138 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4139 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4140 HC_HTXnTBLCshift_No;
4141 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4142 /* Alpha part.
4143 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = It, Ashift = No.
4144 */
4145 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4146 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4147 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4148 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4149 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4150 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4151 vmesa->regHTXnTBLRAa_1 = 0x0;
4152 break;
4153 case GL_RGB:
4154 /* C = Ct, A = Af
4155 * RGB part.
4156 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
4157 */
4158 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4159 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4160 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4161 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4162 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4163 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4164 HC_HTXnTBLCshift_No;
4165 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4166 /* Alpha part.
4167 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = Af, Ashift = No.
4168 */
4169 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4170 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4171 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4172 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4173 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4174 HC_HTXnTBLAbias_Acur | HC_HTXnTBLAshift_No;
4175 vmesa->regHTXnTBLRAa_1 = 0x0;
4176 break;
4177 case GL_RGBA:
4178 /* C = Ct, A = At
4179 * RGB part.
4180 * Ca = 0, Cb = 0, Cop = +, Cc = 0, Cbias = Ct, Cshift = No.
4181 */
4182 vmesa->regHTXnTBLCsat_1 = HC_HTXnTBLCsat_MASK |
4183 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4184 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4185 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4186 vmesa->regHTXnTBLCop_1 = HC_HTXnTBLCop_Add |
4187 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex |
4188 HC_HTXnTBLCshift_No;
4189 vmesa->regHTXnTBLMPfog_1 = HC_HTXnTBLMPfog_Fog;
4190 /* Alpha part.
4191 * Aa = 0, Ab = 0, Cop = +, Ac = 0, Abias = At, Ashift = No.
4192 */
4193 vmesa->regHTXnTBLAsat_1 = HC_HTXnTBLAsat_MASK |
4194 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4195 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4196 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4197 vmesa->regHTXnTBLCop_1 |= HC_HTXnTBLAop_Add |
4198 HC_HTXnTBLAbias_Atex | HC_HTXnTBLAshift_No;
4199 vmesa->regHTXnTBLRAa_1 = 0x0;
4200 break;
4201 }
4202 break;
4203 }
4204 break;
4205 /*=* John Sheng [2003.7.18] texture combine *=*/
4206 case GL_COMBINE:
4207 switch (texUnit1->Combine.ModeRGB) {
4208 case GL_REPLACE:
4209 switch (texUnit1->Combine.SourceRGB[0]) {
4210 case GL_TEXTURE:
4211 switch (texUnit1->Combine.OperandRGB[0]) {
4212 case GL_SRC_COLOR:
4213 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4214 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4215 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4216 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4217 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4218 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Tex;
4219 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4220 break;
4221 case GL_ONE_MINUS_SRC_COLOR:
4222 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4223 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4224 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4225 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4226 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4227 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Tex;
4228 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4229 break;
4230 case GL_SRC_ALPHA:
4231 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4232 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4233 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4234 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4235 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4236 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Atex;
4237 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4238 break;
4239 case GL_ONE_MINUS_SRC_ALPHA:
4240 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4241 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4242 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4243 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4244 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4245 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Atex;
4246 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4247 break;
4248 }
4249 break;
4250 case GL_CONSTANT :
4251 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4252 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4253 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4254 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4255 switch (texUnit1->Combine.OperandRGB[0]) {
4256 case GL_SRC_COLOR:
4257 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4258 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4259 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4260 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4261 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4262 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
4263
4264 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4265 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4266 break;
4267 case GL_ONE_MINUS_SRC_COLOR:
4268 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4269 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4270 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4271 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4272 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4273 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
4274 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4275 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4276 break;
4277 case GL_SRC_ALPHA:
4278 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4279 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4280 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4281 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4282 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4283 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_HTXnTBLRC;
4284 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4285 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4286 break;
4287 case GL_ONE_MINUS_SRC_ALPHA:
4288 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4289 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4290 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4291 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4292 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4293 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_HTXnTBLRC;
4294 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4295 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4296 break;
4297 }
4298 break;
4299 case GL_PRIMARY_COLOR :
4300 switch (texUnit1->Combine.OperandRGB[0]) {
4301 case GL_SRC_COLOR:
4302 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4303 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4304 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4305 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4306 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4307 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
4308 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4309 break;
4310 case GL_ONE_MINUS_SRC_COLOR:
4311 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4312 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4313 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4314 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4315 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4316 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
4317 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4318 break;
4319 case GL_SRC_ALPHA:
4320 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4321 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4322 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4323 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4324 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4325 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
4326 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4327 break;
4328 case GL_ONE_MINUS_SRC_ALPHA:
4329 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4330 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4331 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4332 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4333 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4334 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
4335 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4336 break;
4337 }
4338 break;
4339 case GL_PREVIOUS :
4340 switch (texUnit1->Combine.OperandRGB[0]) {
4341 case GL_SRC_COLOR:
4342 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4343 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4344 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4345 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4346 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4347 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif;
4348 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4349 break;
4350 case GL_ONE_MINUS_SRC_COLOR:
4351 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4352 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4353 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4354 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4355 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4356 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Dif;
4357 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4358 break;
4359 case GL_SRC_ALPHA:
4360 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4361 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4362 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4363 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4364 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4365 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Adif;
4366 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4367 break;
4368 case GL_ONE_MINUS_SRC_ALPHA:
4369 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4370 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 |
4371 HC_HTXnTBLCb_TOPC | HC_HTXnTBLCb_0 |
4372 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4373 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4374 HC_HTXnTBLCbias_InvCbias | HC_HTXnTBLCbias_Adif;
4375 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4376 break;
4377 }
4378 break;
4379 }
4380 switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
4381 case 1:
4382 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
4383 break;
4384 case 2:
4385 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
4386 break;
4387 case 4:
4388 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
4389 break;
4390 }
4391 break;
4392
4393 case GL_MODULATE:
4394 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4395 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
4396 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4397 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4398 switch (texUnit1->Combine.OperandRGB[0]) {
4399 case GL_SRC_COLOR:
4400 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
4401 AlphaCombine[0]=0;
4402 break;
4403 case GL_ONE_MINUS_SRC_COLOR:
4404 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
4405 AlphaCombine[0]=0;
4406 break;
4407 case GL_SRC_ALPHA:
4408 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
4409 AlphaCombine[0]=1;
4410 break;
4411 case GL_ONE_MINUS_SRC_ALPHA:
4412 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
4413 AlphaCombine[0]=1;
4414 break;
4415 }
4416 switch (texUnit1->Combine.OperandRGB[1]) {
4417 case GL_SRC_COLOR:
4418 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4419 AlphaCombine[1]=0;
4420 break;
4421 case GL_ONE_MINUS_SRC_COLOR:
4422 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4423 AlphaCombine[1]=0;
4424 break;
4425 case GL_SRC_ALPHA:
4426 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4427 AlphaCombine[1]=1;
4428 break;
4429 case GL_ONE_MINUS_SRC_ALPHA:
4430 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4431 AlphaCombine[1]=1;
4432 break;
4433 }
4434 switch (texUnit1->Combine.SourceRGB[0]) {
4435 case GL_TEXTURE:
4436 if (AlphaCombine[0]==0) {
4437 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
4438 }
4439 else {
4440 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
4441 }
4442 break;
4443 case GL_CONSTANT :
4444 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4445 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4446 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4447 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4448 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
4449 if (AlphaCombine[0]==0) {
4450 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
4451 }
4452 else {
4453 vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
4454 }
4455 break;
4456 case GL_PRIMARY_COLOR :
4457 if (AlphaCombine[0]==0) {
4458 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
4459 }
4460 else {
4461 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
4462 }
4463 break;
4464 case GL_PREVIOUS :
4465 if (AlphaCombine[0]==0) {
4466 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
4467 }
4468 else {
4469 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
4470 }
4471 break;
4472 }
4473 switch (texUnit1->Combine.SourceRGB[1]) {
4474 case GL_TEXTURE:
4475 if (AlphaCombine[1]==0) {
4476 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
4477 }
4478 else {
4479 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
4480 }
4481 break;
4482 case GL_CONSTANT :
4483 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4484 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4485 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4486 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4487 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
4488 if (AlphaCombine[1]==0) {
4489 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4490 }
4491 else {
4492 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4493 }
4494 break;
4495 case GL_PRIMARY_COLOR :
4496 if (AlphaCombine[1]==0) {
4497 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
4498 }
4499 else {
4500 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
4501 }
4502 break;
4503 case GL_PREVIOUS :
4504 if (AlphaCombine[1]==0) {
4505 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
4506 }
4507 else {
4508 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
4509 }
4510 break;
4511 }
4512 switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
4513 case 1:
4514 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
4515 break;
4516 case 2:
4517 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
4518 break;
4519 case 4:
4520 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
4521 break;
4522 }
4523 break;
4524 case GL_ADD:
4525 case GL_SUBTRACT :
4526 if (texUnit1->Combine.ModeRGB==GL_ADD) {
4527 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
4528 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
4529 }
4530 else {
4531 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub |
4532 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0;
4533 }
4534 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4535 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK | HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC;
4536 vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
4537 switch (texUnit1->Combine.OperandRGB[0]) {
4538 case GL_SRC_COLOR:
4539 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4540 AlphaCombine[0]=0;
4541 break;
4542 case GL_ONE_MINUS_SRC_COLOR:
4543 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4544 AlphaCombine[0]=0;
4545 break;
4546 case GL_SRC_ALPHA:
4547 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4548 AlphaCombine[0]=1;
4549 break;
4550 case GL_ONE_MINUS_SRC_ALPHA:
4551 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4552 AlphaCombine[0]=1;
4553 break;
4554 }
4555 switch (texUnit1->Combine.OperandRGB[1]) {
4556 case GL_SRC_COLOR:
4557 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
4558 AlphaCombine[1]=0;
4559 break;
4560 case GL_ONE_MINUS_SRC_COLOR:
4561 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
4562 AlphaCombine[1]=0;
4563 break;
4564 case GL_SRC_ALPHA:
4565 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_TOPC;
4566 AlphaCombine[1]=1;
4567 break;
4568 case GL_ONE_MINUS_SRC_ALPHA:
4569 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_InvTOPC;
4570 AlphaCombine[1]=1;
4571 break;
4572 }
4573 switch (texUnit1->Combine.SourceRGB[0]) {
4574 case GL_TEXTURE:
4575 if (AlphaCombine[0]==0) {
4576 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
4577 }
4578 else {
4579 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
4580 }
4581 break;
4582 case GL_CONSTANT :
4583 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4584 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4585 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4586 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4587 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
4588 if (AlphaCombine[0]==0) {
4589 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4590 }
4591 else {
4592 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4593 }
4594 break;
4595 case GL_PRIMARY_COLOR :
4596 case GL_PREVIOUS :
4597 if (AlphaCombine[0]==0) {
4598 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
4599 }
4600 else {
4601 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
4602 }
4603 break;
4604 }
4605 switch (texUnit1->Combine.SourceRGB[1]) {
4606 case GL_TEXTURE:
4607 if (AlphaCombine[1]==0) {
4608 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
4609 }
4610 else {
4611 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
4612 }
4613 break;
4614 case GL_CONSTANT :
4615 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4616 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4617 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4618 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4619 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
4620 if (AlphaCombine[1]==0) {
4621 vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
4622 }
4623 else {
4624 vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
4625 }
4626 break;
4627 case GL_PRIMARY_COLOR :
4628 case GL_PREVIOUS :
4629 if (AlphaCombine[1]==0) {
4630 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
4631 }
4632 else {
4633 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
4634 }
4635 break;
4636 }
4637 switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
4638 case 1:
4639 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
4640 break;
4641 case 2:
4642 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
4643 break;
4644 case 4:
4645 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
4646 break;
4647 }
4648 break;
4649 case GL_ADD_SIGNED :
4650 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
4651 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4652 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4653 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC|
4654 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_HTXnTBLRC;
4655 vmesa->regHTXnTBLRCa_0 = ( 255<<16 | 255<<8 |255 );
4656 vmesa->regHTXnTBLRCc_0 = ( 128<<16 | 128<<8 |128 );
4657 switch (texUnit1->Combine.OperandRGB[0]) {
4658 case GL_SRC_COLOR:
4659 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4660 AlphaCombine[0]=0;
4661 break;
4662 case GL_ONE_MINUS_SRC_COLOR:
4663 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4664 AlphaCombine[0]=0;
4665 break;
4666 case GL_SRC_ALPHA:
4667 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4668 AlphaCombine[0]=1;
4669 break;
4670 case GL_ONE_MINUS_SRC_ALPHA:
4671 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4672 AlphaCombine[0]=1;
4673 break;
4674 }
4675 switch (texUnit1->Combine.OperandRGB[1]) {
4676 case GL_SRC_COLOR:
4677 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
4678 AlphaCombine[1]=0;
4679 break;
4680 case GL_ONE_MINUS_SRC_COLOR:
4681 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
4682 AlphaCombine[1]=0;
4683 break;
4684 case GL_SRC_ALPHA:
4685 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
4686 AlphaCombine[1]=1;
4687 break;
4688 case GL_ONE_MINUS_SRC_ALPHA:
4689 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
4690 AlphaCombine[1]=1;
4691 break;
4692 }
4693 switch (texUnit1->Combine.SourceRGB[0]) {
4694 case GL_TEXTURE:
4695 if (AlphaCombine[0]==0) {
4696 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
4697 }
4698 else {
4699 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
4700 }
4701 break;
4702 case GL_CONSTANT :
4703 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4704 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4705 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4706 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4707 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
4708 if (AlphaCombine[0]==0) {
4709 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4710 }
4711 else {
4712 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4713 }
4714 break;
4715 case GL_PRIMARY_COLOR :
4716 case GL_PREVIOUS :
4717 if (AlphaCombine[0]==0) {
4718 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
4719 }
4720 else {
4721 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
4722 }
4723 break;
4724 }
4725 switch (texUnit1->Combine.SourceRGB[1]) {
4726 case GL_TEXTURE:
4727 if (AlphaCombine[1]==0) {
4728 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
4729 }
4730 else {
4731 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
4732 }
4733 break;
4734 case GL_CONSTANT :
4735 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4736 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4737 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4738 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4739 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
4740 if (AlphaCombine[1]==0) {
4741 vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
4742 }
4743 else {
4744 vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
4745 }
4746 break;
4747 case GL_PRIMARY_COLOR :
4748 case GL_PREVIOUS :
4749 if (AlphaCombine[1]==0) {
4750 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
4751 }
4752 else {
4753 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
4754 }
4755 break;
4756 }
4757 switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
4758 case 1:
4759 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
4760 break;
4761 case 2:
4762 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
4763 break;
4764 case 4:
4765 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
4766 break;
4767 }
4768 break;
4769 case GL_INTERPOLATE :
4770 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Sub;
4771 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4772 switch (texUnit1->Combine.OperandRGB[0]) {
4773 case GL_SRC_COLOR:
4774 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
4775 AlphaCombine[0]=0;
4776 break;
4777 case GL_ONE_MINUS_SRC_COLOR:
4778 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
4779 AlphaCombine[0]=0;
4780 break;
4781 case GL_SRC_ALPHA:
4782 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_TOPC;
4783 AlphaCombine[0]=1;
4784 break;
4785 case GL_ONE_MINUS_SRC_ALPHA:
4786 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCb_InvTOPC;
4787 AlphaCombine[0]=1;
4788 break;
4789 }
4790 switch (texUnit1->Combine.OperandRGB[1]) {
4791 case GL_SRC_COLOR:
4792 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
4793 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
4794 AlphaCombine[1]=0;
4795 break;
4796 case GL_ONE_MINUS_SRC_COLOR:
4797 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
4798 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
4799 AlphaCombine[1]=0;
4800 break;
4801 case GL_SRC_ALPHA:
4802 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_TOPC;
4803 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Cbias;
4804 AlphaCombine[1]=1;
4805 break;
4806 case GL_ONE_MINUS_SRC_ALPHA:
4807 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCc_InvTOPC;
4808 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_InvCbias;
4809 AlphaCombine[1]=1;
4810 break;
4811 }
4812 switch (texUnit1->Combine.OperandRGB[2]) {
4813 case GL_SRC_COLOR:
4814 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
4815 AlphaCombine[2]=0;
4816 break;
4817 case GL_ONE_MINUS_SRC_COLOR:
4818 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
4819 AlphaCombine[2]=0;
4820 break;
4821 case GL_SRC_ALPHA:
4822 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_TOPC;
4823 AlphaCombine[2]=1;
4824 break;
4825 case GL_ONE_MINUS_SRC_ALPHA:
4826 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCa_InvTOPC;
4827 AlphaCombine[2]=1;
4828 break;
4829 }
4830 switch (texUnit1->Combine.SourceRGB[0]) {
4831 case GL_TEXTURE:
4832 if (AlphaCombine[0]==0) {
4833 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
4834 }
4835 else {
4836 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Atex;
4837 }
4838 break;
4839 case GL_CONSTANT :
4840 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4841 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4842 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4843 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4844 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
4845 if (AlphaCombine[0]==0) {
4846 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
4847 }
4848 else {
4849 vmesa->regHTXnTBLRCb_0 = (a << 16) | (a << 8) | a;
4850 }
4851 break;
4852 case GL_PRIMARY_COLOR :
4853 case GL_PREVIOUS :
4854 if (AlphaCombine[0]==0) {
4855 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
4856 }
4857 else {
4858 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Adif;
4859 }
4860 break;
4861 }
4862 switch (texUnit1->Combine.SourceRGB[1]) {
4863 case GL_TEXTURE:
4864 if (AlphaCombine[0]==0) {
4865 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Tex;
4866 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Tex;
4867 }
4868 else {
4869 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Atex;
4870 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Atex;
4871 }
4872 break;
4873 case GL_CONSTANT :
4874 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4875 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4876 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4877 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4878 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_HTXnTBLRC;
4879 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_HTXnTBLRC;
4880 if (AlphaCombine[0]==0) {
4881 vmesa->regHTXnTBLRCc_0 = (r << 16) | (g << 8) | b;
4882 vmesa->regHTXnTBLRCbias_0 = (r << 16) | (g << 8) | b;
4883 }
4884 else {
4885 vmesa->regHTXnTBLRCc_0 = (a << 16) | (a << 8) | a;
4886 vmesa->regHTXnTBLRCbias_0 = (a << 16) | (a << 8) | a;
4887 }
4888 break;
4889 case GL_PRIMARY_COLOR :
4890 case GL_PREVIOUS :
4891 if (AlphaCombine[0]==0) {
4892 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Dif;
4893 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Dif;
4894 }
4895 else {
4896 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCc_Adif;
4897 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCbias_Adif;
4898 }
4899 break;
4900 }
4901 switch (texUnit1->Combine.SourceRGB[2]) {
4902 case GL_TEXTURE:
4903 if (AlphaCombine[0]==0) {
4904 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
4905 }
4906 else {
4907 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Atex;
4908 }
4909 break;
4910 case GL_CONSTANT :
4911 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4912 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4913 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4914 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
4915 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
4916 if (AlphaCombine[0]==0) {
4917 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
4918 }
4919 else {
4920 vmesa->regHTXnTBLRCa_0 = (a << 16) | (a << 8) | a;
4921 }
4922 break;
4923 case GL_PRIMARY_COLOR :
4924 case GL_PREVIOUS :
4925 if (AlphaCombine[0]==0) {
4926 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
4927 }
4928 else {
4929 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Adif;
4930 }
4931 break;
4932 }
4933 switch ((GLint)(texUnit1->Combine.ScaleShiftRGB)) {
4934 case 1:
4935 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_No;
4936 break;
4937 case 2:
4938 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_1;
4939 break;
4940 case 4:
4941 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLCshift_2;
4942 break;
4943 }
4944 break;
4945
4946 case GL_DOT3_RGB :
4947 case GL_DOT3_RGBA :
4948 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
4949 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
4950 HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
4951 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
4952 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
4953 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
4954 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
4955 vmesa->regHTXnTBLRFog_0 = 0x0;
4956 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
4957 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
4958 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
4959 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
4960 vmesa->regHTXnTBLRAa_0 = 0x0;
4961 switch (texUnit1->Combine.OperandRGB[0]) {
4962 case GL_SRC_COLOR:
4963 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
4964 break;
4965 case GL_ONE_MINUS_SRC_COLOR:
4966 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
4967 break;
4968 }
4969 switch (texUnit1->Combine.OperandRGB[1]) {
4970 case GL_SRC_COLOR:
4971 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
4972 break;
4973 case GL_ONE_MINUS_SRC_COLOR:
4974 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
4975 break;
4976 }
4977 switch (texUnit1->Combine.SourceRGB[0]) {
4978 case GL_TEXTURE:
4979 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
4980 break;
4981 case GL_CONSTANT :
4982 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4983 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
4984 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
4985 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
4986 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
4987 break;
4988 case GL_PRIMARY_COLOR :
4989 case GL_PREVIOUS :
4990 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
4991 break;
4992 }
4993 switch (texUnit1->Combine.SourceRGB[1]) {
4994 case GL_TEXTURE:
4995 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
4996 break;
4997 case GL_CONSTANT :
4998 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
4999 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
5000 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
5001 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
5002 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
5003 break;
5004 case GL_PRIMARY_COLOR :
5005 case GL_PREVIOUS :
5006 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
5007 break;
5008 }
5009 break;
5010
5011 }
5012 switch (texUnit1->Combine.ModeA) {
5013 case GL_REPLACE:
5014 switch (texUnit1->Combine.SourceA[0]) {
5015 case GL_TEXTURE:
5016 switch (texUnit1->Combine.OperandA[0]) {
5017 case GL_SRC_ALPHA:
5018 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5019 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5020 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5021 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5022 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5023 HC_HTXnTBLAbias_Atex;
5024 vmesa->regHTXnTBLRAa_0 = 0x0;
5025 break;
5026 case GL_ONE_MINUS_SRC_ALPHA:
5027 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5028 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5029 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5030 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5031 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5032 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Atex;
5033 vmesa->regHTXnTBLRAa_0 = 0x0;
5034 break;
5035 }
5036 break;
5037 case GL_CONSTANT :
5038 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5039 switch (texUnit1->Combine.OperandA[0]) {
5040 case GL_SRC_ALPHA:
5041 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5042 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5043 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5044 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5045 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5046 HC_HTXnTBLAbias_HTXnTBLRAbias;
5047 vmesa->regHTXnTBLRAa_0 = 0x0;
5048 vmesa->regHTXnTBLRFog_0 = a;
5049 break;
5050 case GL_ONE_MINUS_SRC_ALPHA:
5051 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5052 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5053 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5054 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5055 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5056 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_HTXnTBLRAbias;
5057 vmesa->regHTXnTBLRAa_0 = 0x0;
5058 vmesa->regHTXnTBLRFog_0 = a;
5059 break;
5060 }
5061 break;
5062 case GL_PRIMARY_COLOR :
5063 case GL_PREVIOUS :
5064 switch (texUnit1->Combine.OperandA[0]) {
5065 case GL_SRC_ALPHA:
5066 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5067 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5068 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5069 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5070 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5071 HC_HTXnTBLAbias_Adif;
5072 vmesa->regHTXnTBLRAa_0 = 0x0;
5073 break;
5074 case GL_ONE_MINUS_SRC_ALPHA:
5075 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5076 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5077 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5078 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5079 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5080 HC_HTXnTBLAbias_Inv | HC_HTXnTBLAbias_Adif;
5081 vmesa->regHTXnTBLRAa_0 = 0x0;
5082 break;
5083 }
5084 break;
5085 }
5086 switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
5087 case 1:
5088 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
5089 break;
5090 case 2:
5091 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
5092 break;
5093 case 4:
5094 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
5095 break;
5096 }
5097 break;
5098 case GL_MODULATE:
5099 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5100 HC_HTXnTBLAbias_HTXnTBLRAbias;
5101 vmesa->regHTXnTBLRFog_0 = 0x0;
5102 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5103 vmesa->regHTXnTBLRAa_0= 0x0;
5104 switch (texUnit1->Combine.OperandA[0]) {
5105 case GL_SRC_ALPHA:
5106 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_TOPA;
5107 break;
5108 case GL_ONE_MINUS_SRC_ALPHA:
5109 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_InvTOPA;
5110 break;
5111 }
5112 switch (texUnit1->Combine.OperandA[1]) {
5113 case GL_SRC_ALPHA:
5114 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
5115 break;
5116 case GL_ONE_MINUS_SRC_ALPHA:
5117 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
5118 break;
5119 }
5120 switch (texUnit1->Combine.SourceA[0]) {
5121 case GL_TEXTURE:
5122 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
5123 break;
5124 case GL_CONSTANT :
5125 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5126 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
5127 vmesa->regHTXnTBLRAa_0 |= a<<16;
5128 break;
5129 case GL_PRIMARY_COLOR :
5130 case GL_PREVIOUS :
5131 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
5132 break;
5133 }
5134 switch (texUnit1->Combine.SourceA[1]) {
5135 case GL_TEXTURE:
5136 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
5137 break;
5138 case GL_CONSTANT :
5139 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5140 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
5141 vmesa->regHTXnTBLRAa_0 |= a<<8;
5142 break;
5143 case GL_PRIMARY_COLOR :
5144 case GL_PREVIOUS :
5145 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
5146 break;
5147 }
5148 switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
5149 case 1:
5150 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
5151 break;
5152 case 2:
5153 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
5154 break;
5155 case 4:
5156 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
5157 break;
5158 }
5159 break;
5160 case GL_ADD:
5161 case GL_SUBTRACT :
5162 if(texUnit1->Combine.ModeA==GL_ADD) {
5163 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add | HC_HTXnTBLAbias_HTXnTBLRAbias;
5164 }
5165 else {
5166 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub | HC_HTXnTBLAbias_HTXnTBLRAbias;
5167 }
5168 vmesa->regHTXnTBLRFog_0 = 0;
5169 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK | HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA;
5170 vmesa->regHTXnTBLRAa_0 = 0x0 | ( 255<<16 );
5171 switch (texUnit1->Combine.OperandA[0]) {
5172 case GL_SRC_ALPHA:
5173 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
5174 break;
5175 case GL_ONE_MINUS_SRC_ALPHA:
5176 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
5177 break;
5178 }
5179 switch (texUnit1->Combine.OperandA[1]) {
5180 case GL_SRC_ALPHA:
5181 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_TOPA;
5182 break;
5183 case GL_ONE_MINUS_SRC_ALPHA:
5184 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_InvTOPA;
5185 break;
5186 }
5187 switch (texUnit1->Combine.SourceA[0]) {
5188 case GL_TEXTURE:
5189 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
5190 break;
5191 case GL_CONSTANT :
5192 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5193 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
5194 vmesa->regHTXnTBLRAa_0 |= (a << 8);
5195 break;
5196 case GL_PRIMARY_COLOR :
5197 case GL_PREVIOUS :
5198 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
5199 break;
5200 }
5201 switch (texUnit1->Combine.SourceA[1]) {
5202 case GL_TEXTURE:
5203 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
5204 break;
5205 case GL_CONSTANT :
5206 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5207 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
5208 vmesa->regHTXnTBLRAa_0 |= a;
5209 break;
5210 case GL_PRIMARY_COLOR :
5211 case GL_PREVIOUS :
5212 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
5213 break;
5214 }
5215 switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
5216 case 1:
5217 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
5218 break;
5219 case 2:
5220 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
5221 break;
5222 case 4:
5223 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
5224 break;
5225 }
5226 break;
5227 case GL_ADD_SIGNED :
5228 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
5229 vmesa->regHTXnTBLRFog_0 = 0x0;
5230 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5231 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA|
5232 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5233 vmesa->regHTXnTBLRAa_0 = ( 255<<16 | 0<<8 |128 );
5234 switch (texUnit1->Combine.OperandA[0]) {
5235 case GL_SRC_ALPHA:
5236 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_TOPA;
5237 break;
5238 case GL_ONE_MINUS_SRC_ALPHA:
5239 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_InvTOPA;
5240 break;
5241 }
5242 switch (texUnit1->Combine.OperandA[1]) {
5243 case GL_SRC_ALPHA:
5244 break;
5245 case GL_ONE_MINUS_SRC_ALPHA:
5246 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
5247 break;
5248 }
5249 switch (texUnit1->Combine.SourceA[0]) {
5250 case GL_TEXTURE:
5251 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
5252 break;
5253 case GL_CONSTANT :
5254 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5255 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
5256 vmesa->regHTXnTBLRAa_0 |= (a << 8);
5257 break;
5258 case GL_PRIMARY_COLOR :
5259 case GL_PREVIOUS :
5260 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
5261 break;
5262 }
5263 switch (texUnit1->Combine.SourceA[1]) {
5264 case GL_TEXTURE:
5265 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
5266 break;
5267 case GL_CONSTANT :
5268 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5269 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
5270 vmesa->regHTXnTBLRFog_0 |= a;
5271 break;
5272 case GL_PRIMARY_COLOR :
5273 case GL_PREVIOUS :
5274 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
5275 break;
5276 }
5277 switch ((GLint)(texUnit1->Combine.ScaleShiftA)) {
5278 case 1:
5279 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
5280 break;
5281 case 2:
5282 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
5283 break;
5284 case 4:
5285 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
5286 break;
5287 }
5288 break;
5289 case GL_INTERPOLATE :
5290 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Sub;
5291 vmesa->regHTXnTBLRAa_0 = 0x0;
5292 vmesa->regHTXnTBLRFog_0 = 0x0;
5293 switch (texUnit1->Combine.OperandA[0]) {
5294 case GL_SRC_ALPHA:
5295 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_TOPA;
5296 break;
5297 case GL_ONE_MINUS_SRC_ALPHA:
5298 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAb_InvTOPA;
5299 break;
5300 }
5301 switch (texUnit1->Combine.OperandA[1]) {
5302 case GL_SRC_ALPHA:
5303 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_TOPA;
5304 break;
5305 case GL_ONE_MINUS_SRC_ALPHA:
5306 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAc_InvTOPA;
5307 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Inv;
5308 break;
5309 }
5310 switch (texUnit1->Combine.OperandA[2]) {
5311 case GL_SRC_ALPHA:
5312 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_TOPA;
5313 break;
5314 case GL_ONE_MINUS_SRC_ALPHA:
5315 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAa_InvTOPA;
5316 break;
5317 }
5318 switch (texUnit1->Combine.SourceA[0]) {
5319 case GL_TEXTURE:
5320 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Atex;
5321 break;
5322 case GL_CONSTANT :
5323 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5324 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_HTXnTBLRA;
5325 vmesa->regHTXnTBLRAa_0 |= (a << 8);
5326 break;
5327 case GL_PRIMARY_COLOR :
5328 case GL_PREVIOUS :
5329 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAb_Adif;
5330 break;
5331 }
5332 switch (texUnit1->Combine.SourceA[1]) {
5333 case GL_TEXTURE:
5334 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Atex;
5335 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Atex;
5336 break;
5337 case GL_CONSTANT :
5338 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5339 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_HTXnTBLRA;
5340 vmesa->regHTXnTBLRAa_0 |= a;
5341 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_HTXnTBLRAbias;
5342 vmesa->regHTXnTBLRFog_0 |= a;
5343 break;
5344 case GL_PRIMARY_COLOR :
5345 case GL_PREVIOUS :
5346 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAc_Adif;
5347 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAbias_Adif;
5348 break;
5349 }
5350 switch (texUnit1->Combine.SourceA[2]) {
5351 case GL_TEXTURE:
5352 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Atex;
5353 break;
5354 case GL_CONSTANT :
5355 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[3], a);
5356 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_HTXnTBLRA;
5357 vmesa->regHTXnTBLRAa_0 |= (a << 16);
5358 break;
5359 case GL_PRIMARY_COLOR :
5360 case GL_PREVIOUS :
5361 vmesa->regHTXnTBLAsat_0 |= HC_HTXnTBLAa_Adif;
5362 break;
5363 }
5364 switch (texUnit1->Combine.ScaleShiftA) {
5365 case 1:
5366 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_No;
5367 break;
5368 case 2:
5369 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_1;
5370 break;
5371 case 4:
5372 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAshift_2;
5373 break;
5374 }
5375 break;
5376 case GL_DOT3_RGB :
5377 case GL_DOT3_RGBA :
5378 break;
5379 }
5380 break;
5381
5382 /*=* John Sheng [2003.7.18] texture add *=*/
5383 case GL_ADD:
5384 switch(texImage->Format) {
5385 case GL_ALPHA:
5386 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5387 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
5388 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
5389 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5390 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
5391 HC_HTXnTBLCshift_No;
5392 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5393 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5394 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
5395 HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5396 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5397 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5398 vmesa->regHTXnTBLRAa_0 = 0x0;
5399 vmesa->regHTXnTBLRFog_0 = 0x0;
5400 break;
5401 case GL_LUMINANCE:
5402 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5403 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5404 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5405 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5406 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5407 HC_HTXnTBLCshift_No;
5408 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5409 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5410 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5411 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5412 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5413 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5414 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5415 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
5416 vmesa->regHTXnTBLRAa_0 = 0x0;
5417 break;
5418 case GL_LUMINANCE_ALPHA:
5419 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5420 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5421 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5422 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5423 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5424 HC_HTXnTBLCshift_No;
5425 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5426 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5427 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5428 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
5429 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
5430 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5431 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5432 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5433 vmesa->regHTXnTBLRAa_0 = 0x0;
5434 vmesa->regHTXnTBLRFog_0 = 0x0;
5435 break;
5436 case GL_INTENSITY:
5437 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5438 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5439 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5440 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5441 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5442 HC_HTXnTBLCshift_No;
5443 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5444 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5445 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5446 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5447 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
5448 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
5449 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5450 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5451 /*=* John Sheng [2003.7.18] texenv *=*/
5452 /*vmesa->regHTXnTBLRAa_0 = 0x0;*/
5453 vmesa->regHTXnTBLRAa_0 = (255<<16) | (255<<8) | 255;;
5454 vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
5455 break;
5456 case GL_RGB:
5457 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5458 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5459 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5460 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5461 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5462 HC_HTXnTBLCshift_No;
5463 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5464 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5465 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5466 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5467 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5468 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5469 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5470 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
5471 vmesa->regHTXnTBLRAa_0 = 0x0;
5472 break;
5473 case GL_RGBA:
5474 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5475 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5476 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5477 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5478 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5479 HC_HTXnTBLCshift_No;
5480 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5481 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5482 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5483 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
5484 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
5485 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5486 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5487 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5488 vmesa->regHTXnTBLRAa_0 = 0x0;
5489 vmesa->regHTXnTBLRFog_0 = 0x0;
5490 break;
5491 case GL_COLOR_INDEX:
5492 switch(texObj->Palette.Format) {
5493 case GL_ALPHA:
5494 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5495 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_0 | HC_HTXnTBLCb_TOPC |
5496 HC_HTXnTBLCb_0 | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
5497 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5498 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_Dif |
5499 HC_HTXnTBLCshift_No;
5500 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5501 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5502 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Adif | HC_HTXnTBLAb_TOPA |
5503 HC_HTXnTBLAb_Atex | HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5504 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5505 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5506 vmesa->regHTXnTBLRAa_0 = 0x0;
5507 vmesa->regHTXnTBLRFog_0 = 0x0;
5508 break;
5509 case GL_LUMINANCE:
5510 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5511 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5512 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5513 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5514 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5515 HC_HTXnTBLCshift_No;
5516 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5517 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5518 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5519 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5520 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5521 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5522 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5523 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
5524 vmesa->regHTXnTBLRAa_0 = 0x0;
5525 break;
5526 case GL_LUMINANCE_ALPHA:
5527 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5528 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5529 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5530 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5531 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5532 HC_HTXnTBLCshift_No;
5533 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5534 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5535 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5536 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
5537 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
5538 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5539 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5540 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5541 vmesa->regHTXnTBLRAa_0 = 0x0;
5542 vmesa->regHTXnTBLRFog_0 = 0x0;
5543 break;
5544 case GL_INTENSITY:
5545 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5546 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5547 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5548 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5549 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5550 HC_HTXnTBLCshift_No;
5551 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5552 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5553 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5554 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5555 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Atex |
5556 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_Adif;
5557 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5558 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5559 vmesa->regHTXnTBLRAa_0 = 0x0;
5560 vmesa->regHTXnTBLRFog_0 = 0x0 | 255<<16;
5561 break;
5562 case GL_RGB:
5563 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5564 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5565 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5566 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5567 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5568 HC_HTXnTBLCshift_No;
5569 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5570 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5571 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5572 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5573 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5574 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5575 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5576 HC_HTXnTBLAbias_Adif | HC_HTXnTBLAshift_No;
5577 vmesa->regHTXnTBLRAa_0 = 0x0;
5578 break;
5579 case GL_RGBA:
5580 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5581 HC_HTXnTBLCa_TOPC | HC_HTXnTBLCa_HTXnTBLRC | HC_HTXnTBLCb_TOPC |
5582 HC_HTXnTBLCb_Tex | HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_Dif;
5583 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLCop_Add |
5584 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5585 HC_HTXnTBLCshift_No;
5586 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5587 vmesa->regHTXnTBLRCa_0 = (255<<16) | (255<<8) | 255;
5588 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5589 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_Atex |
5590 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_Adif |
5591 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5592 vmesa->regHTXnTBLCop_0 |= HC_HTXnTBLAop_Add |
5593 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5594 vmesa->regHTXnTBLRAa_0 = 0x0;
5595 vmesa->regHTXnTBLRFog_0 = 0x0;
5596 break;
5597 }
5598 break;
5599 }
5600 break;
5601 /*=* John Sheng [2003.7.18] texture dot3 *=*/
5602 case GL_DOT3_RGB :
5603 case GL_DOT3_RGBA :
5604 vmesa->regHTXnTBLCop_0 = HC_HTXnTBLDOT4 | HC_HTXnTBLCop_Add |
5605 HC_HTXnTBLCbias_Cbias | HC_HTXnTBLCbias_0 |
5606 HC_HTXnTBLCshift_2 | HC_HTXnTBLAop_Add |
5607 HC_HTXnTBLAbias_HTXnTBLRAbias | HC_HTXnTBLAshift_No;
5608 vmesa->regHTXnTBLMPfog_0 = HC_HTXnTBLMPfog_Fog;
5609 vmesa->regHTXnTBLCsat_0 = HC_HTXnTBLCsat_MASK |
5610 HC_HTXnTBLCc_TOPC | HC_HTXnTBLCc_0;
5611 vmesa->regHTXnTBLRFog_0 = 0x0;
5612 vmesa->regHTXnTBLAsat_0 = HC_HTXnTBLAsat_MASK |
5613 HC_HTXnTBLAa_TOPA | HC_HTXnTBLAa_HTXnTBLRA |
5614 HC_HTXnTBLAb_TOPA | HC_HTXnTBLAb_HTXnTBLRA |
5615 HC_HTXnTBLAc_TOPA | HC_HTXnTBLAc_HTXnTBLRA;
5616 vmesa->regHTXnTBLRAa_0 = 0x0;
5617 switch (texUnit1->Combine.OperandRGB[0]) {
5618 case GL_SRC_COLOR:
5619 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_TOPC;
5620 break;
5621 case GL_ONE_MINUS_SRC_COLOR:
5622 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_InvTOPC;
5623 break;
5624 }
5625 switch (texUnit1->Combine.OperandRGB[1]) {
5626 case GL_SRC_COLOR:
5627 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_TOPC;
5628 break;
5629 case GL_ONE_MINUS_SRC_COLOR:
5630 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_InvTOPC;
5631 break;
5632 }
5633 switch (texUnit1->Combine.SourceRGB[0]) {
5634 case GL_TEXTURE:
5635 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Tex;
5636 break;
5637 case GL_CONSTANT :
5638 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
5639 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
5640 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
5641 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_HTXnTBLRC;
5642 vmesa->regHTXnTBLRCa_0 = (r << 16) | (g << 8) | b;
5643 break;
5644 case GL_PRIMARY_COLOR :
5645 case GL_PREVIOUS :
5646 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCa_Dif;
5647 break;
5648 }
5649 switch (texUnit1->Combine.SourceRGB[1]) {
5650 case GL_TEXTURE:
5651 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Tex;
5652 break;
5653 case GL_CONSTANT :
5654 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[0], r);
5655 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[1], g);
5656 CLAMPED_FLOAT_TO_UBYTE(texUnit1->EnvColor[2], b);
5657 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_HTXnTBLRC;
5658 vmesa->regHTXnTBLRCb_0 = (r << 16) | (g << 8) | b;
5659 break;
5660 case GL_PRIMARY_COLOR :
5661 case GL_PREVIOUS :
5662 vmesa->regHTXnTBLCsat_0 |= HC_HTXnTBLCb_Dif;
5663 break;
5664 }
5665 break;
5666 default:
5667 break;
5668 }
5669 }
5670 vmesa->dirty |= VIA_UPLOAD_TEXTURE;
5671 }
5672 else {
5673 if (ctx->Fog.Enabled)
5674 vmesa->regCmdB &= (~(HC_HVPMSK_S | HC_HVPMSK_T));
5675 else
5676 vmesa->regCmdB &= (~(HC_HVPMSK_S | HC_HVPMSK_T | HC_HVPMSK_W));
5677 vmesa->regEnable &= (~(HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK));
5678 vmesa->dirty |= VIA_UPLOAD_ENABLE;
5679 }
5680 #ifdef DEBUG
5681 if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
5682 #endif
5683
5684 }
5685
5686 void viaChooseColorState(GLcontext *ctx)
5687 {
5688 viaContextPtr vmesa = VIA_CONTEXT(ctx);
5689 GLenum s = ctx->Color.BlendSrcRGB;
5690 GLenum d = ctx->Color.BlendDstRGB;
5691
5692 /* The HW's blending equation is:
5693 * (Ca * FCa + Cbias + Cb * FCb) << Cshift
5694 */
5695 #ifdef DEBUG
5696 if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
5697 #endif
5698
5699 if (ctx->Color.BlendEnabled) {
5700 vmesa->regEnable |= HC_HenABL_MASK;
5701 /* Ca -- always from source color.
5702 */
5703 vmesa->regHABLCsat = HC_HABLCsat_MASK | HC_HABLCa_OPC |
5704 HC_HABLCa_Csrc;
5705 /* Aa -- always from source alpha.
5706 */
5707 vmesa->regHABLAsat = HC_HABLAsat_MASK | HC_HABLAa_OPA |
5708 HC_HABLAa_Asrc;
5709 /* FCa -- depend on following condition.
5710 * FAa -- depend on following condition.
5711 */
5712 switch (s) {
5713 case GL_ZERO:
5714 /* (0, 0, 0, 0)
5715 */
5716 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_HABLRCa;
5717 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_HABLFRA;
5718 vmesa->regHABLRFCa = 0x0;
5719 vmesa->regHABLRAa = 0x0;
5720 break;
5721 case GL_ONE:
5722 /* (1, 1, 1, 1)
5723 */
5724 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_HABLRCa;
5725 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
5726 vmesa->regHABLRFCa = 0x0;
5727 vmesa->regHABLRAa = 0x0;
5728 break;
5729 case GL_SRC_COLOR:
5730 /* (Rs, Gs, Bs, As)
5731 */
5732 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_Csrc;
5733 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_Asrc;
5734 break;
5735 case GL_ONE_MINUS_SRC_COLOR:
5736 /* (1, 1, 1, 1) - (Rs, Gs, Bs, As)
5737 */
5738 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_Csrc;
5739 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_Asrc;
5740 break;
5741 case GL_DST_COLOR:
5742 /* (Rd, Gd, Bd, Ad)
5743 */
5744 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_Cdst;
5745 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_Adst;
5746 break;
5747 case GL_ONE_MINUS_DST_COLOR:
5748 /* (1, 1, 1, 1) - (Rd, Gd, Bd, Ad)
5749 */
5750 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_Cdst;
5751 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_Adst;
5752 break;
5753 case GL_SRC_ALPHA:
5754 /* (As, As, As, As)
5755 */
5756 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_Asrc;
5757 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_Asrc;
5758 break;
5759 case GL_ONE_MINUS_SRC_ALPHA:
5760 /* (1, 1, 1, 1) - (As, As, As, As)
5761 */
5762 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_Asrc;
5763 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_Asrc;
5764 break;
5765 case GL_DST_ALPHA:
5766 {
5767 if (vmesa->viaScreen->bitsPerPixel == 16) {
5768 /* (1, 1, 1, 1)
5769 */
5770 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_HABLRCa;
5771 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
5772 vmesa->regHABLRFCa = 0x0;
5773 vmesa->regHABLRAa = 0x0;
5774 }
5775 else {
5776 /* (Ad, Ad, Ad, Ad)
5777 */
5778 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_Adst;
5779 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_Adst;
5780 }
5781 }
5782 break;
5783 case GL_ONE_MINUS_DST_ALPHA:
5784 {
5785 if (vmesa->viaScreen->bitsPerPixel == 16) {
5786 /* (1, 1, 1, 1) - (1, 1, 1, 1) = (0, 0, 0, 0)
5787 */
5788 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_HABLRCa;
5789 vmesa->regHABLAsat |= HC_HABLFAa_OPA | HC_HABLFAa_HABLFRA;
5790 vmesa->regHABLRFCa = 0x0;
5791 vmesa->regHABLRAa = 0x0;
5792 }
5793 else {
5794 /* (1, 1, 1, 1) - (Ad, Ad, Ad, Ad)
5795 */
5796 vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_Adst;
5797 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_Adst;
5798 }
5799 }
5800 break;
5801 case GL_SRC_ALPHA_SATURATE:
5802 {
5803 if (vmesa->viaScreen->bitsPerPixel == 16) {
5804 /* (f, f, f, 1), f = min(As, 1 - Ad) = min(As, 1 - 1) = 0
5805 * So (f, f, f, 1) = (0, 0, 0, 1)
5806 */
5807 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_HABLRCa;
5808 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
5809 vmesa->regHABLRFCa = 0x0;
5810 vmesa->regHABLRAa = 0x0;
5811 }
5812 else {
5813 /* (f, f, f, 1), f = min(As, 1 - Ad)
5814 */
5815 vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_mimAsrcInvAdst;
5816 vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
5817 vmesa->regHABLRFCa = 0x0;
5818 vmesa->regHABLRAa = 0x0;
5819 }
5820 }
5821 break;
5822 }
5823
5824 /* Op is add.
5825 */
5826
5827 /* bias is 0.
5828 */
5829 vmesa->regHABLCsat |= HC_HABLCbias_HABLRCbias;
5830 vmesa->regHABLAsat |= HC_HABLAbias_HABLRAbias;
5831
5832 /* Cb -- always from destination color.
5833 */
5834 vmesa->regHABLCop = HC_HABLCb_OPC | HC_HABLCb_Cdst;
5835 /* Ab -- always from destination alpha.
5836 */
5837 vmesa->regHABLAop = HC_HABLAb_OPA | HC_HABLAb_Adst;
5838 /* FCb -- depend on following condition.
5839 */
5840 switch (d) {
5841 case GL_ZERO:
5842 /* (0, 0, 0, 0)
5843 */
5844 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_HABLRCb;
5845 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_HABLFRA;
5846 vmesa->regHABLRFCb = 0x0;
5847 vmesa->regHABLRAb = 0x0;
5848 break;
5849 case GL_ONE:
5850 /* (1, 1, 1, 1)
5851 */
5852 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_HABLRCb;
5853 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_HABLFRA;
5854 vmesa->regHABLRFCb = 0x0;
5855 vmesa->regHABLRAb = 0x0;
5856 break;
5857 case GL_SRC_COLOR:
5858 /* (Rs, Gs, Bs, As)
5859 */
5860 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_Csrc;
5861 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_Asrc;
5862 break;
5863 case GL_ONE_MINUS_SRC_COLOR:
5864 /* (1, 1, 1, 1) - (Rs, Gs, Bs, As)
5865 */
5866 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_Csrc;
5867 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_Asrc;
5868 break;
5869 case GL_DST_COLOR:
5870 /* (Rd, Gd, Bd, Ad)
5871 */
5872 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_Cdst;
5873 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_Adst;
5874 break;
5875 case GL_ONE_MINUS_DST_COLOR:
5876 /* (1, 1, 1, 1) - (Rd, Gd, Bd, Ad)
5877 */
5878 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_Cdst;
5879 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_Adst;
5880 break;
5881 case GL_SRC_ALPHA:
5882 /* (As, As, As, As)
5883 */
5884 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_Asrc;
5885 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_Asrc;
5886 break;
5887 case GL_ONE_MINUS_SRC_ALPHA:
5888 /* (1, 1, 1, 1) - (As, As, As, As)
5889 */
5890 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_Asrc;
5891 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_Asrc;
5892 break;
5893 case GL_DST_ALPHA:
5894 {
5895 if (vmesa->viaScreen->bitsPerPixel == 16) {
5896 /* (1, 1, 1, 1)
5897 */
5898 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_HABLRCb;
5899 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_HABLFRA;
5900 vmesa->regHABLRFCb = 0x0;
5901 vmesa->regHABLRAb = 0x0;
5902 }
5903 else {
5904 /* (Ad, Ad, Ad, Ad)
5905 */
5906 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_Adst;
5907 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_Adst;
5908 }
5909 }
5910 break;
5911 case GL_ONE_MINUS_DST_ALPHA:
5912 {
5913 if (vmesa->viaScreen->bitsPerPixel == 16) {
5914 /* (1, 1, 1, 1) - (1, 1, 1, 1) = (0, 0, 0, 0)
5915 */
5916 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_HABLRCb;
5917 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_HABLFRA;
5918 vmesa->regHABLRFCb = 0x0;
5919 vmesa->regHABLRAb = 0x0;
5920 }
5921 else {
5922 /* (1, 1, 1, 1) - (Ad, Ad, Ad, Ad)
5923 */
5924 vmesa->regHABLCop |= HC_HABLFCb_InvOPC | HC_HABLFCb_Adst;
5925 vmesa->regHABLAop |= HC_HABLFAb_InvOPA | HC_HABLFAb_Adst;
5926 }
5927 }
5928 break;
5929 default:
5930 vmesa->regHABLCop |= HC_HABLFCb_OPC | HC_HABLFCb_HABLRCb;
5931 vmesa->regHABLAop |= HC_HABLFAb_OPA | HC_HABLFAb_HABLFRA;
5932 vmesa->regHABLRFCb = 0x0;
5933 vmesa->regHABLRAb = 0x0;
5934 break;
5935 }
5936
5937 if (vmesa->viaScreen->bitsPerPixel <= 16)
5938 vmesa->regEnable &= ~HC_HenDT_MASK;
5939
5940 vmesa->dirty |= (VIA_UPLOAD_BLEND | VIA_UPLOAD_ENABLE);
5941 }
5942 else {
5943 vmesa->regEnable &= (~HC_HenABL_MASK);
5944 vmesa->dirty |= VIA_UPLOAD_ENABLE;
5945 }
5946
5947 if (ctx->Color.AlphaEnabled) {
5948 vmesa->regEnable |= HC_HenAT_MASK;
5949 vmesa->regHATMD = (((GLchan)ctx->Color.AlphaRef) & 0xFF) |
5950 ((ctx->Color.AlphaFunc - GL_NEVER) << 8);
5951 vmesa->dirty |= (VIA_UPLOAD_ALPHATEST | VIA_UPLOAD_ENABLE);
5952 }
5953 else {
5954 vmesa->regEnable &= (~HC_HenAT_MASK);
5955 vmesa->dirty |= VIA_UPLOAD_ENABLE;
5956 }
5957
5958 if (ctx->Color.DitherFlag && (vmesa->viaScreen->bitsPerPixel < 32)) {
5959 if (ctx->Color.BlendEnabled) {
5960 vmesa->regEnable &= ~HC_HenDT_MASK;
5961 }
5962 else {
5963 vmesa->regEnable |= HC_HenDT_MASK;
5964 }
5965 vmesa->dirty |= VIA_UPLOAD_ENABLE;
5966 }
5967
5968 if (ctx->Color.ColorLogicOpEnabled)
5969 vmesa->regHROP = ROP[ctx->Color.LogicOp & 0xF];
5970 else
5971 vmesa->regHROP = HC_HROP_P;
5972
5973 vmesa->regHFBBMSKL = (*(GLuint *)&ctx->Color.ColorMask[0]) & 0xFFFFFF;
5974 vmesa->regHROP |= ((*(GLuint *)&ctx->Color.ColorMask[0]) >> 24) & 0xFF;
5975 vmesa->dirty |= VIA_UPLOAD_MASK_ROP;
5976
5977 if ((GLuint)((GLuint *)&ctx->Color.ColorMask[0]) & 0xFF000000)
5978 vmesa->regEnable |= HC_HenAW_MASK;
5979 else
5980 vmesa->regEnable &= (~HC_HenAW_MASK);
5981 vmesa->dirty |= VIA_UPLOAD_ENABLE;
5982 #ifdef DEBUG
5983 if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
5984 #endif
5985 }
5986
5987 void viaChooseFogState(GLcontext *ctx)
5988 {
5989 viaContextPtr vmesa = VIA_CONTEXT(ctx);
5990
5991 if (ctx->Fog.Enabled) {
5992 GLubyte r, g, b, a;
5993
5994 vmesa->regCmdB |= (HC_HVPMSK_Cd | HC_HVPMSK_Cs | HC_HVPMSK_W);
5995 vmesa->regEnable |= HC_HenFOG_MASK;
5996
5997 /* Use fog equation 0 (OpenGL's default) & local fog.
5998 */
5999 vmesa->regHFogLF = 0x0;
6000
6001 r = (GLubyte)(ctx->Fog.Color[0] * 255.0F);
6002 g = (GLubyte)(ctx->Fog.Color[1] * 255.0F);
6003 b = (GLubyte)(ctx->Fog.Color[2] * 255.0F);
6004 a = (GLubyte)(ctx->Fog.Color[3] * 255.0F);
6005 vmesa->regHFogCL = (r << 16) | (g << 8) | b;
6006 vmesa->regHFogCH = a;
6007 vmesa->dirty |= (VIA_UPLOAD_FOG | VIA_UPLOAD_ENABLE);
6008 }
6009 else {
6010 if (!ctx->Texture._EnabledUnits) {
6011 vmesa->regCmdB &= ~ HC_HVPMSK_W;
6012 vmesa->regCmdB &= ~ HC_HVPMSK_Cs;
6013 }
6014 vmesa->regEnable &= ~HC_HenFOG_MASK;
6015 vmesa->dirty |= VIA_UPLOAD_ENABLE;
6016 }
6017 }
6018
6019 void viaChooseDepthState(GLcontext *ctx)
6020 {
6021 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6022 if (ctx->Depth.Test) {
6023 vmesa->regCmdB |= HC_HVPMSK_Z;
6024 vmesa->regEnable |= HC_HenZT_MASK;
6025 if (ctx->Depth.Mask)
6026 vmesa->regEnable |= HC_HenZW_MASK;
6027 else
6028 vmesa->regEnable &= (~HC_HenZW_MASK);
6029 vmesa->regHZWTMD = (ctx->Depth.Func - GL_NEVER) << 16;
6030 vmesa->dirty |= (VIA_UPLOAD_DEPTH | VIA_UPLOAD_ENABLE);
6031
6032 }
6033 else {
6034 /* Still need to send parameter Z.
6035 */
6036
6037 vmesa->regCmdB |= HC_HVPMSK_Z;
6038 vmesa->regEnable &= ~HC_HenZT_MASK;
6039
6040 /*=* [DBG] racer : can't display cars in car selection menu *=*/
6041 /*if (ctx->Depth.Mask)
6042 vmesa->regEnable |= HC_HenZW_MASK;
6043 else
6044 vmesa->regEnable &= (~HC_HenZW_MASK);*/
6045 vmesa->regEnable &= (~HC_HenZW_MASK);
6046
6047 vmesa->dirty |= VIA_UPLOAD_ENABLE;
6048 }
6049 }
6050
6051 void viaChooseLightState(GLcontext *ctx)
6052 {
6053 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6054
6055 if (ctx->Light.ShadeModel == GL_SMOOTH) {
6056 vmesa->regCmdA |= HC_HShading_Gouraud;
6057 vmesa->regCmdB |= HC_HVPMSK_Cd;
6058 }
6059 else {
6060 vmesa->regCmdA &= ~HC_HShading_Gouraud;
6061 vmesa->regCmdB |= HC_HVPMSK_Cd;
6062 }
6063 }
6064
6065 void viaChooseLineState(GLcontext *ctx)
6066 {
6067 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6068
6069 if (ctx->Line.SmoothFlag) {
6070 vmesa->regEnable |= HC_HenAA_MASK;
6071 }
6072 else {
6073 if (!ctx->Polygon.SmoothFlag) {
6074 vmesa->regEnable &= ~HC_HenAA_MASK;
6075 }
6076 }
6077
6078 if (ctx->Line.StippleFlag) {
6079 vmesa->regEnable |= HC_HenLP_MASK;
6080 vmesa->regHLP = ctx->Line.StipplePattern;
6081 vmesa->regHLPRF = ctx->Line.StippleFactor;
6082 vmesa->dirty |= VIA_UPLOAD_LINESTIPPLE;
6083 }
6084 else {
6085 vmesa->regEnable &= ~HC_HenLP_MASK;
6086 }
6087 vmesa->dirty |= VIA_UPLOAD_ENABLE;
6088 }
6089
6090 void viaChoosePolygonState(GLcontext *ctx)
6091 {
6092 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6093
6094 if (ctx->Polygon.SmoothFlag) {
6095 vmesa->regEnable |= HC_HenAA_MASK;
6096 }
6097 else {
6098 if (!ctx->Line.SmoothFlag) {
6099 vmesa->regEnable &= ~HC_HenAA_MASK;
6100 }
6101 }
6102
6103 if (ctx->Polygon.StippleFlag) {
6104 vmesa->regEnable |= HC_HenSP_MASK;
6105 vmesa->dirty |= VIA_UPLOAD_POLYGONSTIPPLE;
6106 }
6107 else {
6108 vmesa->regEnable &= ~HC_HenSP_MASK;
6109 }
6110
6111 if (ctx->Polygon.CullFlag) {
6112 vmesa->regEnable |= HC_HenFBCull_MASK;
6113 }
6114 else {
6115 vmesa->regEnable &= ~HC_HenFBCull_MASK;
6116 }
6117 vmesa->dirty |= VIA_UPLOAD_ENABLE;
6118 }
6119
6120 void viaChooseStencilState(GLcontext *ctx)
6121 {
6122 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6123 #ifdef DEBUG
6124 if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
6125 #endif
6126
6127 if (ctx->Stencil.Enabled) {
6128 GLuint temp;
6129
6130 vmesa->regEnable |= HC_HenST_MASK;
6131 temp = (ctx->Stencil.Ref[0] & 0xFF) << HC_HSTREF_SHIFT;
6132 temp |= 0xFF << HC_HSTOPMSK_SHIFT;
6133 temp |= (ctx->Stencil.ValueMask[0] & 0xFF);
6134 vmesa->regHSTREF = temp;
6135
6136 temp = (ctx->Stencil.Function[0] - GL_NEVER) << 16;
6137
6138 switch (ctx->Stencil.FailFunc[0]) {
6139 case GL_KEEP:
6140 temp |= HC_HSTOPSF_KEEP;
6141 break;
6142 case GL_ZERO:
6143 temp |= HC_HSTOPSF_ZERO;
6144 break;
6145 case GL_REPLACE:
6146 temp |= HC_HSTOPSF_REPLACE;
6147 break;
6148 case GL_INVERT:
6149 temp |= HC_HSTOPSF_INVERT;
6150 break;
6151 case GL_INCR:
6152 temp |= HC_HSTOPSF_INCR;
6153 break;
6154 case GL_DECR:
6155 temp |= HC_HSTOPSF_DECR;
6156 break;
6157 }
6158
6159 switch (ctx->Stencil.ZFailFunc[0]) {
6160 case GL_KEEP:
6161 temp |= HC_HSTOPSPZF_KEEP;
6162 break;
6163 case GL_ZERO:
6164 temp |= HC_HSTOPSPZF_ZERO;
6165 break;
6166 case GL_REPLACE:
6167 temp |= HC_HSTOPSPZF_REPLACE;
6168 break;
6169 case GL_INVERT:
6170 temp |= HC_HSTOPSPZF_INVERT;
6171 break;
6172 case GL_INCR:
6173 temp |= HC_HSTOPSPZF_INCR;
6174 break;
6175 case GL_DECR:
6176 temp |= HC_HSTOPSPZF_DECR;
6177 break;
6178 }
6179
6180 switch (ctx->Stencil.ZPassFunc[0]) {
6181 case GL_KEEP:
6182 temp |= HC_HSTOPSPZP_KEEP;
6183 break;
6184 case GL_ZERO:
6185 temp |= HC_HSTOPSPZP_ZERO;
6186 break;
6187 case GL_REPLACE:
6188 temp |= HC_HSTOPSPZP_REPLACE;
6189 break;
6190 case GL_INVERT:
6191 temp |= HC_HSTOPSPZP_INVERT;
6192 break;
6193 case GL_INCR:
6194 temp |= HC_HSTOPSPZP_INCR;
6195 break;
6196 case GL_DECR:
6197 temp |= HC_HSTOPSPZP_DECR;
6198 break;
6199 }
6200 vmesa->regHSTMD = temp;
6201
6202 vmesa->dirty |= (VIA_UPLOAD_STENCIL | VIA_UPLOAD_STENCIL);
6203 }
6204 else {
6205 vmesa->regEnable &= ~HC_HenST_MASK;
6206 vmesa->dirty |= VIA_UPLOAD_ENABLE;
6207 }
6208 #ifdef DEBUG
6209 if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
6210 #endif
6211 }
6212
6213 void viaChoosePoint(GLcontext *ctx)
6214 {
6215 ctx = ctx;
6216 }
6217
6218 void viaChooseLine(GLcontext *ctx)
6219 {
6220 ctx = ctx;
6221 }
6222
6223 void viaChooseTriangle(GLcontext *ctx)
6224 {
6225 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6226 #ifdef DEBUG
6227 if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
6228
6229 if (VIA_DEBUG) fprintf(stderr, "GL_CULL_FACE = %x\n", GL_CULL_FACE);
6230 if (VIA_DEBUG) fprintf(stderr, "ctx->Polygon.CullFlag = %x\n", ctx->Polygon.CullFlag);
6231
6232 if (VIA_DEBUG) fprintf(stderr, "GL_FRONT = %x\n", GL_FRONT);
6233 if (VIA_DEBUG) fprintf(stderr, "ctx->Polygon.CullFaceMode = %x\n", ctx->Polygon.CullFaceMode);
6234 if (VIA_DEBUG) fprintf(stderr, "GL_CCW = %x\n", GL_CCW);
6235 if (VIA_DEBUG) fprintf(stderr, "ctx->Polygon.FrontFace = %x\n", ctx->Polygon.FrontFace);
6236 #endif
6237 if (ctx->Polygon.CullFlag == GL_TRUE) {
6238 switch (ctx->Polygon.CullFaceMode) {
6239 case GL_FRONT:
6240 if (ctx->Polygon.FrontFace == GL_CCW)
6241 vmesa->regCmdB |= HC_HBFace_MASK;
6242 else
6243 vmesa->regCmdB &= ~HC_HBFace_MASK;
6244 break;
6245 case GL_BACK:
6246 if (ctx->Polygon.FrontFace == GL_CW)
6247 vmesa->regCmdB |= HC_HBFace_MASK;
6248 else
6249 vmesa->regCmdB &= ~HC_HBFace_MASK;
6250 break;
6251 case GL_FRONT_AND_BACK:
6252 return;
6253 }
6254 }
6255 #ifdef DEBUG
6256 if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
6257 #endif
6258 }
6259
6260 static void viaChooseState(GLcontext *ctx, GLuint newState)
6261 {
6262 viaContextPtr vmesa = VIA_CONTEXT(ctx);
6263 struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0];
6264 struct gl_texture_unit *texUnit1 = &ctx->Texture.Unit[1];
6265 #ifdef DEBUG
6266 if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
6267
6268 if (VIA_DEBUG) fprintf(stderr, "newState = %x\n", newState);
6269 #endif
6270 if (!(newState & (_NEW_COLOR |
6271 _NEW_TEXTURE |
6272 _NEW_DEPTH |
6273 _NEW_FOG |
6274 _NEW_LIGHT |
6275 _NEW_LINE |
6276 _NEW_POLYGON |
6277 _NEW_POLYGONSTIPPLE |
6278 _NEW_STENCIL)))
6279 return;
6280
6281 vmesa->dirty = 0;
6282 vmesa->newState = newState;
6283
6284 if (texUnit0->_ReallyEnabled || texUnit1->_ReallyEnabled || ctx->Fog.Enabled) {
6285 vmesa->regCmdB |= HC_HVPMSK_Cs;
6286 }
6287 else {
6288 vmesa->regCmdB &= ~ HC_HVPMSK_Cs;
6289 }
6290
6291 if (newState & _NEW_TEXTURE)
6292 viaChooseTextureState(ctx);
6293
6294 if (newState & _NEW_COLOR)
6295 viaChooseColorState(ctx);
6296
6297 if (newState & _NEW_DEPTH)
6298 viaChooseDepthState(ctx);
6299
6300 if (newState & _NEW_FOG)
6301 viaChooseFogState(ctx);
6302
6303 if (newState & _NEW_LIGHT)
6304 viaChooseLightState(ctx);
6305
6306 if (newState & _NEW_LINE)
6307 viaChooseLineState(ctx);
6308
6309 if (newState & (_NEW_POLYGON | _NEW_POLYGONSTIPPLE))
6310 viaChoosePolygonState(ctx);
6311
6312 if (newState & _NEW_STENCIL)
6313 viaChooseStencilState(ctx);
6314
6315 viaChooseTriangle(ctx);
6316
6317 #ifdef DEBUG
6318 if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
6319 #endif
6320 }
6321
6322 static void viaInvalidateState(GLcontext *ctx, GLuint newState)
6323 {
6324 _swrast_InvalidateState(ctx, newState);
6325 _swsetup_InvalidateState(ctx, newState);
6326 _ac_InvalidateState(ctx, newState);
6327 _tnl_InvalidateState(ctx, newState);
6328 viaChooseState(ctx, newState);
6329 }
6330
6331 void viaInitStateFuncs(GLcontext *ctx)
6332 {
6333 /* Callbacks for internal Mesa events.
6334 */
6335 ctx->Driver.UpdateState = viaInvalidateState;
6336
6337 /* API callbacks
6338 */
6339 ctx->Driver.AlphaFunc = viaAlphaFunc;
6340 ctx->Driver.BlendEquationSeparate = viaBlendEquationSeparate;
6341 ctx->Driver.BlendFuncSeparate = viaBlendFuncSeparate;
6342 ctx->Driver.ClearColor = viaClearColor;
6343 ctx->Driver.ColorMask = viaColorMask;
6344 ctx->Driver.CullFace = viaCullFaceFrontFace;
6345 ctx->Driver.DepthFunc = viaDepthFunc;
6346 ctx->Driver.DepthMask = viaDepthMask;
6347 ctx->Driver.DrawBuffer = viaDrawBuffer;
6348 ctx->Driver.Enable = viaEnable;
6349 ctx->Driver.Fogfv = viaFogfv;
6350 ctx->Driver.FrontFace = viaCullFaceFrontFace;
6351 ctx->Driver.LineWidth = viaLineWidth;
6352 ctx->Driver.LogicOpcode = viaLogicOp;
6353 ctx->Driver.PolygonStipple = viaPolygonStipple;
6354 ctx->Driver.RenderMode = viaRenderMode;
6355 ctx->Driver.Scissor = viaScissor;
6356 ctx->Driver.ShadeModel = viaShadeModel;
6357 ctx->Driver.DepthRange = viaDepthRange;
6358 ctx->Driver.Viewport = viaViewport;
6359 ctx->Driver.PointSize = viaPointSize;
6360 ctx->Driver.LightModelfv = viaLightModelfv;
6361
6362 /* Pixel path fallbacks.
6363 */
6364 ctx->Driver.Accum = _swrast_Accum;
6365 ctx->Driver.Bitmap = viaBitmap;
6366
6367 ctx->Driver.CopyPixels = _swrast_CopyPixels;
6368 ctx->Driver.DrawPixels = _swrast_DrawPixels;
6369 ctx->Driver.ReadPixels = _swrast_ReadPixels;
6370 ctx->Driver.ResizeBuffers = viaReAllocateBuffers;
6371
6372 /* Swrast hooks for imaging extensions:
6373 */
6374 ctx->Driver.CopyColorTable = _swrast_CopyColorTable;
6375 ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable;
6376 ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
6377 ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
6378 }