diff options
Diffstat (limited to 'nx-X11/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c')
-rw-r--r-- | nx-X11/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c | 853 |
1 files changed, 0 insertions, 853 deletions
diff --git a/nx-X11/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c b/nx-X11/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c deleted file mode 100644 index db58e9090..000000000 --- a/nx-X11/extras/Mesa/src/mesa/drivers/dri/sis/sis_state.c +++ /dev/null @@ -1,853 +0,0 @@ -/************************************************************************** - -Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan. -Copyright 2003 Eric Anholt -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -on the rights to use, copy, modify, merge, publish, distribute, sub -license, and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - -**************************************************************************/ -/* $XFree86: xc/lib/GL/mesa/src/drv/sis/sis_ctx.c,v 1.3 2000/09/26 15:56:48 tsi Exp $ */ - -/* - * Authors: - * Sung-Ching Lin <sclin@sis.com.tw> - * Eric Anholt <anholt@FreeBSD.org> - */ - -#include "sis_context.h" -#include "sis_state.h" -#include "sis_tris.h" -#include "sis_lock.h" -#include "sis_tex.h" - -#include "context.h" -#include "buffers.h" -#include "enums.h" -#include "colormac.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" - -/* ============================================================= - * Alpha blending - */ - -static void -sisDDAlphaFunc( GLcontext * ctx, GLenum func, GLfloat ref ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - GLubyte refbyte; - - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - CLAMPED_FLOAT_TO_UBYTE(refbyte, ref); - current->hwAlpha = refbyte << 16; - - /* Alpha Test function */ - switch (func) - { - case GL_NEVER: - current->hwAlpha |= SiS_ALPHA_NEVER; - break; - case GL_LESS: - current->hwAlpha |= SiS_ALPHA_LESS; - break; - case GL_EQUAL: - current->hwAlpha |= SiS_ALPHA_EQUAL; - break; - case GL_LEQUAL: - current->hwAlpha |= SiS_ALPHA_LEQUAL; - break; - case GL_GREATER: - current->hwAlpha |= SiS_ALPHA_GREATER; - break; - case GL_NOTEQUAL: - current->hwAlpha |= SiS_ALPHA_NOTEQUAL; - break; - case GL_GEQUAL: - current->hwAlpha |= SiS_ALPHA_GEQUAL; - break; - case GL_ALWAYS: - current->hwAlpha |= SiS_ALPHA_ALWAYS; - break; - } - - prev->hwAlpha = current->hwAlpha; - smesa->GlobalFlag |= GFLAG_ALPHASETTING; -} - -static void -sisDDBlendFuncSeparate( GLcontext *ctx, - GLenum sfactorRGB, GLenum dfactorRGB, - GLenum sfactorA, GLenum dfactorA ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - current->hwDstSrcBlend = 0; - - switch (dfactorRGB) - { - case GL_ZERO: - current->hwDstSrcBlend |= SiS_D_ZERO; - break; - case GL_ONE: - current->hwDstSrcBlend |= SiS_D_ONE; - break; - case GL_SRC_COLOR: - current->hwDstSrcBlend |= SiS_D_SRC_COLOR; - break; - case GL_ONE_MINUS_SRC_COLOR: - current->hwDstSrcBlend |= SiS_D_ONE_MINUS_SRC_COLOR; - break; - case GL_SRC_ALPHA: - current->hwDstSrcBlend |= SiS_D_SRC_ALPHA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - current->hwDstSrcBlend |= SiS_D_ONE_MINUS_SRC_ALPHA; - break; - case GL_DST_COLOR: - current->hwDstSrcBlend |= SiS_D_DST_COLOR; - break; - case GL_ONE_MINUS_DST_COLOR: - current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_COLOR; - break; - case GL_DST_ALPHA: - current->hwDstSrcBlend |= SiS_D_DST_ALPHA; - break; - case GL_ONE_MINUS_DST_ALPHA: - current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_ALPHA; - break; - default: - fprintf(stderr, "Unknown dst blend function 0x%x\n", dfactorRGB); - break; - } - - switch (sfactorRGB) - { - case GL_ZERO: - current->hwDstSrcBlend |= SiS_S_ZERO; - break; - case GL_ONE: - current->hwDstSrcBlend |= SiS_S_ONE; - break; - case GL_SRC_COLOR: - current->hwDstSrcBlend |= SiS_S_SRC_COLOR; - break; - case GL_ONE_MINUS_SRC_COLOR: - current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_COLOR; - break; - case GL_SRC_ALPHA: - current->hwDstSrcBlend |= SiS_S_SRC_ALPHA; - break; - case GL_ONE_MINUS_SRC_ALPHA: - current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_ALPHA; - break; - case GL_DST_COLOR: - current->hwDstSrcBlend |= SiS_S_DST_COLOR; - break; - case GL_ONE_MINUS_DST_COLOR: - current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_COLOR; - break; - case GL_DST_ALPHA: - current->hwDstSrcBlend |= SiS_S_DST_ALPHA; - break; - case GL_ONE_MINUS_DST_ALPHA: - current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_ALPHA; - break; - case GL_SRC_ALPHA_SATURATE: - current->hwDstSrcBlend |= SiS_S_SRC_ALPHA_SATURATE; - break; - default: - fprintf(stderr, "Unknown src blend function 0x%x\n", sfactorRGB); - break; - } - - if (current->hwDstSrcBlend != prev->hwDstSrcBlend) { - prev->hwDstSrcBlend = current->hwDstSrcBlend; - smesa->GlobalFlag |= GFLAG_DSTBLEND; - } -} - -/* ============================================================= - * Depth testing - */ - -static void -sisDDDepthFunc( GLcontext * ctx, GLenum func ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - current->hwZ &= ~MASK_ZTestMode; - switch (func) - { - case GL_LESS: - current->hwZ |= SiS_Z_COMP_S_LT_B; - break; - case GL_GEQUAL: - current->hwZ |= SiS_Z_COMP_S_GE_B; - break; - case GL_LEQUAL: - current->hwZ |= SiS_Z_COMP_S_LE_B; - break; - case GL_GREATER: - current->hwZ |= SiS_Z_COMP_S_GT_B; - break; - case GL_NOTEQUAL: - current->hwZ |= SiS_Z_COMP_S_NE_B; - break; - case GL_EQUAL: - current->hwZ |= SiS_Z_COMP_S_EQ_B; - break; - case GL_ALWAYS: - current->hwZ |= SiS_Z_COMP_ALWAYS; - break; - case GL_NEVER: - current->hwZ |= SiS_Z_COMP_NEVER; - break; - } - - if (current->hwZ != prev->hwZ) { - prev->hwZ = current->hwZ; - smesa->GlobalFlag |= GFLAG_ZSETTING; - } -} - -void -sisDDDepthMask( GLcontext * ctx, GLboolean flag ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - if (!ctx->Depth.Test) - flag = GL_FALSE; - - if (ctx->Visual.stencilBits) { - if (flag || (ctx->Stencil.WriteMask[0] != 0)) { - current->hwCapEnable |= MASK_ZWriteEnable; - if (flag && (ctx->Stencil.WriteMask[0] == 0xff)) { - current->hwCapEnable2 &= ~MASK_ZMaskWriteEnable; - } else { - current->hwCapEnable2 |= MASK_ZMaskWriteEnable; - current->hwZMask = (ctx->Stencil.WriteMask[0] << 24) | - ((flag) ? 0x00ffffff : 0); - - if (current->hwZMask ^ prev->hwZMask) { - prev->hwZMask = current->hwZMask; - smesa->GlobalFlag |= GFLAG_ZSETTING; - } - } - } else { - current->hwCapEnable &= ~MASK_ZWriteEnable; - } - } else { - if (flag) { - current->hwCapEnable |= MASK_ZWriteEnable; - current->hwCapEnable2 &= ~MASK_ZMaskWriteEnable; - } else { - current->hwCapEnable &= ~MASK_ZWriteEnable; - } - } -} - -/* ============================================================= - * Clipping - */ - -void -sisUpdateClipping( GLcontext *ctx ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - GLint x1, y1, x2, y2; - - x1 = 0; - y1 = 0; - x2 = smesa->width - 1; - y2 = smesa->height - 1; - - if (ctx->Scissor.Enabled) { - if (ctx->Scissor.X > x1) - x1 = ctx->Scissor.X; - if (ctx->Scissor.Y > y1) - y1 = ctx->Scissor.Y; - if (ctx->Scissor.X + ctx->Scissor.Width - 1 < x2) - x2 = ctx->Scissor.X + ctx->Scissor.Width - 1; - if (ctx->Scissor.Y + ctx->Scissor.Height - 1 < y2) - y2 = ctx->Scissor.Y + ctx->Scissor.Height - 1; - } - - y1 = Y_FLIP(y1); - y2 = Y_FLIP(y2); - - current->clipTopBottom = (y2 << 13) | y1; - current->clipLeftRight = (x1 << 13) | x2; - - if ((current->clipTopBottom ^ prev->clipTopBottom) || - (current->clipLeftRight ^ prev->clipLeftRight)) - { - prev->clipTopBottom = current->clipTopBottom; - prev->clipLeftRight = current->clipLeftRight; - smesa->GlobalFlag |= GFLAG_CLIPPING; - } -} - -static void -sisDDScissor( GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h ) -{ - if (ctx->Scissor.Enabled) - sisUpdateClipping( ctx ); -} - -/* ============================================================= - * Culling - */ - -static void -sisUpdateCull( GLcontext *ctx ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - GLint cullflag, frontface; - - cullflag = ctx->Polygon.CullFaceMode; - frontface = ctx->Polygon.FrontFace; - - smesa->AGPParseSet &= ~(MASK_PsCullDirection_CCW); - smesa->dwPrimitiveSet &= ~(MASK_CullDirection); - - if((cullflag == GL_FRONT && frontface == GL_CCW) || - (cullflag == GL_BACK && frontface == GL_CW)) - { - smesa->AGPParseSet |= MASK_PsCullDirection_CCW; - smesa->dwPrimitiveSet |= OP_3D_CullDirection_CCW; - } -} - - -static void -sisDDCullFace( GLcontext *ctx, GLenum mode ) -{ - sisUpdateCull( ctx ); -} - -static void -sisDDFrontFace( GLcontext *ctx, GLenum mode ) -{ - sisUpdateCull( ctx ); -} - -/* ============================================================= - * Masks - */ - -static void sisDDColorMask( GLcontext *ctx, - GLboolean r, GLboolean g, - GLboolean b, GLboolean a ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - if (r && g && b && ((ctx->Visual.alphaBits == 0) || a)) { - current->hwCapEnable2 &= ~(MASK_AlphaMaskWriteEnable | - MASK_ColorMaskWriteEnable); - } else { - current->hwCapEnable2 |= (MASK_AlphaMaskWriteEnable | - MASK_ColorMaskWriteEnable); - - current->hwDstMask = (r) ? smesa->redMask : 0 | - (g) ? smesa->greenMask : 0 | - (b) ? smesa->blueMask : 0 | - (a) ? smesa->alphaMask : 0; - } - - if (current->hwDstMask != prev->hwDstMask) { - prev->hwDstMask = current->hwDstMask; - smesa->GlobalFlag |= GFLAG_DESTSETTING; - } -} - -/* ============================================================= - * Rendering attributes - */ - -static void sisDDShadeModel( GLcontext *ctx, GLenum mode ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - /* Signal to sisRasterPrimitive to recalculate dwPrimitiveSet */ - smesa->hw_primitive = -1; -} - -/* ============================================================= - * Window position - */ - -/* ============================================================= - * Viewport - */ - -static void sisCalcViewport( GLcontext *ctx ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - const GLfloat *v = ctx->Viewport._WindowMap.m; - GLfloat *m = smesa->hw_viewport; - - /* See also sis_translate_vertex. - */ - m[MAT_SX] = v[MAT_SX]; - m[MAT_TX] = v[MAT_TX] + SUBPIXEL_X; - m[MAT_SY] = - v[MAT_SY]; - m[MAT_TY] = - v[MAT_TY] + smesa->driDrawable->h + SUBPIXEL_Y; - m[MAT_SZ] = v[MAT_SZ] * smesa->depth_scale; - m[MAT_TZ] = v[MAT_TZ] * smesa->depth_scale; -} - -static void sisDDViewport( GLcontext *ctx, - GLint x, GLint y, - GLsizei width, GLsizei height ) -{ - /* update size of Mesa/software ancillary buffers */ - _mesa_ResizeBuffersMESA(); - sisCalcViewport( ctx ); -} - -static void sisDDDepthRange( GLcontext *ctx, - GLclampd nearval, GLclampd farval ) -{ - sisCalcViewport( ctx ); -} - -/* ============================================================= - * Miscellaneous - */ - -static void -sisDDLogicOpCode( GLcontext *ctx, GLenum opcode ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - current->hwDstSet &= ~MASK_ROP2; - switch (opcode) - { - case GL_CLEAR: - current->hwDstSet |= LOP_CLEAR; - break; - case GL_SET: - current->hwDstSet |= LOP_SET; - break; - case GL_COPY: - current->hwDstSet |= LOP_COPY; - break; - case GL_COPY_INVERTED: - current->hwDstSet |= LOP_COPY_INVERTED; - break; - case GL_NOOP: - current->hwDstSet |= LOP_NOOP; - break; - case GL_INVERT: - current->hwDstSet |= LOP_INVERT; - break; - case GL_AND: - current->hwDstSet |= LOP_AND; - break; - case GL_NAND: - current->hwDstSet |= LOP_NAND; - break; - case GL_OR: - current->hwDstSet |= LOP_OR; - break; - case GL_NOR: - current->hwDstSet |= LOP_NOR; - break; - case GL_XOR: - current->hwDstSet |= LOP_XOR; - break; - case GL_EQUIV: - current->hwDstSet |= LOP_EQUIV; - break; - case GL_AND_REVERSE: - current->hwDstSet |= LOP_AND_REVERSE; - break; - case GL_AND_INVERTED: - current->hwDstSet |= LOP_AND_INVERTED; - break; - case GL_OR_REVERSE: - current->hwDstSet |= LOP_OR_REVERSE; - break; - case GL_OR_INVERTED: - current->hwDstSet |= LOP_OR_INVERTED; - break; - } - - if (current->hwDstSet ^ prev->hwDstSet) { - prev->hwDstSet = current->hwDstSet; - smesa->GlobalFlag |= GFLAG_DESTSETTING; - } -} - -void sisDDDrawBuffer( GLcontext *ctx, GLenum mode ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - /* - * _DrawDestMask is easier to cope with than <mode>. - */ - switch ( ctx->DrawBuffer->_ColorDrawBufferMask[0] ) { - case BUFFER_BIT_FRONT_LEFT: - case BUFFER_BIT_BACK_LEFT: - FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_FALSE ); - break; - default: - /* GL_NONE or GL_FRONT_AND_BACK or stereo left&right, etc */ - FALLBACK( smesa, SIS_FALLBACK_DRAW_BUFFER, GL_TRUE ); - return; - } - - /* We want to update the s/w rast state too so that sisDDSetBuffer() - * gets called. - */ - _swrast_DrawBuffer(ctx, mode); - - current->hwOffsetDest = (smesa->drawOffset) >> 1; - current->hwDstSet &= ~MASK_DstBufferPitch; - current->hwDstSet |= smesa->drawPitch >> 2; - - if (current->hwDstSet != prev->hwDstSet) { - prev->hwDstSet = current->hwDstSet; - smesa->GlobalFlag |= GFLAG_DESTSETTING; - } - - if (current->hwOffsetDest != prev->hwOffsetDest) { - prev->hwOffsetDest = current->hwOffsetDest; - smesa->GlobalFlag |= GFLAG_DESTSETTING; - } -} - -/* ============================================================= - * Polygon stipple - */ - -/* ============================================================= - * Render mode - */ - -/* ============================================================= - * State enable/disable - */ - -static void -sisDDEnable( GLcontext * ctx, GLenum cap, GLboolean state ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - __GLSiSHardware *current = &smesa->current; - - switch (cap) - { - case GL_ALPHA_TEST: - if (state) - current->hwCapEnable |= MASK_AlphaTestEnable; - else - current->hwCapEnable &= ~MASK_AlphaTestEnable; - break; - case GL_BLEND: - /* TODO: */ - if (state) - /* if (state & !ctx->Color.ColorLogicOpEnabled) */ - current->hwCapEnable |= MASK_BlendEnable; - else - current->hwCapEnable &= ~MASK_BlendEnable; - break; - case GL_CULL_FACE: - if (state) - current->hwCapEnable |= MASK_CullEnable; - else - current->hwCapEnable &= ~MASK_CullEnable; - break; - case GL_DEPTH_TEST: - if (state && smesa->depthbuffer) - current->hwCapEnable |= MASK_ZTestEnable; - else - current->hwCapEnable &= ~MASK_ZTestEnable; - sisDDDepthMask( ctx, ctx->Depth.Mask ); - break; - case GL_DITHER: - if (state) - current->hwCapEnable |= MASK_DitherEnable; - else - current->hwCapEnable &= ~MASK_DitherEnable; - break; - case GL_FOG: - if (state) - current->hwCapEnable |= MASK_FogEnable; - else - current->hwCapEnable &= ~MASK_FogEnable; - break; - case GL_COLOR_LOGIC_OP: - if (state) - sisDDLogicOpCode( ctx, ctx->Color.LogicOp ); - else - sisDDLogicOpCode( ctx, GL_COPY ); - break; - case GL_SCISSOR_TEST: - sisUpdateClipping( ctx ); - break; - case GL_STENCIL_TEST: - if (state) { - if (smesa->zFormat != SiS_ZFORMAT_S8Z24) - FALLBACK(smesa, SIS_FALLBACK_STENCIL, 1); - else - current->hwCapEnable |= (MASK_StencilTestEnable | - MASK_StencilWriteEnable); - } else { - FALLBACK(smesa, SIS_FALLBACK_STENCIL, 0); - current->hwCapEnable &= ~(MASK_StencilTestEnable | - MASK_StencilWriteEnable); - } - break; - } -} - - -/* ============================================================= - * State initialization, management - */ - -/* Called before beginning of rendering. */ -void -sisUpdateHWState( GLcontext *ctx ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - __GLSiSHardware *prev = &smesa->prev; - __GLSiSHardware *current = &smesa->current; - - /* enable setting 1 */ - if (current->hwCapEnable ^ prev->hwCapEnable) { - prev->hwCapEnable = current->hwCapEnable; - smesa->GlobalFlag |= GFLAG_ENABLESETTING; - } - - /* enable setting 2 */ - if (current->hwCapEnable2 ^ prev->hwCapEnable2) { - prev->hwCapEnable2 = current->hwCapEnable2; - smesa->GlobalFlag |= GFLAG_ENABLESETTING2; - } - - if (smesa->GlobalFlag & GFLAG_RENDER_STATES) - sis_update_render_state( smesa ); - - if (smesa->GlobalFlag & GFLAG_TEXTURE_STATES) - sis_update_texture_state( smesa ); -} - -static void -sisDDInvalidateState( GLcontext *ctx, GLuint new_state ) -{ - sisContextPtr smesa = SIS_CONTEXT(ctx); - - _swrast_InvalidateState( ctx, new_state ); - _swsetup_InvalidateState( ctx, new_state ); - _ac_InvalidateState( ctx, new_state ); - _tnl_InvalidateState( ctx, new_state ); - smesa->NewGLState |= new_state; -} - -/* Initialize the context's hardware state. - */ -void sisDDInitState( sisContextPtr smesa ) -{ - __GLSiSHardware *current = &smesa->current; - __GLSiSHardware *prev = &(smesa->prev); - GLcontext *ctx = smesa->glCtx; - - /* add Texture Perspective Enable */ - prev->hwCapEnable = MASK_FogPerspectiveEnable | MASK_TextureCacheEnable | - MASK_TexturePerspectiveEnable | MASK_DitherEnable; - /*| MASK_SpecularEnable*/ - - /* - prev->hwCapEnable2 = 0x00aa0080; - */ - /* if multi-texture enabled, disable Z pre-test */ - prev->hwCapEnable2 = MASK_TextureMipmapBiasEnable; - - /* Z test mode is LESS */ - prev->hwZ = SiS_Z_COMP_S_LT_B; - - /* Depth mask */ - prev->hwZMask = 0xffffffff; - - /* Alpha test mode is ALWAYS, alpha ref value is 0 */ - prev->hwAlpha = SiS_ALPHA_ALWAYS; - - /* ROP2 is COPYPEN */ - prev->hwDstSet = LOP_COPY; - - /* color mask */ - prev->hwDstMask = 0xffffffff; - - /* LinePattern is 0, Repeat Factor is 0 */ - prev->hwLinePattern = 0x00008000; - - /* Src blend is BLEND_ONE, Dst blend is D3DBLEND_ZERO */ - prev->hwDstSrcBlend = SiS_S_ONE | SiS_D_ZERO; - - /* Stenciling disabled, function ALWAYS, ref value zero, mask all ones */ - prev->hwStSetting = STENCIL_FORMAT_8 | SiS_STENCIL_ALWAYS | 0xff; - /* Op is KEEP for all three operations */ - prev->hwStSetting2 = SiS_SFAIL_KEEP | SiS_SPASS_ZFAIL_KEEP | - SiS_SPASS_ZPASS_KEEP; - - /* Texture mapping mode is Tile */ -#if 0 - prev->texture[0].hwTextureSet = 0x00030000; -#endif - /* Magnified & minified texture filter is NEAREST */ -#if 0 - prev->texture[0].hwTextureMip = 0; -#endif - - /* Texture Blending setting -- use fragment color/alpha*/ - prev->hwTexBlendColor0 = STAGE0_C_CF; - prev->hwTexBlendColor1 = STAGE1_C_CF; - prev->hwTexBlendAlpha0 = STAGE0_A_AF; - prev->hwTexBlendAlpha1 = STAGE1_A_AF; - - switch (smesa->bytesPerPixel) - { - case 2: - prev->hwDstSet |= DST_FORMAT_RGB_565; - break; - case 4: - prev->hwDstSet |= DST_FORMAT_ARGB_8888; - break; - } - - switch (ctx->Visual.depthBits) - { - case 0: - prev->hwCapEnable &= ~MASK_ZWriteEnable; - case 16: - smesa->zFormat = SiS_ZFORMAT_Z16; - prev->hwCapEnable |= MASK_ZWriteEnable; - smesa->depth_scale = 1.0 / (GLfloat)0xffff; - break; - case 32: - smesa->zFormat = SiS_ZFORMAT_Z32; - prev->hwCapEnable |= MASK_ZWriteEnable; - smesa->depth_scale = 1.0 / (GLfloat)0xffffffff; - break; - case 24: - assert (ctx->Visual.stencilBits); - smesa->zFormat = SiS_ZFORMAT_S8Z24; - prev->hwCapEnable |= MASK_StencilBufferEnable; - prev->hwCapEnable |= MASK_ZWriteEnable; - smesa->depth_scale = 1.0 / (GLfloat)0xffffff; - break; - } - - prev->hwZ |= smesa->zFormat; - - /* TODO: need to clear cache? */ - smesa->clearTexCache = GL_TRUE; - - smesa->clearColorPattern = 0; - - smesa->AGPParseSet = MASK_PsTexture1FromB | MASK_PsBumpTextureFromC; - smesa->dwPrimitiveSet = OP_3D_Texture1FromB | OP_3D_TextureBumpFromC; - - sisUpdateZStencilPattern( smesa, 1.0, 0 ); - sisUpdateCull( ctx ); - - memcpy( current, prev, sizeof (__GLSiSHardware) ); - - /* Set initial fog settings. Start and end are the same case. */ - sisDDFogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density ); - sisDDFogfv( ctx, GL_FOG_END, &ctx->Fog.End ); - sisDDFogfv( ctx, GL_FOG_MODE, NULL ); -} - -/* Initialize the driver's state functions. - */ -void sisDDInitStateFuncs( GLcontext *ctx ) -{ - ctx->Driver.UpdateState = sisDDInvalidateState; - - ctx->Driver.Clear = sisDDClear; - ctx->Driver.ClearColor = sisDDClearColor; - ctx->Driver.ClearDepth = sisDDClearDepth; - ctx->Driver.ClearStencil = sisDDClearStencil; - - ctx->Driver.AlphaFunc = sisDDAlphaFunc; - ctx->Driver.BlendFuncSeparate = sisDDBlendFuncSeparate; - ctx->Driver.ColorMask = sisDDColorMask; - ctx->Driver.CullFace = sisDDCullFace; - ctx->Driver.DepthMask = sisDDDepthMask; - ctx->Driver.DepthFunc = sisDDDepthFunc; - ctx->Driver.DepthRange = sisDDDepthRange; - ctx->Driver.DrawBuffer = sisDDDrawBuffer; - ctx->Driver.Enable = sisDDEnable; - ctx->Driver.FrontFace = sisDDFrontFace; - ctx->Driver.Fogfv = sisDDFogfv; - ctx->Driver.Hint = NULL; - ctx->Driver.Lightfv = NULL; - ctx->Driver.LogicOpcode = sisDDLogicOpCode; - ctx->Driver.PolygonMode = NULL; - ctx->Driver.PolygonStipple = NULL; - ctx->Driver.ReadBuffer = NULL; - ctx->Driver.RenderMode = NULL; - ctx->Driver.Scissor = sisDDScissor; - ctx->Driver.ShadeModel = sisDDShadeModel; - ctx->Driver.Viewport = sisDDViewport; - - /* 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; -} |