X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi810%2Fi810state.c;h=1e7a6cfe471b073aacc8e4a09f59af7a7cc826da;hb=3d83a709b94e72608a061449bc30edc8af7c9ecc;hp=42df2e8b9ee5efe2be7ba2a7dd8c087b4b8642f8;hpb=65a66f5bc37383c00423c21baf8ba9d6771e0259;p=mesa.git diff --git a/src/mesa/drivers/dri/i810/i810state.c b/src/mesa/drivers/dri/i810/i810state.c index 42df2e8b9ee..1e7a6cfe471 100644 --- a/src/mesa/drivers/dri/i810/i810state.c +++ b/src/mesa/drivers/dri/i810/i810state.c @@ -1,14 +1,16 @@ -/* $XFree86: xc/lib/GL/mesa/src/drv/i810/i810state.c,v 1.9 2002/10/30 12:51:33 alanh Exp $ */ #include -#include "glheader.h" -#include "buffers.h" -#include "context.h" -#include "macros.h" -#include "enums.h" -#include "dd.h" -#include "colormac.h" +#include "main/glheader.h" +#include "main/context.h" +#include "main/macros.h" +#include "main/dd.h" +#include "main/colormac.h" +#include "swrast/swrast.h" +#include "tnl/tnl.h" +#include "tnl/t_pipeline.h" +#include "vbo/vbo.h" +#include "swrast_setup/swrast_setup.h" #include "texmem.h" @@ -22,14 +24,8 @@ #include "i810tris.h" #include "i810ioctl.h" -#include "swrast/swrast.h" -#include "array_cache/acache.h" -#include "tnl/tnl.h" -#include "swrast_setup/swrast_setup.h" - -#include "tnl/t_pipeline.h" -static __inline__ GLuint i810PackColor(GLuint format, +static INLINE GLuint i810PackColor(GLuint format, GLubyte r, GLubyte g, GLubyte b, GLubyte a) { @@ -103,14 +99,23 @@ static void i810BlendFuncSeparate( GLcontext *ctx, GLenum sfactorRGB, switch (ctx->Color.BlendSrcRGB) { case GL_ZERO: a |= SDM_SRC_ZERO; break; - case GL_SRC_ALPHA: a |= SDM_SRC_SRC_ALPHA; break; case GL_ONE: a |= SDM_SRC_ONE; break; - case GL_DST_COLOR: a |= SDM_SRC_DST_COLOR; break; - case GL_ONE_MINUS_DST_COLOR: a |= SDM_SRC_INV_DST_COLOR; break; + case GL_SRC_COLOR: a |= SDM_SRC_SRC_COLOR; break; + case GL_ONE_MINUS_SRC_COLOR: a |= SDM_SRC_INV_SRC_COLOR; break; + case GL_SRC_ALPHA: a |= SDM_SRC_SRC_ALPHA; break; case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_SRC_INV_SRC_ALPHA; break; case GL_DST_ALPHA: a |= SDM_SRC_ONE; break; case GL_ONE_MINUS_DST_ALPHA: a |= SDM_SRC_ZERO; break; - case GL_SRC_ALPHA_SATURATE: /*a |= SDM_SRC_SRC_ALPHA; break;*/ + case GL_DST_COLOR: a |= SDM_SRC_DST_COLOR; break; + case GL_ONE_MINUS_DST_COLOR: a |= SDM_SRC_INV_DST_COLOR; break; + + /* (f, f, f, 1), f = min(As, 1 - Ad) = min(As, 1 - 1) = 0 + * So (f, f, f, 1) = (0, 0, 0, 1). Since there is no destination alpha and + * the only supported alpha operation is GL_FUNC_ADD, the result modulating + * the source alpha with the alpha factor is largely irrelevant. + */ + case GL_SRC_ALPHA_SATURATE: a |= SDM_SRC_ZERO; break; + case GL_CONSTANT_COLOR: case GL_ONE_MINUS_CONSTANT_COLOR: case GL_CONSTANT_ALPHA: @@ -122,14 +127,17 @@ static void i810BlendFuncSeparate( GLcontext *ctx, GLenum sfactorRGB, } switch (ctx->Color.BlendDstRGB) { - case GL_SRC_ALPHA: a |= SDM_DST_SRC_ALPHA; break; - case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_DST_INV_SRC_ALPHA; break; case GL_ZERO: a |= SDM_DST_ZERO; break; case GL_ONE: a |= SDM_DST_ONE; break; case GL_SRC_COLOR: a |= SDM_DST_SRC_COLOR; break; case GL_ONE_MINUS_SRC_COLOR: a |= SDM_DST_INV_SRC_COLOR; break; + case GL_SRC_ALPHA: a |= SDM_DST_SRC_ALPHA; break; + case GL_ONE_MINUS_SRC_ALPHA: a |= SDM_DST_INV_SRC_ALPHA; break; case GL_DST_ALPHA: a |= SDM_DST_ONE; break; case GL_ONE_MINUS_DST_ALPHA: a |= SDM_DST_ZERO; break; + case GL_DST_COLOR: a |= SDM_DST_DST_COLOR; break; + case GL_ONE_MINUS_DST_COLOR: a |= SDM_DST_INV_DST_COLOR; break; + case GL_CONSTANT_COLOR: case GL_ONE_MINUS_CONSTANT_COLOR: case GL_CONSTANT_ALPHA: @@ -282,18 +290,20 @@ void i810DrawBuffer(GLcontext *ctx, GLenum mode ) i810ContextPtr imesa = I810_CONTEXT(ctx); int front = 0; - /* - * _DrawDestMask is easier to cope with than . - */ - switch ( ctx->Color._DrawDestMask[0] ) { - case DD_FRONT_LEFT_BIT: + if (ctx->DrawBuffer->_NumColorDrawBuffers != 1) { + /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */ + FALLBACK( imesa, I810_FALLBACK_DRAW_BUFFER, GL_TRUE ); + return; + } + + switch ( ctx->DrawBuffer->_ColorDrawBufferIndexes[0]) { + case BUFFER_FRONT_LEFT: front = 1; break; - case DD_BACK_LEFT_BIT: + case BUFFER_BACK_LEFT: front = 0; break; default: - /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */ FALLBACK( imesa, I810_FALLBACK_DRAW_BUFFER, GL_TRUE ); return; } @@ -317,11 +327,6 @@ void i810DrawBuffer(GLcontext *ctx, GLenum mode ) imesa->i810Screen->backPitchBits); i810XMesaSetBackClipRects( imesa ); } - - /* We want to update the s/w rast state too so that r200SetBuffer() - * gets called. - */ - _swrast_DrawBuffer(ctx, mode); } @@ -375,7 +380,10 @@ static void i810CullFaceFrontFace(GLcontext *ctx, GLenum unused) static void i810LineWidth( GLcontext *ctx, GLfloat widthf ) { i810ContextPtr imesa = I810_CONTEXT( ctx ); - int width = (int)ctx->Line._Width; + /* AA, non-AA limits are same */ + const int width = (int) CLAMP(ctx->Line.Width, + ctx->Const.MinLineWidth, + ctx->Const.MaxLineWidth); imesa->LcsLineWidth = 0; if (width & 1) imesa->LcsLineWidth |= LCS_LINEWIDTH_1_0; @@ -391,7 +399,10 @@ static void i810LineWidth( GLcontext *ctx, GLfloat widthf ) static void i810PointSize( GLcontext *ctx, GLfloat sz ) { i810ContextPtr imesa = I810_CONTEXT( ctx ); - int size = (int)ctx->Point._Size; + /* AA, non-AA limits are same */ + const int size = (int) CLAMP(ctx->Point.Size, + ctx->Const.MinPointSize, + ctx->Const.MaxPointSize); imesa->LcsPointSize = 0; if (size & 1) imesa->LcsPointSize |= LCS_LINEWIDTH_1_0; @@ -592,6 +603,7 @@ static void i810Enable(GLcontext *ctx, GLenum cap, GLboolean state) imesa->Setup[I810_CTXREG_LCS] |= LCS_CULL_DISABLE; break; case GL_TEXTURE_2D: + case GL_TEXTURE_RECTANGLE_NV: I810_STATECHANGE(imesa, I810_UPLOAD_CTX); if (ctx->Texture.CurrentUnit == 0) { imesa->Setup[I810_CTXREG_MT] &= ~MT_TEXEL0_ENABLE; @@ -683,8 +695,6 @@ static void i810Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ) { - /* update size of Mesa/software ancillary buffers */ - _mesa_ResizeBuffersMESA(); i810CalcViewport( ctx ); } @@ -734,13 +744,13 @@ void i810InitState( GLcontext *ctx ) MC_UPDATE_DEST | MC_DEST_CURRENT | MC_UPDATE_ARG1 | - MC_ARG1_ITERATED_COLOR | - MC_ARG1_DONT_REPLICATE_ALPHA | - MC_ARG1_DONT_INVERT | + ((MC_ARG_ITERATED_COLOR | + MC_ARG_DONT_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) | MC_UPDATE_ARG2 | - MC_ARG2_ONE | - MC_ARG2_DONT_REPLICATE_ALPHA | - MC_ARG2_DONT_INVERT | + ((MC_ARG_ONE | + MC_ARG_DONT_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) | MC_UPDATE_OP | MC_OP_ARG1 ); @@ -749,13 +759,13 @@ void i810InitState( GLcontext *ctx ) MC_UPDATE_DEST | MC_DEST_CURRENT | MC_UPDATE_ARG1 | - MC_ARG1_ONE | - MC_ARG1_DONT_REPLICATE_ALPHA | - MC_ARG1_DONT_INVERT | + ((MC_ARG_ONE | + MC_ARG_DONT_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) | MC_UPDATE_ARG2 | - MC_ARG2_ONE | - MC_ARG2_DONT_REPLICATE_ALPHA | - MC_ARG2_DONT_INVERT | + ((MC_ARG_ONE | + MC_ARG_DONT_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) | MC_UPDATE_OP | MC_OP_DISABLE ); @@ -765,13 +775,13 @@ void i810InitState( GLcontext *ctx ) MC_UPDATE_DEST | MC_DEST_CURRENT | MC_UPDATE_ARG1 | - MC_ARG1_CURRENT_COLOR | - MC_ARG1_REPLICATE_ALPHA | - MC_ARG1_DONT_INVERT | + ((MC_ARG_CURRENT_COLOR | + MC_ARG_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG1_SHIFT) | MC_UPDATE_ARG2 | - MC_ARG2_ONE | - MC_ARG2_DONT_REPLICATE_ALPHA | - MC_ARG2_DONT_INVERT | + ((MC_ARG_ONE | + MC_ARG_DONT_REPLICATE_ALPHA | + MC_ARG_DONT_INVERT) << MC_ARG2_SHIFT) | MC_UPDATE_OP | MC_OP_DISABLE ); @@ -779,11 +789,11 @@ void i810InitState( GLcontext *ctx ) imesa->Setup[I810_CTXREG_MA0] = ( GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_0 | MA_UPDATE_ARG1 | - MA_ARG1_ITERATED_ALPHA | - MA_ARG1_DONT_INVERT | + ((MA_ARG_ITERATED_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) | MA_UPDATE_ARG2 | - MA_ARG2_CURRENT_ALPHA | - MA_ARG2_DONT_INVERT | + ((MA_ARG_CURRENT_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) | MA_UPDATE_OP | MA_OP_ARG1 ); @@ -791,11 +801,11 @@ void i810InitState( GLcontext *ctx ) imesa->Setup[I810_CTXREG_MA1] = ( GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_1 | MA_UPDATE_ARG1 | - MA_ARG1_CURRENT_ALPHA | - MA_ARG1_DONT_INVERT | + ((MA_ARG_CURRENT_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) | MA_UPDATE_ARG2 | - MA_ARG2_CURRENT_ALPHA | - MA_ARG2_DONT_INVERT | + ((MA_ARG_CURRENT_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) | MA_UPDATE_OP | MA_OP_ARG1 ); @@ -803,11 +813,11 @@ void i810InitState( GLcontext *ctx ) imesa->Setup[I810_CTXREG_MA2] = ( GFX_OP_MAP_ALPHA_STAGES | MA_STAGE_2 | MA_UPDATE_ARG1 | - MA_ARG1_CURRENT_ALPHA | - MA_ARG1_DONT_INVERT | + ((MA_ARG_CURRENT_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG1_SHIFT) | MA_UPDATE_ARG2 | - MA_ARG2_CURRENT_ALPHA | - MA_ARG2_DONT_INVERT | + ((MA_ARG_CURRENT_ALPHA | + MA_ARG_DONT_INVERT) << MA_ARG2_SHIFT) | MA_UPDATE_OP | MA_OP_ARG1 ); @@ -927,14 +937,10 @@ void i810InitState( GLcontext *ctx ) if (imesa->glCtx->Visual.doubleBufferMode && imesa->sarea->pf_current_page == 0) { /* use back buffer by default */ - imesa->drawMap = i810Screen->back.map; - imesa->readMap = i810Screen->back.map; imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->backOffset | i810Screen->backPitchBits); } else { /* use front buffer by default */ - imesa->drawMap = (char *)imesa->driScreen->pFB; - imesa->readMap = (char *)imesa->driScreen->pFB; imesa->BufferSetup[I810_DESTREG_DI1] = (i810Screen->fbOffset | i810Screen->backPitchBits); } @@ -953,7 +959,7 @@ static void i810InvalidateState( GLcontext *ctx, GLuint new_state ) { _swrast_InvalidateState( ctx, new_state ); _swsetup_InvalidateState( ctx, new_state ); - _ac_InvalidateState( ctx, new_state ); + _vbo_InvalidateState( ctx, new_state ); _tnl_InvalidateState( ctx, new_state ); I810_CONTEXT(ctx)->new_state |= new_state; } @@ -995,19 +1001,4 @@ void i810InitStateFuncs(GLcontext *ctx) } else { ctx->Driver.LightModelfv = i810LightModelfv; } - - /* Pixel path fallbacks. - */ - ctx->Driver.Accum = _swrast_Accum; - ctx->Driver.Bitmap = _swrast_Bitmap; - ctx->Driver.CopyPixels = _swrast_CopyPixels; - ctx->Driver.DrawPixels = _swrast_DrawPixels; - ctx->Driver.ReadPixels = _swrast_ReadPixels; - - /* Swrast hooks for imaging extensions: - */ - ctx->Driver.CopyColorTable = _swrast_CopyColorTable; - ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable; - ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D; - ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D; }