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