Browse Source

accomodate new frambuffer changes

tags/the_perfect_frag
Daniel Borca 20 years ago
parent
commit
0e26580c90
2 changed files with 32 additions and 28 deletions
  1. 20
    20
      src/mesa/drivers/glide/fxdd.c
  2. 12
    8
      src/mesa/drivers/glide/fxddspan.c

+ 20
- 20
src/mesa/drivers/glide/fxdd.c View File

@@ -159,9 +159,9 @@ static void fxDDClear( GLcontext *ctx,
GLint x, GLint y, GLint width, GLint height )
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
GLbitfield softwareMask = mask & (DD_ACCUM_BIT);
GLbitfield softwareMask = mask & (BUFFER_BIT_ACCUM);
const GLuint stencil_size = fxMesa->haveHwStencil ? ctx->Visual.stencilBits : 0;
const FxU32 clearD = (FxU32) (ctx->DepthMaxF * ctx->Depth.Clear);
const FxU32 clearD = (FxU32) (ctx->DrawBuffer->_DepthMaxF * ctx->Depth.Clear);
const FxU8 clearS = (FxU8) (ctx->Stencil.Clear & 0xff);

if ( TDFX_DEBUG & MESA_VERBOSE ) {
@@ -170,7 +170,7 @@ static void fxDDClear( GLcontext *ctx,
}

/* we can't clear accum buffers nor stereo */
mask &= ~(DD_ACCUM_BIT | DD_FRONT_RIGHT_BIT | DD_BACK_RIGHT_BIT);
mask &= ~(BUFFER_BIT_ACCUM | BUFFER_BIT_FRONT_RIGHT | BUFFER_BIT_BACK_RIGHT);

/* Need this check to respond to certain HW updates */
if (fxMesa->new_state & (FX_NEW_SCISSOR | FX_NEW_COLOR_MASK)) {
@@ -186,8 +186,8 @@ static void fxDDClear( GLcontext *ctx,
/* can only do color masking if running in 24/32bpp on Napalm */
if (ctx->Color.ColorMask[RCOMP] != ctx->Color.ColorMask[GCOMP] ||
ctx->Color.ColorMask[GCOMP] != ctx->Color.ColorMask[BCOMP]) {
softwareMask |= (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT));
mask &= ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT);
softwareMask |= (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT));
mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT);
}
}

@@ -198,7 +198,7 @@ static void fxDDClear( GLcontext *ctx,
* in the OGL state.
*/
BEGIN_BOARD_LOCK();
if (mask & DD_STENCIL_BIT) {
if (mask & BUFFER_BIT_STENCIL) {
fxMesa->Glide.grStencilMaskExt(fxMesa->unitsState.stencilWriteMask);
/* set stencil ref value = desired clear value */
fxMesa->Glide.grStencilFuncExt(GR_CMP_ALWAYS, clearS, 0xff);
@@ -210,9 +210,9 @@ static void fxDDClear( GLcontext *ctx,
grDisable(GR_STENCIL_MODE_EXT);
}
END_BOARD_LOCK();
} else if (mask & DD_STENCIL_BIT) {
softwareMask |= (mask & (DD_STENCIL_BIT));
mask &= ~(DD_STENCIL_BIT);
} else if (mask & BUFFER_BIT_STENCIL) {
softwareMask |= (mask & (BUFFER_BIT_STENCIL));
mask &= ~(BUFFER_BIT_STENCIL);
}

/*
@@ -225,8 +225,8 @@ static void fxDDClear( GLcontext *ctx,
* This could probably be done fancier but doing each possible case
* explicitly is less error prone.
*/
switch (mask & ~DD_STENCIL_BIT) {
case DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
switch (mask & ~BUFFER_BIT_STENCIL) {
case BUFFER_BIT_BACK_LEFT | BUFFER_BIT_DEPTH:
/* back buffer & depth */
grDepthMask(FXTRUE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
@@ -240,7 +240,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_FRONT_LEFT_BIT | DD_DEPTH_BIT:
case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_DEPTH:
/* XXX it appears that the depth buffer isn't cleared when
* glRenderBuffer(GR_BUFFER_FRONTBUFFER) is set.
* This is a work-around/
@@ -270,7 +270,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_BACK_LEFT_BIT:
case BUFFER_BIT_BACK_LEFT:
/* back buffer only */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
@@ -283,7 +283,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_FRONT_LEFT_BIT:
case BUFFER_BIT_FRONT_LEFT:
/* front buffer only */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
@@ -296,7 +296,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT:
case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT:
/* front and back */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
@@ -318,7 +318,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT | DD_DEPTH_BIT:
case BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT | BUFFER_BIT_DEPTH:
/* clear back and depth */
grDepthMask(FXTRUE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
@@ -342,7 +342,7 @@ static void fxDDClear( GLcontext *ctx,
fxMesa->clearA,
clearD);
break;
case DD_DEPTH_BIT:
case BUFFER_BIT_DEPTH:
/* just the depth buffer */
grDepthMask(FXTRUE);
fxDisableColor(fxMesa);
@@ -359,7 +359,7 @@ static void fxDDClear( GLcontext *ctx,
break;
default:
/* clear no color buffers or depth buffer but might clear stencil */
if ((stencil_size > 0) && (mask & DD_STENCIL_BIT)) {
if ((stencil_size > 0) && (mask & BUFFER_BIT_STENCIL)) {
/* XXX need this RenderBuffer call to work around Glide bug */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
@@ -1950,8 +1950,8 @@ fx_check_IsInHardware(GLcontext * ctx)
return FX_FALLBACK_STENCIL;
}

if (ctx->Color._DrawDestMask[0] != DD_FRONT_LEFT_BIT &&
ctx->Color._DrawDestMask[0] != DD_BACK_LEFT_BIT) {
if (ctx->DrawBuffer->_ColorDrawBufferMask[0] != BUFFER_BIT_FRONT_LEFT &&
ctx->DrawBuffer->_ColorDrawBufferMask[0] != BUFFER_BIT_BACK_LEFT) {
return FX_FALLBACK_DRAW_BUFFER;
}


+ 12
- 8
src/mesa/drivers/glide/fxddspan.c View File

@@ -331,6 +331,7 @@
* since OpenGL says obscured pixels have undefined values.
*/
static void fxReadRGBASpan_ARGB1555 (const GLcontext * ctx,
struct gl_renderbuffer *rb,
GLuint n,
GLint x, GLint y,
GLubyte rgba[][4])
@@ -378,6 +379,7 @@ static void fxReadRGBASpan_ARGB1555 (const GLcontext * ctx,
* since OpenGL says obscured pixels have undefined values.
*/
static void fxReadRGBASpan_RGB565 (const GLcontext * ctx,
struct gl_renderbuffer *rb,
GLuint n,
GLint x, GLint y,
GLubyte rgba[][4])
@@ -425,6 +427,7 @@ static void fxReadRGBASpan_RGB565 (const GLcontext * ctx,
* since OpenGL says obscured pixels have undefined values.
*/
static void fxReadRGBASpan_ARGB8888 (const GLcontext * ctx,
struct gl_renderbuffer *rb,
GLuint n,
GLint x, GLint y,
GLubyte rgba[][4])
@@ -445,7 +448,7 @@ static void fxReadRGBASpan_ARGB8888 (const GLcontext * ctx,
/************************************************************************/

static void
fxReadDepthSpan_Z16(GLcontext * ctx,
fxReadDepthSpan_Z16(GLcontext * ctx, struct gl_renderbuffer *rb,
GLuint n, GLint x, GLint y, GLdepth depth[])
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
@@ -465,7 +468,7 @@ fxReadDepthSpan_Z16(GLcontext * ctx,


static void
fxReadDepthSpan_Z24(GLcontext * ctx,
fxReadDepthSpan_Z24(GLcontext * ctx, struct gl_renderbuffer *rb,
GLuint n, GLint x, GLint y, GLdepth depth[])
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
@@ -488,7 +491,8 @@ fxReadDepthSpan_Z24(GLcontext * ctx,
/************************************************************************/

static void
fxWriteStencilSpan (GLcontext *ctx, GLuint n, GLint x, GLint y,
fxWriteStencilSpan (GLcontext *ctx, struct gl_renderbuffer *rb,
GLuint n, GLint x, GLint y,
const GLstencil stencil[], const GLubyte mask[])
{
/*
@@ -497,7 +501,7 @@ fxWriteStencilSpan (GLcontext *ctx, GLuint n, GLint x, GLint y,
}

static void
fxReadStencilSpan(GLcontext * ctx,
fxReadStencilSpan(GLcontext * ctx, struct gl_renderbuffer *rb,
GLuint n, GLint x, GLint y, GLstencil stencil[])
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
@@ -516,7 +520,7 @@ fxReadStencilSpan(GLcontext * ctx,
}

static void
fxWriteStencilPixels (GLcontext *ctx, GLuint n,
fxWriteStencilPixels (GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n,
const GLint x[], const GLint y[],
const GLstencil stencil[],
const GLubyte mask[])
@@ -527,7 +531,7 @@ fxWriteStencilPixels (GLcontext *ctx, GLuint n,
}

static void
fxReadStencilPixels (GLcontext *ctx, GLuint n,
fxReadStencilPixels (GLcontext *ctx, struct gl_renderbuffer *rb, GLuint n,
const GLint x[], const GLint y[],
GLstencil stencil[])
{
@@ -553,11 +557,11 @@ fxDDSetBuffer(GLcontext * ctx, GLframebuffer * buffer, GLuint bufferBit)
fprintf(stderr, "fxDDSetBuffer(%x)\n", (int)bufferBit);
}

if (bufferBit == DD_FRONT_LEFT_BIT) {
if (bufferBit == BUFFER_BIT_FRONT_LEFT) {
fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
grRenderBuffer(fxMesa->currentFB);
}
else if (bufferBit == DD_BACK_LEFT_BIT) {
else if (bufferBit == BUFFER_BIT_BACK_LEFT) {
fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
grRenderBuffer(fxMesa->currentFB);
}

Loading…
Cancel
Save