#if defined(FX)
-#include "image.h"
-#include "mtypes.h"
+#include "main/image.h"
+#include "main/mtypes.h"
#include "fxdrv.h"
-#include "buffers.h"
-#include "enums.h"
-#include "extensions.h"
-#include "macros.h"
-#include "texstore.h"
-#include "teximage.h"
+#include "main/buffers.h"
+#include "main/enums.h"
+#include "main/extensions.h"
+#include "main/macros.h"
+#include "main/texstore.h"
+#include "main/teximage.h"
#include "swrast/swrast.h"
#include "swrast/s_context.h"
#include "swrast_setup/swrast_setup.h"
#include "tnl/tnl.h"
#include "tnl/t_context.h"
#include "tnl/t_pipeline.h"
-#include "array_cache/acache.h"
+#include "vbo/vbo.h"
}
+/**
+ * We only implement this function as a mechanism to check if the
+ * framebuffer size has changed (and update corresponding state).
+ */
static void
fxDDViewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h)
{
- /* poll for window size change and realloc software Z/stencil/etc if needed */
- _mesa_ResizeBuffersMESA();
+ GLuint newWidth, newHeight;
+ GLframebuffer *buffer = ctx->WinSysDrawBuffer;
+ fxDDGetBufferSize( buffer, &newWidth, &newHeight );
+ if (buffer->Width != newWidth || buffer->Height != newHeight) {
+ _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight );
+ }
}
/* Clear the color and/or depth buffers */
-static void fxDDClear( GLcontext *ctx,
- GLbitfield mask, GLboolean all,
- GLint x, GLint y, GLint width, GLint height )
+static void fxDDClear( GLcontext *ctx, GLbitfield mask )
{
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 ) {
- fprintf( stderr, "fxDDClear( %d, %d, %d, %d )\n",
- (int) x, (int) y, (int) width, (int) height );
+ fprintf( stderr, "fxDDClear\n");
}
/* 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)) {
/* 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);
}
}
* 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);
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);
}
/*
* 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);
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/
fxMesa->clearA,
clearD);
break;
- case DD_BACK_LEFT_BIT:
+ case BUFFER_BIT_BACK_LEFT:
/* back buffer only */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_BACKBUFFER);
fxMesa->clearA,
clearD);
break;
- case DD_FRONT_LEFT_BIT:
+ case BUFFER_BIT_FRONT_LEFT:
/* front buffer only */
grDepthMask(FXFALSE);
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
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);
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);
fxMesa->clearA,
clearD);
break;
- case DD_DEPTH_BIT:
+ case BUFFER_BIT_DEPTH:
/* just the depth buffer */
grDepthMask(FXTRUE);
fxDisableColor(fxMesa);
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);
grRenderBuffer(fxMesa->currentFB);
if (softwareMask)
- _swrast_Clear( ctx, softwareMask, all, x, y, width, height );
+ _swrast_Clear( ctx, softwareMask );
}
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
MASKING_BIT |
- ALPHABUF_BIT | /* nope! see 565 span kludge */
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
/*MASKING_BIT |*/ /* masking ok, we're in 32bpp */
- /*ALPHABUF_BIT |*//* alpha ok, we're in 32bpp */
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
MASKING_BIT |
- ALPHABUF_BIT |
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
FRAGPROG_BIT)) ||
fxMesa->fallback)
{
- _swrast_DrawPixels( ctx, x, y, width, height, format, type,
+ _swrast_DrawPixels( ctx, x, y, width, height, format, type,
unpack, pixels );
- return;
+ return;
}
/* make sure the pixelpipe is configured correctly */
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
MASKING_BIT |
- ALPHABUF_BIT |
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
FRAGPROG_BIT)) ||
fxMesa->fallback)
{
- _swrast_DrawPixels( ctx, x, y, width, height, format, type,
+ _swrast_DrawPixels( ctx, x, y, width, height, format, type,
unpack, pixels );
- return;
+ return;
}
/* make sure the pixelpipe is configured correctly */
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
MASKING_BIT |
- ALPHABUF_BIT |
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
FRAGPROG_BIT)) ||
fxMesa->fallback)
{
- _swrast_DrawPixels( ctx, x, y, width, height, format, type,
+ _swrast_DrawPixels( ctx, x, y, width, height, format, type,
unpack, pixels );
- return;
+ return;
}
/* make sure the pixelpipe is configured correctly */
/*CLIP_BIT |*/ /* clipping ok, below */
STENCIL_BIT |
/*MASKING_BIT |*/ /* masking ok, we're in 32bpp */
- /*ALPHABUF_BIT |*//* alpha ok, we're in 32bpp */
MULTI_DRAW_BIT |
OCCLUSION_BIT | /* nope! at least not yet */
TEXTURE_BIT |
FRAGPROG_BIT)) ||
fxMesa->fallback)
{
- _swrast_DrawPixels( ctx, x, y, width, height, format, type,
+ _swrast_DrawPixels( ctx, x, y, width, height, format, type,
unpack, pixels );
- return;
+ return;
}
/* make sure the pixelpipe is configured correctly */
int
fxDDInitFxMesaContext(fxMesaContext fxMesa)
{
- int i;
GLcontext *ctx = fxMesa->glCtx;
FX_setupGrVertexLayout();
ctx->Const.MaxTextureCoordUnits =
ctx->Const.MaxTextureImageUnits = fxMesa->haveTwoTMUs ? 2 : 1;
ctx->Const.MaxTextureUnits = MAX2(ctx->Const.MaxTextureImageUnits, ctx->Const.MaxTextureCoordUnits);
-
+
fxMesa->new_state = _NEW_ALL;
if (!fxMesa->haveHwStencil) {
/* don't touch stencil if there is none */
/* Initialize the software rasterizer and helper modules.
*/
_swrast_CreateContext(ctx);
- _ac_CreateContext(ctx);
+ _vbo_CreateContext(ctx);
_tnl_CreateContext(ctx);
_swsetup_CreateContext(ctx);
{
_swsetup_DestroyContext(fxMesa->glCtx);
_tnl_DestroyContext(fxMesa->glCtx);
- _ac_DestroyContext(fxMesa->glCtx);
+ _vbo_DestroyContext(fxMesa->glCtx);
_swrast_DestroyContext(fxMesa->glCtx);
if (fxMesa->state)
_mesa_enable_extension(ctx, "GL_EXT_blend_func_separate");
_mesa_enable_extension(ctx, "GL_EXT_texture_env_add");
_mesa_enable_extension(ctx, "GL_EXT_stencil_wrap");
+ _mesa_enable_extension(ctx, "GL_EXT_stencil_two_side");
if (fxMesa->haveTwoTMUs) {
_mesa_enable_extension(ctx, "GL_ARB_multitexture");
return FX_FALLBACK_STENCIL;
}
- if (ctx->Color._DrawDestMask[0] != DD_FRONT_LEFT_BIT &&
- ctx->Color._DrawDestMask[0] != DD_BACK_LEFT_BIT) {
+ if ((ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_FRONT_LEFT) &&
+ (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] != BUFFER_BIT_BACK_LEFT)) {
return FX_FALLBACK_DRAW_BUFFER;
}
static void
fxDDUpdateDDPointers(GLcontext * ctx, GLuint new_state)
{
- /* TNLcontext *tnl = TNL_CONTEXT(ctx);*/
+ /* TNLcontext *tnl = TNL_CONTEXT(ctx); */
fxMesaContext fxMesa = FX_CONTEXT(ctx);
if (TDFX_DEBUG & VERBOSE_DRIVER) {
}
_swrast_InvalidateState(ctx, new_state);
- _ac_InvalidateState(ctx, new_state);
+ _vbo_InvalidateState(ctx, new_state);
_tnl_InvalidateState(ctx, new_state);
_swsetup_InvalidateState(ctx, new_state);
fxSetupDDPointers(GLcontext * ctx)
{
fxMesaContext fxMesa = FX_CONTEXT(ctx);
- TNLcontext *tnl = TNL_CONTEXT(ctx);
+ /* TNLcontext *tnl = TNL_CONTEXT(ctx); */
if (TDFX_DEBUG & VERBOSE_DRIVER) {
fprintf(stderr, "fxSetupDDPointers()\n");
ctx->Driver.ShadeModel = fxDDShadeModel;
ctx->Driver.Enable = fxDDEnable;
if (fxMesa->haveHwStencil) {
- ctx->Driver.StencilFunc = fxDDStencilFunc;
- ctx->Driver.StencilMask = fxDDStencilMask;
- ctx->Driver.StencilOp = fxDDStencilOp;
+ ctx->Driver.StencilFuncSeparate = fxDDStencilFuncSeparate;
+ ctx->Driver.StencilMaskSeparate = fxDDStencilMaskSeparate;
+ ctx->Driver.StencilOpSeparate = fxDDStencilOpSeparate;
}
fxSetupDDSpanPointers(ctx);