📄 sis_context.c
字号:
* needed for sisDDDeleteTexture, since it needs to call the FB/AGP free * function. */ /* smesa->glCtx->DriverCtx = NULL; */ _mesa_destroy_context(smesa->glCtx); } FREE( smesa );}GLbooleansisMakeCurrent( __DRIcontextPrivate *driContextPriv, __DRIdrawablePrivate *driDrawPriv, __DRIdrawablePrivate *driReadPriv ){ if ( driContextPriv ) { GET_CURRENT_CONTEXT(ctx); sisContextPtr oldSisCtx = ctx ? SIS_CONTEXT(ctx) : NULL; sisContextPtr newSisCtx = (sisContextPtr) driContextPriv->driverPrivate; struct gl_framebuffer *drawBuffer, *readBuffer; if ( newSisCtx != oldSisCtx) { newSisCtx->GlobalFlag = GFLAG_ALL; } newSisCtx->driDrawable = driDrawPriv; drawBuffer = (GLframebuffer *)driDrawPriv->driverPrivate; readBuffer = (GLframebuffer *)driReadPriv->driverPrivate; _mesa_make_current( newSisCtx->glCtx, drawBuffer, readBuffer ); sisUpdateBufferSize( newSisCtx ); sisUpdateClipping( newSisCtx->glCtx ); } else { _mesa_make_current( NULL, NULL, NULL ); } return GL_TRUE;}GLbooleansisUnbindContext( __DRIcontextPrivate *driContextPriv ){ return GL_TRUE;}voidsis_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;}voidsis_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;}voidsis6326_update_render_state( sisContextPtr smesa ){ __GLSiSHardware *prev = &smesa->prev; mWait3DCmdQueue (45); if (smesa->GlobalFlag & GFLAG_ENABLESETTING) { if (!smesa->clearTexCache) { MMIO(REG_6326_3D_TEnable, prev->hwCapEnable); } else { MMIO(REG_6326_3D_TEnable, prev->hwCapEnable & ~S_ENABLE_TextureCache); MMIO(REG_6326_3D_TEnable, prev->hwCapEnable); smesa->clearTexCache = GL_FALSE; } } /* Z Setting */ if (smesa->GlobalFlag & GFLAG_ZSETTING) { MMIO(REG_6326_3D_ZSet, prev->hwZ); MMIO(REG_6326_3D_ZAddress, prev->hwOffsetZ); } /* Alpha Setting */ if (smesa->GlobalFlag & GFLAG_ALPHASETTING) MMIO(REG_6326_3D_AlphaSet, prev->hwAlpha); if (smesa->GlobalFlag & GFLAG_DESTSETTING) { MMIO(REG_6326_3D_DstSet, prev->hwDstSet); MMIO(REG_6326_3D_DstAddress, prev->hwOffsetDest); } /* Fog Setting */ if (smesa->GlobalFlag & GFLAG_FOGSETTING) { MMIO(REG_6326_3D_FogSet, prev->hwFog); } /* Miscellaneous Setting */ if (smesa->GlobalFlag & GFLAG_DSTBLEND) MMIO(REG_6326_3D_DstSrcBlendMode, prev->hwDstSrcBlend); if (smesa->GlobalFlag & GFLAG_CLIPPING) { MMIO(REG_6326_3D_ClipTopBottom, prev->clipTopBottom); MMIO(REG_6326_3D_ClipLeftRight, prev->clipLeftRight); } smesa->GlobalFlag &= ~GFLAG_RENDER_STATES;}voidsis6326_update_texture_state (sisContextPtr smesa){ __GLSiSHardware *prev = &smesa->prev; mWait3DCmdQueue (55); if (smesa->clearTexCache || (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS)) { MMIO(REG_6326_3D_TEnable, prev->hwCapEnable & ~S_ENABLE_TextureCache); MMIO(REG_6326_3D_TEnable, prev->hwCapEnable); smesa->clearTexCache = GL_FALSE; } /* Texture Setting */ if (smesa->GlobalFlag & CFLAG_TEXTURERESET) MMIO(REG_6326_3D_TextureSet, prev->texture[0].hwTextureSet); if (smesa->GlobalFlag & GFLAG_TEXTUREMIPMAP) MMIO(REG_6326_3D_TextureWidthHeight, prev->texture[0].hwTexWidthHeight); /* MMIO(REG_3D_TextureTransparencyColorHigh, prev->texture[0].hwTextureClrHigh); MMIO(REG_3D_TextureTransparencyColorLow, prev->texture[0].hwTextureClrLow); */ if (smesa->GlobalFlag & GFLAG_TEXBORDERCOLOR) MMIO(REG_6326_3D_TextureBorderColor, prev->texture[0].hwTextureBorderColor); if (smesa->GlobalFlag & GFLAG_TEXTUREADDRESS) { switch ((prev->texture[0].hwTextureSet & MASK_6326_TextureLevel) >> 8) { case 9: MMIO(REG_6326_3D_TextureAddress9, prev->texture[0].texOffset9); /* FALLTHROUGH */ case 8: MMIO(REG_6326_3D_TextureAddress8, prev->texture[0].texOffset8); MMIO(REG_6326_3D_TexturePitch89, prev->texture[0].texPitch89); /* FALLTHROUGH */ case 7: MMIO(REG_6326_3D_TextureAddress7, prev->texture[0].texOffset7); /* FALLTHROUGH */ case 6: MMIO(REG_6326_3D_TextureAddress6, prev->texture[0].texOffset6); MMIO(REG_6326_3D_TexturePitch67, prev->texture[0].texPitch67); /* FALLTHROUGH */ case 5: MMIO(REG_6326_3D_TextureAddress5, prev->texture[0].texOffset5); /* FALLTHROUGH */ case 4: MMIO(REG_6326_3D_TextureAddress4, prev->texture[0].texOffset4); MMIO(REG_6326_3D_TexturePitch45, prev->texture[0].texPitch45); /* FALLTHROUGH */ case 3: MMIO(REG_6326_3D_TextureAddress3, prev->texture[0].texOffset3); /* FALLTHROUGH */ case 2: MMIO(REG_6326_3D_TextureAddress2, prev->texture[0].texOffset2); MMIO(REG_6326_3D_TexturePitch23, prev->texture[0].texPitch23); /* FALLTHROUGH */ case 1: MMIO(REG_6326_3D_TextureAddress1, prev->texture[0].texOffset1); /* FALLTHROUGH */ case 0: MMIO(REG_6326_3D_TextureAddress0, prev->texture[0].texOffset0); MMIO(REG_6326_3D_TexturePitch01, prev->texture[0].texPitch01); break; } } /* texture environment */ if (smesa->GlobalFlag & GFLAG_TEXTUREENV) { MMIO(REG_6326_3D_TextureBlendSet, prev->hwTexBlendSet); } smesa->GlobalFlag &= ~GFLAG_TEXTURE_STATES;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -