/* Fires a set of vertices that have been written from AGP_StartPtr to * AGP_WritePtr, using the smesa->AGPParseSet format. */ void sisFireVertsAGP( sisContextPtr smesa ) { if (AGP_WritePtr == AGP_StartPtr) return; mWait3DCmdQueue(5); mEndPrimitive(); MMIO(REG_3D_AGPCmBase, (long)AGP_StartPtr - (long)smesa->AGPCmdBufBase + (long)smesa->AGPCmdBufAddr); MMIO(REG_3D_AGPTtDwNum, (((long)AGP_WritePtr - (long)AGP_StartPtr) >> 2) | 0x50000000); MMIO(REG_3D_ParsingSet, smesa->AGPParseSet); MMIO(REG_3D_AGPCmFire, (GLint)(-1)); mEndPrimitive(); *(smesa->pAGPCmdBufNext) = (((long)AGP_WritePtr - (long)smesa->AGPCmdBufBase) + 0xf) & ~0xf; AGP_StartPtr = AGP_WritePtr; sisUpdateAGP( smesa ); }
void sis_update_texture_state (sisContextPtr smesa) { __GLSiSHardware *prev = &smesa->prev; mWait3DCmdQueue (55); if (smesa->clearTexCache || (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS)) { MMIO(REG_3D_TEnable, prev->hwCapEnable | MASK_TextureCacheClear); MMIO(REG_3D_TEnable, prev->hwCapEnable); smesa->clearTexCache = GL_FALSE; } /* Texture Setting */ if (smesa->GlobalFlag & CFLAG_TEXTURERESET) MMIO(REG_3D_TextureSet, prev->texture[0].hwTextureSet); if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP) MMIO(REG_3D_TextureMip, prev->texture[0].hwTextureMip); /* MMIO(REG_3D_TextureTransparencyColorHigh, prev->texture[0].hwTextureClrHigh); MMIO(REG_3D_TextureTransparencyColorLow, prev->texture[0].hwTextureClrLow); */ if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR) MMIO(REG_3D_TextureBorderColor, prev->texture[0].hwTextureBorderColor); if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS) { switch ((prev->texture[0].hwTextureSet & MASK_TextureLevel) >> 8) { case 11: MMIO(REG_3D_TextureAddress11, prev->texture[0].texOffset11); case 10: MMIO(REG_3D_TextureAddress10, prev->texture[0].texOffset10); MMIO(REG_3D_TexturePitch10, prev->texture[0].texPitch10); case 9: MMIO(REG_3D_TextureAddress9, prev->texture[0].texOffset9); case 8: MMIO(REG_3D_TextureAddress8, prev->texture[0].texOffset8); MMIO(REG_3D_TexturePitch8, prev->texture[0].texPitch89); case 7: MMIO(REG_3D_TextureAddress7, prev->texture[0].texOffset7); case 6: MMIO(REG_3D_TextureAddress6, prev->texture[0].texOffset6); MMIO(REG_3D_TexturePitch6, prev->texture[0].texPitch67); case 5: MMIO(REG_3D_TextureAddress5, prev->texture[0].texOffset5); case 4: MMIO(REG_3D_TextureAddress4, prev->texture[0].texOffset4); MMIO(REG_3D_TexturePitch4, prev->texture[0].texPitch45); case 3: MMIO(REG_3D_TextureAddress3, prev->texture[0].texOffset3); case 2: MMIO(REG_3D_TextureAddress2, prev->texture[0].texOffset2); MMIO(REG_3D_TexturePitch2, prev->texture[0].texPitch23); case 1: MMIO(REG_3D_TextureAddress1, prev->texture[0].texOffset1); case 0: MMIO(REG_3D_TextureAddress0, prev->texture[0].texOffset0); MMIO(REG_3D_TexturePitch0, prev->texture[0].texPitch01); } } if (smesa->GlobalFlag & CFLAG_TEXTURERESET_1) MMIO(REG_3D_Texture1Set, prev->texture[1].hwTextureSet); if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP_1) MMIO(REG_3D_Texture1Mip, prev->texture[1].hwTextureMip); if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR_1) { MMIO(REG_3D_Texture1BorderColor, prev->texture[1].hwTextureBorderColor); } if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS_1) { switch ((prev->texture[1].hwTextureSet & MASK_TextureLevel) >> 8) { case 11: MMIO(REG_3D_Texture1Address11, prev->texture[1].texOffset11); case 10: MMIO(REG_3D_Texture1Address10, prev->texture[1].texOffset10); MMIO(REG_3D_Texture1Pitch10, prev->texture[1].texPitch10); case 9: MMIO(REG_3D_Texture1Address9, prev->texture[1].texOffset9); case 8: MMIO(REG_3D_Texture1Address8, prev->texture[1].texOffset8); MMIO(REG_3D_Texture1Pitch8, prev->texture[1].texPitch89); case 7: MMIO(REG_3D_Texture1Address7, prev->texture[1].texOffset7); case 6: MMIO(REG_3D_Texture1Address6, prev->texture[1].texOffset6); MMIO(REG_3D_Texture1Pitch6, prev->texture[1].texPitch67); case 5: MMIO(REG_3D_Texture1Address5, prev->texture[1].texOffset5); case 4: MMIO(REG_3D_Texture1Address4, prev->texture[1].texOffset4); MMIO(REG_3D_Texture1Pitch4, prev->texture[1].texPitch45); case 3: MMIO(REG_3D_Texture1Address3, prev->texture[1].texOffset3); case 2: MMIO(REG_3D_Texture1Address2, prev->texture[1].texOffset2); MMIO(REG_3D_Texture1Pitch2, prev->texture[1].texPitch23); case 1: MMIO(REG_3D_Texture1Address1, prev->texture[1].texOffset1); case 0: MMIO(REG_3D_Texture1Address0, prev->texture[1].texOffset0); MMIO(REG_3D_Texture1Pitch0, prev->texture[1].texPitch01); } } /* texture environment */ if (smesa->GlobalFlag & GFLAG_TEXTUREENV) { MMIO(REG_3D_TextureBlendFactor, prev->hwTexEnvColor); MMIO(REG_3D_TextureColorBlendSet0, prev->hwTexBlendColor0); MMIO(REG_3D_TextureAlphaBlendSet0, prev->hwTexBlendAlpha0); } if (smesa->GlobalFlag & GFLAG_TEXTUREENV_1) { MMIO(REG_3D_TextureBlendFactor, prev->hwTexEnvColor); MMIO(REG_3D_TextureColorBlendSet1, prev->hwTexBlendColor1); MMIO(REG_3D_TextureAlphaBlendSet1, prev->hwTexBlendAlpha1); } smesa->GlobalFlag &= ~GFLAG_TEXTURE_STATES; }
void sis_update_render_state( sisContextPtr smesa ) { __GLSiSHardware *prev = &smesa->prev; mWait3DCmdQueue (45); if (smesa->GlobalFlag & GFLAG_ENABLESETTING) { if (!smesa->clearTexCache) { MMIO(REG_3D_TEnable, prev->hwCapEnable); } else { MMIO(REG_3D_TEnable, prev->hwCapEnable | MASK_TextureCacheClear); MMIO(REG_3D_TEnable, prev->hwCapEnable); smesa->clearTexCache = GL_FALSE; } } if (smesa->GlobalFlag & GFLAG_ENABLESETTING2) MMIO(REG_3D_TEnable2, prev->hwCapEnable2); /* Z Setting */ if (smesa->GlobalFlag & GFLAG_ZSETTING) { MMIO(REG_3D_ZSet, prev->hwZ); MMIO(REG_3D_ZStWriteMask, prev->hwZMask); MMIO(REG_3D_ZAddress, prev->hwOffsetZ); } /* Alpha Setting */ if (smesa->GlobalFlag & GFLAG_ALPHASETTING) MMIO(REG_3D_AlphaSet, prev->hwAlpha); if (smesa->GlobalFlag & GFLAG_DESTSETTING) { MMIO(REG_3D_DstSet, prev->hwDstSet); MMIO(REG_3D_DstAlphaWriteMask, prev->hwDstMask); MMIO(REG_3D_DstAddress, prev->hwOffsetDest); } /* Line Setting */ #if 0 if (smesa->GlobalFlag & GFLAG_LINESETTING) MMIO(REG_3D_LinePattern, prev->hwLinePattern); #endif /* Fog Setting */ if (smesa->GlobalFlag & GFLAG_FOGSETTING) { MMIO(REG_3D_FogSet, prev->hwFog); MMIO(REG_3D_FogInverseDistance, prev->hwFogInverse); MMIO(REG_3D_FogFarDistance, prev->hwFogFar); MMIO(REG_3D_FogFactorDensity, prev->hwFogDensity); } /* Stencil Setting */ if (smesa->GlobalFlag & GFLAG_STENCILSETTING) { MMIO(REG_3D_StencilSet, prev->hwStSetting); MMIO(REG_3D_StencilSet2, prev->hwStSetting2); } /* Miscellaneous Setting */ if (smesa->GlobalFlag & GFLAG_DSTBLEND) MMIO(REG_3D_DstBlendMode, prev->hwDstSrcBlend); if (smesa->GlobalFlag & GFLAG_CLIPPING) { MMIO(REG_3D_ClipTopBottom, prev->clipTopBottom); MMIO(REG_3D_ClipLeftRight, prev->clipLeftRight); } smesa->GlobalFlag &= ~GFLAG_RENDER_STATES; }