Apply Eric's stencil wrap patch (Eric Anholt)
This commit is contained in:
parent
d09209f553
commit
cb1642a75c
|
@ -85,6 +85,14 @@ unsigned long time_sum=0;
|
|||
struct timeval tv_s1,tv_f1;
|
||||
#endif
|
||||
|
||||
static const char *const card_extensions[] =
|
||||
{
|
||||
"GL_ARB_multitexture",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_EXT_texture_env_add",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* this is first function called in dirver*/
|
||||
|
||||
static GLboolean
|
||||
|
@ -404,10 +412,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
|
|||
make_empty_list(&imesa->SwappedOut);
|
||||
}
|
||||
|
||||
imesa->hw_stencil = GL_FALSE;
|
||||
#if HW_STENCIL
|
||||
imesa->hw_stencil = mesaVis->stencilBits && mesaVis->depthBits == 24;
|
||||
#endif
|
||||
imesa->depth_scale = (imesa->savageScreen->zpp == 2) ?
|
||||
(1.0F/0x10000):(1.0F/0x1000000);
|
||||
|
||||
|
@ -457,7 +462,7 @@ savageCreateContext( const __GLcontextModes *mesaVis,
|
|||
if (savageDMAInit(imesa) == GL_FALSE)
|
||||
return GL_FALSE;
|
||||
|
||||
savageDDExtensionsInit( ctx );
|
||||
driInitExtensions( ctx, card_extensions, GL_TRUE );
|
||||
|
||||
savageDDInitStateFuncs( ctx );
|
||||
savageDDInitSpanFuncs( ctx );
|
||||
|
@ -518,11 +523,7 @@ savageCreateBuffer( __DRIscreenPrivate *driScrnPriv,
|
|||
return GL_FALSE; /* not implemented */
|
||||
}
|
||||
else {
|
||||
#if HW_STENCIL
|
||||
GLboolean swStencil = mesaVis->stencilBits > 0 && mesaVis->depthBits != 24;
|
||||
#else
|
||||
GLboolean swStencil = mesaVis->stencilBits > 0;
|
||||
#endif
|
||||
driDrawPriv->driverPrivate = (void *)
|
||||
_mesa_create_framebuffer(mesaVis,
|
||||
GL_FALSE, /* software depth buffer? */
|
||||
|
|
|
@ -59,7 +59,6 @@ typedef struct savage_texture_object_t *savageTextureObjectPtr;
|
|||
#define SAVAGE_FALLBACK_BLEND_EQ 0x200
|
||||
|
||||
|
||||
#define HW_STENCIL 1
|
||||
#define HW_CULL 1
|
||||
|
||||
/* for savagectx.new_state - manage GL->driver state changes
|
||||
|
|
|
@ -39,9 +39,6 @@
|
|||
#include "extensions.h"
|
||||
|
||||
|
||||
extern int xf86VTSema;
|
||||
|
||||
|
||||
/***************************************
|
||||
* Mesa's Driver Functions
|
||||
***************************************/
|
||||
|
@ -87,18 +84,6 @@ static void savageBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *heigh
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void savageDDExtensionsInit( GLcontext *ctx )
|
||||
{
|
||||
_mesa_enable_extension( ctx, "GL_ARB_multitexture" );
|
||||
_mesa_enable_extension( ctx, "GL_EXT_texture_lod_bias" );
|
||||
_mesa_enable_extension( ctx, "GL_EXT_texture_env_add" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void savageDDInitDriverFuncs( GLcontext *ctx )
|
||||
{
|
||||
ctx->Driver.GetBufferSize = savageBufferSize;
|
||||
|
|
|
@ -28,6 +28,5 @@
|
|||
|
||||
#include "context.h"
|
||||
|
||||
void savageDDExtensionsInit( GLcontext *ctx );
|
||||
void savageDDInitDriverFuncs( GLcontext *ctx );
|
||||
#endif
|
||||
|
|
|
@ -94,7 +94,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
|
||||
if ( pclear->flags & (SAVAGE_DEPTH |SAVAGE_STENCIL) ) {
|
||||
uint32_t writeMask = 0x0;
|
||||
#if HW_STENCIL
|
||||
if(imesa->hw_stencil)
|
||||
{
|
||||
if(pclear->flags & SAVAGE_STENCIL)
|
||||
|
@ -107,7 +106,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
writeMask |= 0x00FFFFFF;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if(imesa->IsFullScreen && imesa->NotFirstFrame &&
|
||||
imesa->savageScreen->chipset >= S3_SAVAGE4)
|
||||
{
|
||||
|
@ -122,7 +120,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
if(imesa->IsFullScreen)
|
||||
imesa->NotFirstFrame = GL_TRUE;
|
||||
|
||||
#if HW_STENCIL
|
||||
if(imesa->hw_stencil)
|
||||
{
|
||||
bciptr = savageDMAAlloc (imesa, 10);
|
||||
|
@ -133,7 +130,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
bciptr = savageDMAAlloc (imesa, 6);
|
||||
}
|
||||
|
@ -144,7 +140,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
WRITE_CMD((bciptr) , pclear->clear_depth,uint32_t);
|
||||
WRITE_CMD((bciptr) , (y <<16) | x,uint32_t);
|
||||
WRITE_CMD((bciptr) , (height << 16) | width,uint32_t);
|
||||
#if HW_STENCIL
|
||||
if(imesa->hw_stencil)
|
||||
{
|
||||
if(writeMask != 0xFFFFFFFF)
|
||||
|
@ -153,7 +148,6 @@ static void savage_BCI_clear(GLcontext *ctx, drm_savage_clear_t *pclear)
|
|||
WRITE_CMD((bciptr) , 0xFFFFFFFF,uint32_t);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
savageDMACommit (imesa, bciptr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -286,12 +286,10 @@ void savageDDInitSpanFuncs( GLcontext *ctx )
|
|||
swdd->WriteDepthSpan = savageWriteDepthSpan_8_24;
|
||||
swdd->ReadDepthPixels = savageReadDepthPixels_8_24;
|
||||
swdd->WriteDepthPixels = savageWriteDepthPixels_8_24;
|
||||
#if HW_STENCIL
|
||||
swdd->ReadStencilSpan = savageReadStencilSpan_8_24;
|
||||
swdd->WriteStencilSpan = savageWriteStencilSpan_8_24;
|
||||
swdd->ReadStencilPixels = savageReadStencilPixels_8_24;
|
||||
swdd->WriteStencilPixels = savageWriteStencilPixels_8_24;
|
||||
#endif
|
||||
break;
|
||||
|
||||
}
|
||||
|
|
|
@ -483,22 +483,14 @@ static void savageDDDepthFunc_s4(GLcontext *ctx, GLenum func)
|
|||
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
|
||||
}
|
||||
else if (imesa->glCtx->Stencil.Enabled &&
|
||||
!imesa->glCtx->DrawBuffer->UseSoftwareStencilBuffer)
|
||||
else if (imesa->glCtx->Stencil.Enabled && imesa->hw_stencil)
|
||||
{
|
||||
#define STENCIL (0x27)
|
||||
|
||||
/* by Jiayo, tempory disable HW stencil in 24 bpp */
|
||||
#if HW_STENCIL
|
||||
if(imesa->hw_stencil)
|
||||
{
|
||||
imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_FALSE;
|
||||
imesa->regs.s4.zWatermarks.ni.wLow = 8;
|
||||
}
|
||||
#endif /* end #if HW_STENCIL */
|
||||
/* Need to keep Z on for Stencil. */
|
||||
imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.flushPdZbufWrites = GL_FALSE;
|
||||
imesa->regs.s4.zWatermarks.ni.wLow = 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -988,165 +980,139 @@ static void savageDDFogfv(GLcontext *ctx, GLenum pname, const GLfloat *param)
|
|||
}
|
||||
|
||||
|
||||
#if HW_STENCIL
|
||||
static void savageStencilFunc(GLcontext *);
|
||||
|
||||
static void savageDDStencilFunc(GLcontext *ctx, GLenum func, GLint ref,
|
||||
GLuint mask)
|
||||
{
|
||||
savageStencilFunc(ctx);
|
||||
savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
|
||||
SCmpFunc a=0;
|
||||
|
||||
imesa->regs.s4.zBufCtrl.ni.stencilRefVal = ctx->Stencil.Ref[0];
|
||||
imesa->regs.s4.stencilCtrl.ni.readMask = ctx->Stencil.ValueMask[0];
|
||||
|
||||
switch (ctx->Stencil.Function[0])
|
||||
{
|
||||
case GL_NEVER: a = CF_Never; break;
|
||||
case GL_ALWAYS: a = CF_Always; break;
|
||||
case GL_LESS: a = CF_Less; break;
|
||||
case GL_LEQUAL: a = CF_LessEqual; break;
|
||||
case GL_EQUAL: a = CF_Equal; break;
|
||||
case GL_GREATER: a = CF_Greater; break;
|
||||
case GL_GEQUAL: a = CF_GreaterEqual; break;
|
||||
case GL_NOTEQUAL: a = CF_NotEqual; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
imesa->regs.s4.stencilCtrl.ni.cmpFunc = a;
|
||||
|
||||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
}
|
||||
|
||||
static void savageDDStencilMask(GLcontext *ctx, GLuint mask)
|
||||
{
|
||||
savageStencilFunc(ctx);
|
||||
savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
|
||||
|
||||
imesa->regs.s4.stencilCtrl.ni.writeMask = ctx->Stencil.WriteMask[0];
|
||||
|
||||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
}
|
||||
|
||||
static void savageDDStencilOp(GLcontext *ctx, GLenum fail, GLenum zfail,
|
||||
GLenum zpass)
|
||||
{
|
||||
savageStencilFunc(ctx);
|
||||
}
|
||||
|
||||
static void savageStencilFunc(GLcontext *ctx)
|
||||
{
|
||||
savageContextPtr imesa = SAVAGE_CONTEXT(ctx);
|
||||
SCmpFunc a=0;
|
||||
|
||||
if (ctx->Stencil.Enabled)
|
||||
|
||||
switch (ctx->Stencil.FailFunc[0])
|
||||
{
|
||||
imesa->regs.s4.stencilCtrl.ui = 0x0;
|
||||
|
||||
switch (ctx->Stencil.Function[0])
|
||||
{
|
||||
case GL_NEVER: a = CF_Never; break;
|
||||
case GL_ALWAYS: a = CF_Always; break;
|
||||
case GL_LESS: a = CF_Less; break;
|
||||
case GL_LEQUAL: a = CF_LessEqual; break;
|
||||
case GL_EQUAL: a = CF_Equal; break;
|
||||
case GL_GREATER: a = CF_Greater; break;
|
||||
case GL_GEQUAL: a = CF_GreaterEqual; break;
|
||||
case GL_NOTEQUAL: a = CF_NotEqual; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
imesa->regs.s4.stencilCtrl.ni.cmpFunc = a;
|
||||
imesa->regs.s4.stencilCtrl.ni.stencilEn = GL_TRUE;
|
||||
imesa->regs.s4.stencilCtrl.ni.readMask = ctx->Stencil.ValueMask[0];
|
||||
imesa->regs.s4.stencilCtrl.ni.writeMask = ctx->Stencil.WriteMask[0];
|
||||
|
||||
switch (ctx->Stencil.FailFunc[0])
|
||||
{
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Invert;
|
||||
break;
|
||||
#if GL_EXT_stencil_wrap
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Dec;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
switch (ctx->Stencil.ZFailFunc[0])
|
||||
{
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Invert;
|
||||
break;
|
||||
#if GL_EXT_stencil_wrap
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Dec;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
switch (ctx->Stencil.ZPassFunc[0])
|
||||
{
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Invert;
|
||||
break;
|
||||
#if GL_EXT_stencil_wrap
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Dec;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
imesa->regs.s4.zBufCtrl.ni.stencilRefVal = ctx->Stencil.Ref[0];
|
||||
|
||||
/*
|
||||
* force Z on, HW limitation
|
||||
*/
|
||||
|
||||
if (imesa->regs.s4.zBufCtrl.ni.zBufEn != GL_TRUE)
|
||||
{
|
||||
imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
|
||||
}
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Invert;
|
||||
break;
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Dec;
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
switch (ctx->Stencil.ZFailFunc[0])
|
||||
{
|
||||
imesa->regs.s4.stencilCtrl.ni.stencilEn = GL_FALSE;
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Invert;
|
||||
break;
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Dec;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (ctx->Stencil.ZPassFunc[0])
|
||||
{
|
||||
case GL_KEEP:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Keep;
|
||||
break;
|
||||
case GL_ZERO:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Zero;
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Equal;
|
||||
break;
|
||||
case GL_INCR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_IncClamp;
|
||||
break;
|
||||
case GL_DECR:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_DecClamp;
|
||||
break;
|
||||
case GL_INVERT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Invert;
|
||||
break;
|
||||
case GL_INCR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Inc;
|
||||
break;
|
||||
case GL_DECR_WRAP_EXT:
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Dec;
|
||||
break;
|
||||
}
|
||||
|
||||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
}
|
||||
#endif /* end #if HW_STENCIL */
|
||||
|
||||
|
||||
/* =============================================================
|
||||
*/
|
||||
|
||||
|
@ -1186,11 +1152,18 @@ static void savageDDEnable_s4(GLcontext *ctx, GLenum cap, GLboolean state)
|
|||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
if (!imesa->hw_stencil)
|
||||
FALLBACK (ctx, SAVAGE_FALLBACK_STENCIL, state);
|
||||
#if HW_STENCIL
|
||||
else
|
||||
imesa->regs.s4.stencilCtrl.ni.stencilEn =
|
||||
state ? GL_TRUE : GL_FALSE;
|
||||
#endif
|
||||
else {
|
||||
imesa->regs.s4.stencilCtrl.ni.stencilEn = state;
|
||||
if (ctx->Stencil.Enabled &&
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn != GL_TRUE)
|
||||
{
|
||||
/* Stencil buffer requires Z enabled. */
|
||||
imesa->regs.s4.zBufCtrl.ni.zCmpFunc = CF_Always;
|
||||
imesa->regs.s4.zBufCtrl.ni.zBufEn = GL_TRUE;
|
||||
imesa->regs.s4.drawLocalCtrl.ni.zUpdateEn = GL_FALSE;
|
||||
}
|
||||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
}
|
||||
break;
|
||||
case GL_FOG:
|
||||
imesa->dirty |= SAVAGE_UPLOAD_CTX;
|
||||
|
@ -1693,6 +1666,15 @@ static void savageDDInitState_s3d( savageContextPtr imesa )
|
|||
imesa->regs.s3d.zBufCtrl.ni.drawUpdateEn = GL_TRUE;
|
||||
imesa->regs.s3d.zBufCtrl.ni.wrZafterAlphaTst = GL_FALSE;
|
||||
imesa->regs.s3d.zBufCtrl.ni.zUpdateEn = GL_TRUE;
|
||||
imesa->regs.s4.zBufCtrl.ni.stencilRefVal = 0x00;
|
||||
|
||||
imesa->regs.s4.stencilCtrl.ni.stencilEn = GL_FALSE;
|
||||
imesa->regs.s4.stencilCtrl.ni.cmpFunc = CF_Always;
|
||||
imesa->regs.s4.stencilCtrl.ni.failOp = STC_FAIL_Keep;
|
||||
imesa->regs.s4.stencilCtrl.ni.passZfailOp = STC_FAIL_Keep;
|
||||
imesa->regs.s4.stencilCtrl.ni.passZpassOp = STC_FAIL_Keep;
|
||||
imesa->regs.s4.stencilCtrl.ni.writeMask = 0xff;
|
||||
imesa->regs.s4.stencilCtrl.ni.readMask = 0xff;
|
||||
|
||||
imesa->regs.s3d.drawCtrl.ni.srcAlphaMode = SAM_One;
|
||||
imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites = GL_TRUE;
|
||||
|
@ -1883,15 +1865,9 @@ void savageDDInitStateFuncs(GLcontext *ctx)
|
|||
ctx->Driver.ColorMask = savageDDColorMask_s4;
|
||||
ctx->Driver.ShadeModel = savageDDShadeModel_s4;
|
||||
ctx->Driver.LightModelfv = savageDDLightModelfv_s4;
|
||||
#if HW_STENCIL
|
||||
ctx->Driver.StencilFunc = savageDDStencilFunc;
|
||||
ctx->Driver.StencilMask = savageDDStencilMask;
|
||||
ctx->Driver.StencilOp = savageDDStencilOp;
|
||||
#else
|
||||
ctx->Driver.StencilFunc = 0;
|
||||
ctx->Driver.StencilMask = 0;
|
||||
ctx->Driver.StencilOp = 0;
|
||||
#endif /* end #if HW_STENCIL */
|
||||
} else {
|
||||
ctx->Driver.Enable = savageDDEnable_s3d;
|
||||
ctx->Driver.AlphaFunc = savageDDAlphaFunc_s3d;
|
||||
|
|
Loading…
Reference in New Issue