summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/unichrome/via_state.c
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2005-03-22 14:25:55 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2005-03-22 14:25:55 +0000
commit050b77a9ac45afc5c3acb4d018f1d4858c2f4cc7 (patch)
tree9c8a33e48be56fe1218b6e6beee8bb8136ebc29f /src/mesa/drivers/dri/unichrome/via_state.c
parent59b4b7e07e1374d63eede85c93665e4630a359b1 (diff)
merge unichrome changes from branch
Diffstat (limited to 'src/mesa/drivers/dri/unichrome/via_state.c')
-rw-r--r--src/mesa/drivers/dri/unichrome/via_state.c593
1 files changed, 256 insertions, 337 deletions
diff --git a/src/mesa/drivers/dri/unichrome/via_state.c b/src/mesa/drivers/dri/unichrome/via_state.c
index 97f9a03043..91531e6cc3 100644
--- a/src/mesa/drivers/dri/unichrome/via_state.c
+++ b/src/mesa/drivers/dri/unichrome/via_state.c
@@ -38,6 +38,7 @@
#include "via_tex.h"
#include "via_tris.h"
#include "via_ioctl.h"
+#include "via_3d_reg.h"
#include "swrast/swrast.h"
#include "array_cache/acache.h"
@@ -66,17 +67,26 @@ static GLuint ROP[16] = {
HC_HROP_WHITE /* GL_SET 1 */
};
+/*
+ * Compute the 'S5.5' lod bias factor from the floating point OpenGL bias.
+ */
+static GLuint viaComputeLodBias(GLfloat bias)
+{
+ int b = (int) (bias * 32.0);
+ if (b > 511)
+ b = 511;
+ else if (b < -512)
+ b = -512;
+ return (GLuint) b;
+}
-
-void viaEmitState(viaContextPtr vmesa)
+void viaEmitState(struct via_context *vmesa)
{
GLcontext *ctx = vmesa->glCtx;
GLuint i = 0;
GLuint j = 0;
RING_VARS;
- if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
-
viaCheckDma(vmesa, 0x110);
BEGIN_RING(5);
@@ -95,27 +105,23 @@ void viaEmitState(viaContextPtr vmesa)
pitch = vmesa->depth.pitch;
BEGIN_RING(6);
- OUT_RING( ((HC_SubA_HZWBBasL << 24) | (offset & 0xFFFFFF)) );
- OUT_RING( ((HC_SubA_HZWBBasH << 24) | ((offset & 0xFF000000) >> 24)) );
- OUT_RING( ((HC_SubA_HZWBType << 24) | HC_HDBLoc_Local | HC_HZONEasFF_MASK |
- format | pitch) );
- OUT_RING( ((HC_SubA_HZWTMD << 24) | vmesa->regHZWTMD) );
- OUT_RING( ((HC_SubA_HSTREF << 24) | vmesa->regHSTREF) );
- OUT_RING( ((HC_SubA_HSTMD << 24) | vmesa->regHSTMD) );
+ OUT_RING( (HC_SubA_HZWBBasL << 24) | (offset & 0xFFFFFF) );
+ OUT_RING( (HC_SubA_HZWBBasH << 24) | ((offset & 0xFF000000) >> 24) );
+ OUT_RING( (HC_SubA_HZWBType << 24) | HC_HDBLoc_Local | HC_HZONEasFF_MASK |
+ format | pitch );
+ OUT_RING( (HC_SubA_HZWTMD << 24) | vmesa->regHZWTMD );
+ OUT_RING( (HC_SubA_HSTREF << 24) | vmesa->regHSTREF );
+ OUT_RING( (HC_SubA_HSTMD << 24) | vmesa->regHSTMD );
ADVANCE_RING();
}
else if (vmesa->hasDepth) {
GLuint pitch, format, offset;
if (vmesa->depthBits == 16) {
- /* We haven't support 16bit depth yet */
format = HC_HZWBFM_16;
- /*format = HC_HZWBFM_32;*/
- if (VIA_DEBUG) fprintf(stderr, "z format = 16\n");
}
else {
format = HC_HZWBFM_32;
- if (VIA_DEBUG) fprintf(stderr, "z format = 32\n");
}
@@ -123,60 +129,54 @@ void viaEmitState(viaContextPtr vmesa)
pitch = vmesa->depth.pitch;
BEGIN_RING(4);
- OUT_RING( ((HC_SubA_HZWBBasL << 24) | (offset & 0xFFFFFF)) );
- OUT_RING( ((HC_SubA_HZWBBasH << 24) | ((offset & 0xFF000000) >> 24)) );
- OUT_RING( ((HC_SubA_HZWBType << 24) | HC_HDBLoc_Local | HC_HZONEasFF_MASK |
- format | pitch) );
- OUT_RING( ((HC_SubA_HZWTMD << 24) | vmesa->regHZWTMD) );
+ OUT_RING( (HC_SubA_HZWBBasL << 24) | (offset & 0xFFFFFF) );
+ OUT_RING( (HC_SubA_HZWBBasH << 24) | ((offset & 0xFF000000) >> 24) );
+ OUT_RING( (HC_SubA_HZWBType << 24) | HC_HDBLoc_Local | HC_HZONEasFF_MASK |
+ format | pitch );
+ OUT_RING( (HC_SubA_HZWTMD << 24) | vmesa->regHZWTMD );
ADVANCE_RING();
}
if (ctx->Color.AlphaEnabled) {
BEGIN_RING(1);
- OUT_RING( ((HC_SubA_HATMD << 24) | vmesa->regHATMD) );
+ OUT_RING( (HC_SubA_HATMD << 24) | vmesa->regHATMD );
ADVANCE_RING();
i++;
}
if (ctx->Color.BlendEnabled) {
BEGIN_RING(11);
- OUT_RING( ((HC_SubA_HABLCsat << 24) | vmesa->regHABLCsat) );
- OUT_RING( ((HC_SubA_HABLCop << 24) | vmesa->regHABLCop) );
- OUT_RING( ((HC_SubA_HABLAsat << 24) | vmesa->regHABLAsat) );
- OUT_RING( ((HC_SubA_HABLAop << 24) | vmesa->regHABLAop) );
- OUT_RING( ((HC_SubA_HABLRCa << 24) | vmesa->regHABLRCa) );
- OUT_RING( ((HC_SubA_HABLRFCa << 24) | vmesa->regHABLRFCa) );
- OUT_RING( ((HC_SubA_HABLRCbias << 24) | vmesa->regHABLRCbias) );
- OUT_RING( ((HC_SubA_HABLRCb << 24) | vmesa->regHABLRCb) );
- OUT_RING( ((HC_SubA_HABLRFCb << 24) | vmesa->regHABLRFCb) );
- OUT_RING( ((HC_SubA_HABLRAa << 24) | vmesa->regHABLRAa) );
- OUT_RING( ((HC_SubA_HABLRAb << 24) | vmesa->regHABLRAb) );
+ OUT_RING( (HC_SubA_HABLCsat << 24) | vmesa->regHABLCsat );
+ OUT_RING( (HC_SubA_HABLCop << 24) | vmesa->regHABLCop );
+ OUT_RING( (HC_SubA_HABLAsat << 24) | vmesa->regHABLAsat );
+ OUT_RING( (HC_SubA_HABLAop << 24) | vmesa->regHABLAop );
+ OUT_RING( (HC_SubA_HABLRCa << 24) | vmesa->regHABLRCa );
+ OUT_RING( (HC_SubA_HABLRFCa << 24) | vmesa->regHABLRFCa );
+ OUT_RING( (HC_SubA_HABLRCbias << 24) | vmesa->regHABLRCbias );
+ OUT_RING( (HC_SubA_HABLRCb << 24) | vmesa->regHABLRCb );
+ OUT_RING( (HC_SubA_HABLRFCb << 24) | vmesa->regHABLRFCb );
+ OUT_RING( (HC_SubA_HABLRAa << 24) | vmesa->regHABLRAa );
+ OUT_RING( (HC_SubA_HABLRAb << 24) | vmesa->regHABLRAb );
ADVANCE_RING();
}
if (ctx->Fog.Enabled) {
BEGIN_RING(3);
- OUT_RING( ((HC_SubA_HFogLF << 24) | vmesa->regHFogLF) );
- OUT_RING( ((HC_SubA_HFogCL << 24) | vmesa->regHFogCL) );
- OUT_RING( ((HC_SubA_HFogCH << 24) | vmesa->regHFogCH) );
+ OUT_RING( (HC_SubA_HFogLF << 24) | vmesa->regHFogLF );
+ OUT_RING( (HC_SubA_HFogCL << 24) | vmesa->regHFogCL );
+ OUT_RING( (HC_SubA_HFogCH << 24) | vmesa->regHFogCH );
ADVANCE_RING();
}
if (ctx->Line.StippleFlag) {
BEGIN_RING(2);
- OUT_RING( ((HC_SubA_HLP << 24) | ctx->Line.StipplePattern) );
- OUT_RING( ((HC_SubA_HLPRF << 24) | ctx->Line.StippleFactor) );
- ADVANCE_RING();
- }
- else {
- BEGIN_RING(2);
- OUT_RING( ((HC_SubA_HLP << 24) | 0xFFFF) );
- OUT_RING( ((HC_SubA_HLPRF << 24) | 0xFFFF) );
+ OUT_RING( (HC_SubA_HLP << 24) | ctx->Line.StipplePattern );
+ OUT_RING( (HC_SubA_HLPRF << 24) | ctx->Line.StippleFactor );
ADVANCE_RING();
}
BEGIN_RING(1);
- OUT_RING( ((HC_SubA_HPixGC << 24) | 0x0) );
+ OUT_RING( (HC_SubA_HPixGC << 24) | 0x0 );
ADVANCE_RING();
QWORD_PAD_RING();
@@ -195,12 +195,9 @@ void viaEmitState(viaContextPtr vmesa)
OUT_RING( (HC_ParaType_Tex << 16) | (HC_SubType_TexGeneral << 24) );
if (texUnit0->Enabled && texUnit1->Enabled) {
- if (VIA_DEBUG) fprintf(stderr, "multi texture\n");
- nDummyValue = (HC_SubA_HTXSMD << 24) | (1 << 3);
-
+ nDummyValue = (HC_SubA_HTXSMD << 24) | (1 << 3);
}
else {
- if (VIA_DEBUG) fprintf(stderr, "single texture\n");
nDummyValue = (HC_SubA_HTXSMD << 24) | 0;
}
@@ -223,11 +220,10 @@ void viaEmitState(viaContextPtr vmesa)
if (texUnit0->Enabled) {
struct gl_texture_object *texObj = texUnit0->_Current;
- viaTextureObjectPtr t = (viaTextureObjectPtr)texObj->DriverData;
+ struct via_texture_object *t = (struct via_texture_object *)texObj;
GLuint numLevels = t->lastLevel - t->firstLevel + 1;
- if (VIA_DEBUG) {
+ if (VIA_DEBUG & DEBUG_STATE) {
fprintf(stderr, "texture0 enabled\n");
- fprintf(stderr, "texture level %d\n", t->actualLevel);
}
if (numLevels == 8) {
BEGIN_RING(27);
@@ -312,31 +308,26 @@ void viaEmitState(viaContextPtr vmesa)
ADVANCE_RING();
}
- BEGIN_RING(12);
- OUT_RING( (HC_SubA_HTXnTB << 24) | vmesa->regHTXnTB_0 );
- OUT_RING( (HC_SubA_HTXnMPMD << 24) | vmesa->regHTXnMPMD_0 );
- OUT_RING( (HC_SubA_HTXnTBLCsat << 24) | vmesa->regHTXnTBLCsat_0 );
- OUT_RING( (HC_SubA_HTXnTBLCop << 24) | vmesa->regHTXnTBLCop_0 );
- OUT_RING( (HC_SubA_HTXnTBLMPfog << 24) | vmesa->regHTXnTBLMPfog_0 );
- OUT_RING( (HC_SubA_HTXnTBLAsat << 24) | vmesa->regHTXnTBLAsat_0 );
- OUT_RING( (HC_SubA_HTXnTBLRCb << 24) | vmesa->regHTXnTBLRCb_0 );
- OUT_RING( (HC_SubA_HTXnTBLRAa << 24) | vmesa->regHTXnTBLRAa_0 );
- OUT_RING( (HC_SubA_HTXnTBLRFog << 24) | vmesa->regHTXnTBLRFog_0 );
- OUT_RING( (HC_SubA_HTXnTBLRCa << 24) | vmesa->regHTXnTBLRCa_0 );
- OUT_RING( (HC_SubA_HTXnTBLRCc << 24) | vmesa->regHTXnTBLRCc_0 );
- OUT_RING( (HC_SubA_HTXnTBLRCbias << 24) | vmesa->regHTXnTBLRCbias_0 );
-
- if (0) {
- fprintf(stderr, "emitted Ca_0 %08x\n", vmesa->regHTXnTBLRCa_0);
- fprintf(stderr, "emitted Cb_0 %08x\n", vmesa->regHTXnTBLRCb_0);
- fprintf(stderr, "emitted Cc_0 %08x\n", vmesa->regHTXnTBLRCc_0);
- fprintf(stderr, "emitted Cbias_0 %08x\n", vmesa->regHTXnTBLRCbias_0);
- fprintf(stderr, "emitted Aa_0 %08x\n", vmesa->regHTXnTBLRAa_0);
- fprintf(stderr, "emitted Fog_0 %08x\n", vmesa->regHTXnTBLRFog_0);
- }
-
+ BEGIN_RING(15);
+ OUT_RING( (HC_SubA_HTXnTB << 24) | vmesa->regHTXnTB[0] );
+ OUT_RING( (HC_SubA_HTXnMPMD << 24) | vmesa->regHTXnMPMD[0] );
+ OUT_RING( (HC_SubA_HTXnTBLCsat << 24) | vmesa->regHTXnTBLCsat[0] );
+ OUT_RING( (HC_SubA_HTXnTBLCop << 24) | vmesa->regHTXnTBLCop[0] );
+ OUT_RING( (HC_SubA_HTXnTBLMPfog << 24) | vmesa->regHTXnTBLMPfog[0] );
+ OUT_RING( (HC_SubA_HTXnTBLAsat << 24) | vmesa->regHTXnTBLAsat[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRCb << 24) | vmesa->regHTXnTBLRCb[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRAa << 24) | vmesa->regHTXnTBLRAa[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRFog << 24) | vmesa->regHTXnTBLRFog[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRCa << 24) | vmesa->regHTXnTBLRCa[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRCc << 24) | vmesa->regHTXnTBLRCc[0] );
+ OUT_RING( (HC_SubA_HTXnTBLRCbias << 24) | vmesa->regHTXnTBLRCbias[0] );
+ OUT_RING( (HC_SubA_HTXnTBC << 24) | vmesa->regHTXnTBC[0] );
+ OUT_RING( (HC_SubA_HTXnTRAH << 24) | vmesa->regHTXnTRAH[0] );
+ OUT_RING( (HC_SubA_HTXnCLODu << 24) | vmesa->regHTXnCLOD[0] );
ADVANCE_RING();
+ /* KW: This test never succeeds:
+ */
if (t->regTexFM == HC_HTXnFM_Index8) {
struct gl_color_table *table = &texObj->Palette;
GLfloat *tableF = (GLfloat *)table->Table;
@@ -355,12 +346,11 @@ void viaEmitState(viaContextPtr vmesa)
if (texUnit1->Enabled) {
struct gl_texture_object *texObj = texUnit1->_Current;
- viaTextureObjectPtr t = (viaTextureObjectPtr)texObj->DriverData;
+ struct via_texture_object *t = (struct via_texture_object *)texObj;
GLuint numLevels = t->lastLevel - t->firstLevel + 1;
int texunit = (texUnit0->Enabled ? 1 : 0);
- if (VIA_DEBUG) {
+ if (VIA_DEBUG & DEBUG_STATE) {
fprintf(stderr, "texture1 enabled\n");
- fprintf(stderr, "texture level %d\n", t->actualLevel);
}
if (numLevels == 8) {
BEGIN_RING(27);
@@ -443,21 +433,26 @@ void viaEmitState(viaContextPtr vmesa)
ADVANCE_RING();
}
- BEGIN_RING(12);
- OUT_RING( (HC_SubA_HTXnTB << 24) | vmesa->regHTXnTB_1 );
- OUT_RING( (HC_SubA_HTXnMPMD << 24) | vmesa->regHTXnMPMD_1 );
- OUT_RING( (HC_SubA_HTXnTBLCsat << 24) | vmesa->regHTXnTBLCsat_1 );
- OUT_RING( (HC_SubA_HTXnTBLCop << 24) | vmesa->regHTXnTBLCop_1 );
- OUT_RING( (HC_SubA_HTXnTBLMPfog << 24) | vmesa->regHTXnTBLMPfog_1 );
- OUT_RING( (HC_SubA_HTXnTBLAsat << 24) | vmesa->regHTXnTBLAsat_1 );
- OUT_RING( (HC_SubA_HTXnTBLRCb << 24) | vmesa->regHTXnTBLRCb_1 );
- OUT_RING( (HC_SubA_HTXnTBLRAa << 24) | vmesa->regHTXnTBLRAa_1 );
- OUT_RING( (HC_SubA_HTXnTBLRFog << 24) | vmesa->regHTXnTBLRFog_1 );
- OUT_RING( (HC_SubA_HTXnTBLRCa << 24) | vmesa->regHTXnTBLRCa_1 );
- OUT_RING( (HC_SubA_HTXnTBLRCc << 24) | vmesa->regHTXnTBLRCc_1 );
- OUT_RING( (HC_SubA_HTXnTBLRCbias << 24) | vmesa->regHTXnTBLRCbias_1 );
+ BEGIN_RING(15);
+ OUT_RING( (HC_SubA_HTXnTB << 24) | vmesa->regHTXnTB[1] );
+ OUT_RING( (HC_SubA_HTXnMPMD << 24) | vmesa->regHTXnMPMD[1] );
+ OUT_RING( (HC_SubA_HTXnTBLCsat << 24) | vmesa->regHTXnTBLCsat[1] );
+ OUT_RING( (HC_SubA_HTXnTBLCop << 24) | vmesa->regHTXnTBLCop[1] );
+ OUT_RING( (HC_SubA_HTXnTBLMPfog << 24) | vmesa->regHTXnTBLMPfog[1] );
+ OUT_RING( (HC_SubA_HTXnTBLAsat << 24) | vmesa->regHTXnTBLAsat[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRCb << 24) | vmesa->regHTXnTBLRCb[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRAa << 24) | vmesa->regHTXnTBLRAa[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRFog << 24) | vmesa->regHTXnTBLRFog[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRCa << 24) | vmesa->regHTXnTBLRCa[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRCc << 24) | vmesa->regHTXnTBLRCc[1] );
+ OUT_RING( (HC_SubA_HTXnTBLRCbias << 24) | vmesa->regHTXnTBLRCbias[1] );
+ OUT_RING( (HC_SubA_HTXnTBC << 24) | vmesa->regHTXnTBC[1] );
+ OUT_RING( (HC_SubA_HTXnTRAH << 24) | vmesa->regHTXnTRAH[1] );
+ OUT_RING( (HC_SubA_HTXnCLODu << 24) | vmesa->regHTXnCLOD[1] );
ADVANCE_RING();
+ /* KW: This test never succeeds:
+ */
if (t->regTexFM == HC_HTXnFM_Index8) {
struct gl_color_table *table = &texObj->Palette;
GLfloat *tableF = (GLfloat *)table->Table;
@@ -515,41 +510,45 @@ void viaEmitState(viaContextPtr vmesa)
OUT_RING( stipple[0] );
OUT_RING( HC_HEADER2 );
OUT_RING( (HC_ParaType_NotTex << 16) );
- OUT_RING( ((HC_SubA_HSPXYOS << 24) | (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT)));
- OUT_RING( ((HC_SubA_HSPXYOS << 24) | (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT)));
+ OUT_RING( (HC_SubA_HSPXYOS << 24) |
+ (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT));
+ OUT_RING( (HC_SubA_HSPXYOS << 24) |
+ (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT));
ADVANCE_RING();
}
- if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
-
vmesa->newEmitState = 0;
}
-static __inline__ GLuint viaPackColor(GLuint format,
+static __inline__ GLuint viaPackColor(GLuint bpp,
GLubyte r, GLubyte g,
GLubyte b, GLubyte a)
{
- switch (format) {
- case 0x10:
+ switch (bpp) {
+ case 16:
return PACK_COLOR_565(r, g, b);
- case 0x20:
+ case 32:
return PACK_COLOR_8888(a, r, g, b);
default:
- if (VIA_DEBUG) fprintf(stderr, "unknown format %d\n", (int)format);
- return PACK_COLOR_8888(a, r, g, b);
+ assert(0);
+ return 0;
}
}
-static void viaBlendEquationSeparate(GLcontext *ctx, GLenum rgbMode, GLenum aMode)
+static void viaBlendEquationSeparate(GLcontext *ctx,
+ GLenum rgbMode,
+ GLenum aMode)
{
- if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
+ if (VIA_DEBUG & DEBUG_STATE)
+ fprintf(stderr, "%s in\n", __FUNCTION__);
/* GL_EXT_blend_equation_separate not supported */
ASSERT(rgbMode == aMode);
/* Can only do GL_ADD equation in hardware */
- FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_BLEND_EQ, rgbMode != GL_FUNC_ADD_EXT);
+ FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_BLEND_EQ,
+ rgbMode != GL_FUNC_ADD_EXT);
/* BlendEquation sets ColorLogicOpEnabled in an unexpected
* manner.
@@ -557,14 +556,14 @@ static void viaBlendEquationSeparate(GLcontext *ctx, GLenum rgbMode, GLenum aMod
FALLBACK(VIA_CONTEXT(ctx), VIA_FALLBACK_LOGICOP,
(ctx->Color.ColorLogicOpEnabled &&
ctx->Color.LogicOp != GL_COPY));
- if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
}
static void viaBlendFunc(GLcontext *ctx, GLenum sfactor, GLenum dfactor)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
GLboolean fallback = GL_FALSE;
- if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
+ if (VIA_DEBUG & DEBUG_STATE)
+ fprintf(stderr, "%s in\n", __FUNCTION__);
switch (ctx->Color.BlendSrcRGB) {
case GL_SRC_ALPHA_SATURATE:
@@ -590,7 +589,6 @@ static void viaBlendFunc(GLcontext *ctx, GLenum sfactor, GLenum dfactor)
}
FALLBACK(vmesa, VIA_FALLBACK_BLEND_FUNC, fallback);
- if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
}
/* Shouldn't be called as the extension is disabled.
@@ -615,13 +613,14 @@ static void viaBlendFuncSeparate(GLcontext *ctx, GLenum sfactorRGB,
static void viaScissor(GLcontext *ctx, GLint x, GLint y,
GLsizei w, GLsizei h)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (!vmesa->driDrawable)
return;
- if (VIA_DEBUG)
- fprintf(stderr, "%s %d,%d %dx%d, drawH %d\n", __FUNCTION__, x,y,w,h, vmesa->driDrawable->h);
+ if (VIA_DEBUG & DEBUG_STATE)
+ fprintf(stderr, "%s %d,%d %dx%d, drawH %d\n", __FUNCTION__,
+ x,y,w,h, vmesa->driDrawable->h);
if (vmesa->scissor) {
VIA_FLUSH_DMA(vmesa); /* don't pipeline cliprect changes */
@@ -631,13 +630,11 @@ static void viaScissor(GLcontext *ctx, GLint x, GLint y,
vmesa->scissorRect.y1 = vmesa->driDrawable->h - y - h;
vmesa->scissorRect.x2 = x + w;
vmesa->scissorRect.y2 = vmesa->driDrawable->h - y;
-
- if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
}
static void viaEnable(GLcontext *ctx, GLenum cap, GLboolean state)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
switch (cap) {
case GL_SCISSOR_TEST:
@@ -661,8 +658,11 @@ static void viaRenderMode(GLcontext *ctx, GLenum mode)
static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
- if (VIA_DEBUG) fprintf(stderr, "%s in\n", __FUNCTION__);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
+
+ if (VIA_DEBUG & (DEBUG_DRI|DEBUG_STATE))
+ fprintf(stderr, "%s in\n", __FUNCTION__);
+
if (mode == GL_FRONT) {
VIA_FLUSH_DMA(vmesa);
vmesa->drawBuffer = vmesa->readBuffer = &vmesa->front;
@@ -686,14 +686,11 @@ static void viaDrawBuffer(GLcontext *ctx, GLenum mode)
* gets called.
*/
_swrast_DrawBuffer(ctx, mode);
-
-
- if (VIA_DEBUG) fprintf(stderr, "%s out\n", __FUNCTION__);
}
static void viaClearColor(GLcontext *ctx, const GLfloat color[4])
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
GLubyte pcolor[4];
CLAMPED_FLOAT_TO_UBYTE(pcolor[0], color[0]);
CLAMPED_FLOAT_TO_UBYTE(pcolor[1], color[1]);
@@ -702,7 +699,6 @@ static void viaClearColor(GLcontext *ctx, const GLfloat color[4])
vmesa->ClearColor = viaPackColor(vmesa->viaScreen->bitsPerPixel,
pcolor[0], pcolor[1],
pcolor[2], pcolor[3]);
-
}
#define WRITEMASK_ALPHA_SHIFT 31
@@ -714,9 +710,9 @@ static void viaColorMask(GLcontext *ctx,
GLboolean r, GLboolean g,
GLboolean b, GLboolean a)
{
- viaContextPtr vmesa = VIA_CONTEXT( ctx );
+ struct via_context *vmesa = VIA_CONTEXT( ctx );
- if (VIA_DEBUG)
+ if (VIA_DEBUG & DEBUG_STATE)
fprintf(stderr, "%s r(%d) g(%d) b(%d) a(%d)\n", __FUNCTION__, r, g, b, a);
vmesa->ClearMask = (((!r) << WRITEMASK_RED_SHIFT) |
@@ -736,7 +732,7 @@ static void viaColorMask(GLcontext *ctx,
*/
void viaCalcViewport(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
const GLfloat *v = ctx->Viewport._WindowMap.m;
GLfloat *m = vmesa->ViewportMatrix.m;
@@ -765,30 +761,9 @@ static void viaDepthRange(GLcontext *ctx,
viaCalcViewport(ctx);
}
-#if 0
-static void
-flip_bytes( GLubyte *p, GLuint n )
-{
- register GLuint i, a, b;
-
- for (i=0;i<n;i++) {
- b = (GLuint) p[i]; /* words are often faster than bytes */
- a = ((b & 0x01) << 7) |
- ((b & 0x02) << 5) |
- ((b & 0x04) << 3) |
- ((b & 0x08) << 1) |
- ((b & 0x10) >> 1) |
- ((b & 0x20) >> 3) |
- ((b & 0x40) >> 5) |
- ((b & 0x80) >> 7);
- p[i] = (GLubyte) a;
- }
-}
-#endif
-
void viaInitState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
vmesa->regCmdB = HC_ACMD_HCmdB;
vmesa->regEnable = HC_HenCW_MASK;
@@ -850,199 +825,164 @@ get_wrap_mode( GLenum sWrap, GLenum tWrap )
return v;
}
+static u_int32_t
+get_minmag_filter( GLenum min, GLenum mag )
+{
+ u_int32_t v = 0;
+
+ switch (min) {
+ case GL_NEAREST:
+ v = HC_HTXnFLSs_Nearest |
+ HC_HTXnFLTs_Nearest;
+ break;
+ case GL_LINEAR:
+ v = HC_HTXnFLSs_Linear |
+ HC_HTXnFLTs_Linear;
+ break;
+ case GL_NEAREST_MIPMAP_NEAREST:
+ v = HC_HTXnFLSs_Nearest |
+ HC_HTXnFLTs_Nearest;
+ v |= HC_HTXnFLDs_Nearest;
+ break;
+ case GL_LINEAR_MIPMAP_NEAREST:
+ v = HC_HTXnFLSs_Linear |
+ HC_HTXnFLTs_Linear;
+ v |= HC_HTXnFLDs_Nearest;
+ break;
+ case GL_NEAREST_MIPMAP_LINEAR:
+ v = HC_HTXnFLSs_Nearest |
+ HC_HTXnFLTs_Nearest;
+ v |= HC_HTXnFLDs_Linear;
+ break;
+ case GL_LINEAR_MIPMAP_LINEAR:
+ v = HC_HTXnFLSs_Linear |
+ HC_HTXnFLTs_Linear;
+ v |= HC_HTXnFLDs_Linear;
+ break;
+ default:
+ break;
+ }
+
+ switch (mag) {
+ case GL_LINEAR:
+ v |= HC_HTXnFLSe_Linear |
+ HC_HTXnFLTe_Linear;
+ break;
+ case GL_NEAREST:
+ v |= HC_HTXnFLSe_Nearest |
+ HC_HTXnFLTe_Nearest;
+ break;
+ default:
+ break;
+ }
+
+ return v;
+}
+
static GLboolean viaChooseTextureState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
struct gl_texture_unit *texUnit0 = &ctx->Texture.Unit[0];
struct gl_texture_unit *texUnit1 = &ctx->Texture.Unit[1];
- /*=* John Sheng [2003.7.18] texture combine *=*/
- if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
if (texUnit0->_ReallyEnabled || texUnit1->_ReallyEnabled) {
- if (VIA_DEBUG) {
- fprintf(stderr, "Texture._ReallyEnabled - in\n");
- fprintf(stderr, "texUnit0->_ReallyEnabled = %x\n",texUnit0->_ReallyEnabled);
- }
-
- if (VIA_DEBUG) {
- struct gl_texture_object *texObj0 = texUnit0->_Current;
- struct gl_texture_object *texObj1 = texUnit1->_Current;
-
- fprintf(stderr, "env mode: 0x%04x / 0x%04x\n", texUnit0->EnvMode, texUnit1->EnvMode);
-
- if ( (texObj0 != NULL) && (texObj0->Image[0][0] != NULL) )
- fprintf(stderr, "format 0: 0x%04x\n", texObj0->Image[0][0]->Format);
-
- if ( (texObj1 != NULL) && (texObj1->Image[0][0] != NULL) )
- fprintf(stderr, "format 1: 0x%04x\n", texObj1->Image[0][0]->Format);
- }
-
+ vmesa->regEnable |= HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK;
if (texUnit0->_ReallyEnabled) {
struct gl_texture_object *texObj = texUnit0->_Current;
-
- if (VIA_DEBUG) fprintf(stderr, "texUnit0->_ReallyEnabled\n");
-
- vmesa->regEnable |= HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK;
- switch (texObj->MinFilter) {
- case GL_NEAREST:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- break;
- case GL_LINEAR:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Nearest;
- break;
- case GL_LINEAR_MIPMAP_NEAREST:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Nearest;
- break;
- case GL_NEAREST_MIPMAP_LINEAR:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Linear;
- break;
- case GL_LINEAR_MIPMAP_LINEAR:
- vmesa->regHTXnTB_0 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- vmesa->regHTXnTB_0 |= HC_HTXnFLDs_Linear;
- break;
- default:
- break;
- }
-
- switch (texObj->MagFilter) {
- case GL_LINEAR:
- vmesa->regHTXnTB_0 |= HC_HTXnFLSe_Linear |
- HC_HTXnFLTe_Linear;
- break;
- case GL_NEAREST:
- vmesa->regHTXnTB_0 |= HC_HTXnFLSe_Nearest |
- HC_HTXnFLTe_Nearest;
- break;
- default:
- break;
- }
+ vmesa->regHTXnTB[0] = get_minmag_filter( texObj->MinFilter,
+ texObj->MagFilter );
- vmesa->regHTXnMPMD_0 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
- vmesa->regHTXnMPMD_0 |= get_wrap_mode( texObj->WrapS,
+ vmesa->regHTXnMPMD[0] &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
+ vmesa->regHTXnMPMD[0] |= get_wrap_mode( texObj->WrapS,
texObj->WrapT );
- if (VIA_DEBUG) fprintf(stderr, "texUnit0->EnvMode %x\n",texUnit0->EnvMode);
+ vmesa->regHTXnTB[0] &= ~(HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
+ if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
+ vmesa->regHTXnTB[0] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
+ vmesa->regHTXnTBC[0] =
+ PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor[0]),
+ FLOAT_TO_UBYTE(texObj->BorderColor[1]),
+ FLOAT_TO_UBYTE(texObj->BorderColor[2]));
+ vmesa->regHTXnTRAH[0] = FLOAT_TO_UBYTE(texObj->BorderColor[3]);
+ }
+
+ if (texUnit0->LodBias != 0.0f) {
+ GLuint b = viaComputeLodBias(texUnit0->LodBias);
+ vmesa->regHTXnTB[0] &= ~HC_HTXnFLDs_MASK;
+ vmesa->regHTXnTB[0] |= HC_HTXnFLDs_ConstLOD;
+ vmesa->regHTXnCLOD[0] = b | ((~b&0x1f)<<10); /* FIXME */
+ }
- if (!viaTexCombineState( vmesa, texUnit0->_CurrentCombine, 0 ))
+ if (!viaTexCombineState( vmesa, texUnit0->_CurrentCombine, 0 )) {
+ if (VIA_DEBUG & DEBUG_TEXTURE)
+ fprintf(stderr, "viaTexCombineState failed for unit 0\n");
return GL_FALSE;
+ }
}
if (texUnit1->_ReallyEnabled) {
struct gl_texture_object *texObj = texUnit1->_Current;
- vmesa->regEnable |= HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK;
-
- switch (texObj->MinFilter) {
- case GL_NEAREST:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- break;
- case GL_LINEAR:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- break;
- case GL_NEAREST_MIPMAP_NEAREST:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Nearest;
- break ;
- case GL_LINEAR_MIPMAP_NEAREST:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Nearest;
- break ;
- case GL_NEAREST_MIPMAP_LINEAR:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Nearest |
- HC_HTXnFLTs_Nearest;
- vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Linear;
- break ;
- case GL_LINEAR_MIPMAP_LINEAR:
- vmesa->regHTXnTB_1 = HC_HTXnFLSs_Linear |
- HC_HTXnFLTs_Linear;
- vmesa->regHTXnTB_1 |= HC_HTXnFLDs_Linear;
- break ;
- default:
- break;
+ vmesa->regHTXnTB[1] = get_minmag_filter( texObj->MinFilter,
+ texObj->MagFilter );
+ vmesa->regHTXnMPMD[1] &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
+ vmesa->regHTXnMPMD[1] |= get_wrap_mode( texObj->WrapS,
+ texObj->WrapT );
+
+ vmesa->regHTXnTB[1] &= ~(HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
+ if (texObj->Image[0][texObj->BaseLevel]->Border > 0) {
+ vmesa->regHTXnTB[1] |= (HC_HTXnTB_TBC_S | HC_HTXnTB_TBC_T);
+ vmesa->regHTXnTBC[1] =
+ PACK_COLOR_888(FLOAT_TO_UBYTE(texObj->BorderColor[0]),
+ FLOAT_TO_UBYTE(texObj->BorderColor[1]),
+ FLOAT_TO_UBYTE(texObj->BorderColor[2]));
+ vmesa->regHTXnTRAH[1] = FLOAT_TO_UBYTE(texObj->BorderColor[3]);
}
- switch(texObj->MagFilter) {
- case GL_LINEAR:
- vmesa->regHTXnTB_1 |= HC_HTXnFLSe_Linear |
- HC_HTXnFLTe_Linear;
- break;
- case GL_NEAREST:
- vmesa->regHTXnTB_1 |= HC_HTXnFLSe_Nearest |
- HC_HTXnFLTe_Nearest;
- break;
- default:
- break;
+
+ if (texUnit1->LodBias != 0.0f) {
+ GLuint b = viaComputeLodBias(texUnit1->LodBias);
+ vmesa->regHTXnTB[1] &= ~HC_HTXnFLDs_MASK;
+ vmesa->regHTXnTB[1] |= HC_HTXnFLDs_ConstLOD;
+ vmesa->regHTXnCLOD[1] = b | ((~b&0x1f)<<10); /* FIXME */
}
-
- vmesa->regHTXnMPMD_1 &= ~(HC_HTXnMPMD_SMASK | HC_HTXnMPMD_TMASK);
- vmesa->regHTXnMPMD_1 |= get_wrap_mode( texObj->WrapS,
- texObj->WrapT );
- if (!viaTexCombineState( vmesa, texUnit1->_CurrentCombine, 1 ))
+ if (!viaTexCombineState( vmesa, texUnit1->_CurrentCombine, 1 )) {
+ if (VIA_DEBUG & DEBUG_TEXTURE)
+ fprintf(stderr, "viaTexCombineState failed for unit 1\n");
return GL_FALSE;
+ }
}
-
- if (VIA_DEBUG) {
- fprintf( stderr, "Csat_0 / Cop_0 = 0x%08x / 0x%08x\n",
- vmesa->regHTXnTBLCsat_0, vmesa->regHTXnTBLCop_0 );
- fprintf( stderr, "Asat_0 = 0x%08x\n",
- vmesa->regHTXnTBLAsat_0 );
- fprintf( stderr, "RCb_0 / RAa_0 = 0x%08x / 0x%08x\n",
- vmesa->regHTXnTBLRCb_0, vmesa->regHTXnTBLRAa_0 );
- fprintf( stderr, "RCa_0 / RCc_0 = 0x%08x / 0x%08x\n",
- vmesa->regHTXnTBLRCa_0, vmesa->regHTXnTBLRCc_0 );
- fprintf( stderr, "RCbias_0 = 0x%08x\n",
- vmesa->regHTXnTBLRCbias_0 );
- }
}
else {
- vmesa->regEnable &= (~(HC_HenTXMP_MASK | HC_HenTXCH_MASK | HC_HenTXPP_MASK));
+ vmesa->regEnable &= ~(HC_HenTXMP_MASK | HC_HenTXCH_MASK |
+ HC_HenTXPP_MASK);
}
- if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
return GL_TRUE;
}
static void viaChooseColorState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
GLenum s = ctx->Color.BlendSrcRGB;
GLenum d = ctx->Color.BlendDstRGB;
/* The HW's blending equation is:
* (Ca * FCa + Cbias + Cb * FCb) << Cshift
*/
- if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
if (ctx->Color.BlendEnabled) {
vmesa->regEnable |= HC_HenABL_MASK;
/* Ca -- always from source color.
*/
- vmesa->regHABLCsat = HC_HABLCsat_MASK | HC_HABLCa_OPC |
- HC_HABLCa_Csrc;
+ vmesa->regHABLCsat = HC_HABLCsat_MASK | HC_HABLCa_OPC | HC_HABLCa_Csrc;
/* Aa -- always from source alpha.
*/
- vmesa->regHABLAsat = HC_HABLAsat_MASK | HC_HABLAa_OPA |
- HC_HABLAa_Asrc;
+ vmesa->regHABLAsat = HC_HABLAsat_MASK | HC_HABLAa_OPA | HC_HABLAa_Asrc;
/* FCa -- depend on following condition.
* FAa -- depend on following condition.
*/
@@ -1104,8 +1044,10 @@ static void viaChooseColorState(GLcontext *ctx)
if (vmesa->viaScreen->bitsPerPixel == 16) {
/* (1, 1, 1, 1)
*/
- vmesa->regHABLCsat |= HC_HABLFCa_InvOPC | HC_HABLFCa_HABLRCa;
- vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
+ vmesa->regHABLCsat |= (HC_HABLFCa_InvOPC |
+ HC_HABLFCa_HABLRCa);
+ vmesa->regHABLAsat |= (HC_HABLFAa_InvOPA |
+ HC_HABLFAa_HABLFRA);
vmesa->regHABLRFCa = 0x0;
vmesa->regHABLRAa = 0x0;
}
@@ -1142,15 +1084,18 @@ static void viaChooseColorState(GLcontext *ctx)
* So (f, f, f, 1) = (0, 0, 0, 1)
*/
vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_HABLRCa;
- vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
+ vmesa->regHABLAsat |= (HC_HABLFAa_InvOPA |
+ HC_HABLFAa_HABLFRA);
vmesa->regHABLRFCa = 0x0;
vmesa->regHABLRAa = 0x0;
}
else {
/* (f, f, f, 1), f = min(As, 1 - Ad)
*/
- vmesa->regHABLCsat |= HC_HABLFCa_OPC | HC_HABLFCa_mimAsrcInvAdst;
- vmesa->regHABLAsat |= HC_HABLFAa_InvOPA | HC_HABLFAa_HABLFRA;
+ vmesa->regHABLCsat |= (HC_HABLFCa_OPC |
+ HC_HABLFCa_mimAsrcInvAdst);
+ vmesa->regHABLAsat |= (HC_HABLFAa_InvOPA |
+ HC_HABLFAa_HABLFRA);
vmesa->regHABLRFCa = 0x0;
vmesa->regHABLRAa = 0x0;
}
@@ -1314,13 +1259,11 @@ static void viaChooseColorState(GLcontext *ctx)
vmesa->regEnable |= HC_HenAW_MASK;
else
vmesa->regEnable &= ~HC_HenAW_MASK;
-
- if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
}
static void viaChooseFogState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (ctx->Fog.Enabled) {
GLubyte r, g, b, a;
@@ -1345,7 +1288,7 @@ static void viaChooseFogState(GLcontext *ctx)
static void viaChooseDepthState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (ctx->Depth.Test) {
vmesa->regEnable |= HC_HenZT_MASK;
if (ctx->Depth.Mask)
@@ -1369,16 +1312,7 @@ static void viaChooseDepthState(GLcontext *ctx)
static void viaChooseLineState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
-
- if (ctx->Line.SmoothFlag) {
- vmesa->regEnable |= HC_HenAA_MASK;
- }
- else {
- if (!ctx->Polygon.SmoothFlag) {
- vmesa->regEnable &= ~HC_HenAA_MASK;
- }
- }
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (ctx->Line.StippleFlag) {
vmesa->regEnable |= HC_HenLP_MASK;
@@ -1392,18 +1326,7 @@ static void viaChooseLineState(GLcontext *ctx)
static void viaChoosePolygonState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
-
- /* KW: FIXME: this should be in viaRasterPrimitive (somehow)
- */
- if (ctx->Polygon.SmoothFlag) {
- vmesa->regEnable |= HC_HenAA_MASK;
- }
- else {
- if (!ctx->Line.SmoothFlag) {
- vmesa->regEnable &= ~HC_HenAA_MASK;
- }
- }
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (ctx->Polygon.StippleFlag) {
vmesa->regEnable |= HC_HenSP_MASK;
@@ -1422,8 +1345,7 @@ static void viaChoosePolygonState(GLcontext *ctx)
static void viaChooseStencilState(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
- if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
if (ctx->Stencil.Enabled) {
GLuint temp;
@@ -1503,23 +1425,14 @@ static void viaChooseStencilState(GLcontext *ctx)
else {
vmesa->regEnable &= ~HC_HenST_MASK;
}
- if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
}
static void viaChooseTriangle(GLcontext *ctx)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
- if (VIA_DEBUG) {
- fprintf(stderr, "%s - in\n", __FUNCTION__);
- fprintf(stderr, "GL_CULL_FACE = %x\n", GL_CULL_FACE);
- fprintf(stderr, "ctx->Polygon.CullFlag = %x\n", ctx->Polygon.CullFlag);
- fprintf(stderr, "GL_FRONT = %x\n", GL_FRONT);
- fprintf(stderr, "ctx->Polygon.CullFaceMode = %x\n", ctx->Polygon.CullFaceMode);
- fprintf(stderr, "GL_CCW = %x\n", GL_CCW);
- fprintf(stderr, "ctx->Polygon.FrontFace = %x\n", ctx->Polygon.FrontFace);
- }
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
+
if (ctx->Polygon.CullFlag == GL_TRUE) {
switch (ctx->Polygon.CullFaceMode) {
case GL_FRONT:
@@ -1538,13 +1451,12 @@ static void viaChooseTriangle(GLcontext *ctx)
return;
}
}
- if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
}
void viaValidateState( GLcontext *ctx )
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
-
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
+
if (vmesa->newState & _NEW_TEXTURE) {
GLboolean ok = (viaChooseTextureState(ctx) &&
viaUpdateTextureState(ctx));
@@ -1577,13 +1489,20 @@ void viaValidateState( GLcontext *ctx )
else
vmesa->regEnable &= ~HC_HenCS_MASK;
+ if (ctx->Point.SmoothFlag ||
+ ctx->Line.SmoothFlag ||
+ ctx->Polygon.SmoothFlag)
+ vmesa->regEnable |= HC_HenAA_MASK;
+ else
+ vmesa->regEnable &= ~HC_HenAA_MASK;
+
vmesa->newEmitState |= vmesa->newState;
vmesa->newState = 0;
}
static void viaInvalidateState(GLcontext *ctx, GLuint newState)
{
- viaContextPtr vmesa = VIA_CONTEXT(ctx);
+ struct via_context *vmesa = VIA_CONTEXT(ctx);
VIA_FINISH_PRIM( vmesa );
vmesa->newState |= newState;