static void gammaDDLightModelfv( GLcontext *ctx, GLenum pname, const GLfloat *params ) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); switch (pname) { case GL_LIGHT_MODEL_AMBIENT: CHECK_DMA_BUFFER(gmesa, 3); /* We don't do alpha */ WRITEF(gmesa->buf, SceneAmbientColorBlue, params[2]); WRITEF(gmesa->buf, SceneAmbientColorGreen, params[1]); WRITEF(gmesa->buf, SceneAmbientColorRed, params[0]); break; case GL_LIGHT_MODEL_LOCAL_VIEWER: if (params[0] != 0.0) gmesa->LightingMode |= LightingModeLocalViewer; else gmesa->LightingMode &= ~LightingModeLocalViewer; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, LightingMode, gmesa->LightingMode); break; case GL_LIGHT_MODEL_TWO_SIDE: if (params[0] == 1.0f) { gmesa->LightingMode |= LightingModeTwoSides; gmesa->MaterialMode |= MaterialModeTwoSides; } else { gmesa->LightingMode &= ~LightingModeTwoSides; gmesa->MaterialMode &= ~MaterialModeTwoSides; } CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, LightingMode, gmesa->LightingMode); WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode); break; } }
static void gammaReadRGBASpan8888( const GLcontext *ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4]) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); gammaScreenPtr gammascrn = gmesa->gammaScreen; uint32_t dwords1, dwords2, i = 0; char *src = (char *)rgba[0]; GLuint read = n * gammascrn->cpp; /* Number of bytes we are expecting */ uint32_t data; FLUSH_DMA_BUFFER(gmesa); CHECK_DMA_BUFFER(gmesa, 16); WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode & ~(LBReadSrcEnable | LBReadDstEnable)); WRITE(gmesa->buf, ColorDDAMode, ColorDDAEnable); WRITE(gmesa->buf, LBWriteMode, LBWriteModeDisable); WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode & ~FBReadSrcEnable) | FBReadDstEnable | FBDataTypeColor); WRITE(gmesa->buf, FilterMode, 0x200); /* Pass FBColorData */ WRITE(gmesa->buf, FBWriteMode, FBW_UploadColorData | FBWriteModeDisable); WRITE(gmesa->buf, StartXSub, (x+n)<<16); WRITE(gmesa->buf, StartXDom, x<<16); WRITE(gmesa->buf, StartY, y<<16); WRITE(gmesa->buf, GLINTCount, 1); WRITE(gmesa->buf, dXDom, 0<<16); WRITE(gmesa->buf, dXSub, 0<<16); WRITE(gmesa->buf, dY, 1<<16); WRITE(gmesa->buf, Render, PrimitiveTrapezoid); FLUSH_DMA_BUFFER(gmesa); moredata: dwords1 = *(volatile uint32_t*)(void *)(((uint8_t*)gammascrn->regions[0].map) + (GlintOutFIFOWords)); dwords2 = *(volatile uint32_t*)(void *)(((uint8_t*)gammascrn->regions[2].map) + (GlintOutFIFOWords)); if (dwords1) { memcpy(src, (char*)gammascrn->regions[1].map + 0x1000, dwords1 << 2); src += dwords1 << 2; read -= dwords1 << 2; } if (dwords2) { memcpy(src, (char*)gammascrn->regions[3].map + 0x1000, dwords2 << 2); src += dwords2 << 2; read -= dwords2 << 2; } if (read) goto moredata; done: CHECK_DMA_BUFFER(gmesa, 6); WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode); WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable); WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode); WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode); WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable); WRITE(gmesa->buf, FilterMode, 0x400); }
/* ============================================================= * Points */ static void gammaDDPointSize( GLcontext *ctx, GLfloat size ) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, PointSize, (GLuint)size); WRITEF(gmesa->buf, AApointSize, size); }
/* ============================================================= * Lines */ static void gammaDDLineWidth( GLcontext *ctx, GLfloat width ) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); CHECK_DMA_BUFFER(gmesa, 3); WRITE(gmesa->buf, LineWidth, (GLuint)width); WRITEF(gmesa->buf, AAlineWidth, width); WRITE(gmesa->buf, LineWidthOffset, (GLuint)(width-1)/2); }
static void gammaDDLightfv(GLcontext *ctx, GLenum light, GLenum pname, const GLfloat *params, GLint nParams) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); GLfloat l,x,y,z,w; switch(light) { case GL_LIGHT0: switch (pname) { case GL_AMBIENT: CHECK_DMA_BUFFER(gmesa, 3); /* We don't do alpha */ WRITEF(gmesa->buf, Light0AmbientIntensityBlue, params[2]); WRITEF(gmesa->buf, Light0AmbientIntensityGreen, params[1]); WRITEF(gmesa->buf, Light0AmbientIntensityRed, params[0]); break; case GL_DIFFUSE: CHECK_DMA_BUFFER(gmesa, 3); /* We don't do alpha */ WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, params[2]); WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, params[1]); WRITEF(gmesa->buf, Light0DiffuseIntensityRed, params[0]); break; case GL_SPECULAR: CHECK_DMA_BUFFER(gmesa, 3); /* We don't do alpha */ WRITEF(gmesa->buf, Light0SpecularIntensityBlue, params[2]); WRITEF(gmesa->buf, Light0SpecularIntensityGreen, params[1]); WRITEF(gmesa->buf, Light0SpecularIntensityRed, params[0]); break; case GL_POSITION: /* Normalize <x,y,z> */ x = params[0]; y = params[1]; z = params[2]; w = params[3]; l = sqrt(x*x + y*y + z*z + w*w); w /= l; x /= l; y /= l; z /= l; if (params[3] != 0.0) { gmesa->Light0Mode |= Light0ModeAttenuation; gmesa->Light0Mode |= Light0ModeLocal; } else { gmesa->Light0Mode &= ~Light0ModeAttenuation; gmesa->Light0Mode &= ~Light0ModeLocal; } CHECK_DMA_BUFFER(gmesa, 5); WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode); WRITEF(gmesa->buf, Light0PositionW, w); WRITEF(gmesa->buf, Light0PositionZ, z); WRITEF(gmesa->buf, Light0PositionY, y); WRITEF(gmesa->buf, Light0PositionX, x); break; case GL_SPOT_DIRECTION: CHECK_DMA_BUFFER(gmesa, 3); /* WRITEF(gmesa->buf, Light0SpotlightDirectionW, params[3]); */ WRITEF(gmesa->buf, Light0SpotlightDirectionZ, params[2]); WRITEF(gmesa->buf, Light0SpotlightDirectionY, params[1]); WRITEF(gmesa->buf, Light0SpotlightDirectionX, params[0]); break; case GL_SPOT_EXPONENT: CHECK_DMA_BUFFER(gmesa, 1); WRITEF(gmesa->buf, Light0SpotlightExponent, params[0]); break; case GL_SPOT_CUTOFF: if (params[0] != 180.0) gmesa->Light0Mode |= Light0ModeSpotLight; else gmesa->Light0Mode &= ~Light0ModeSpotLight; CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode); WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, cos(params[0]*DEG2RAD)); break; case GL_CONSTANT_ATTENUATION: CHECK_DMA_BUFFER(gmesa, 1); WRITEF(gmesa->buf, Light0ConstantAttenuation, params[0]); break; case GL_LINEAR_ATTENUATION: CHECK_DMA_BUFFER(gmesa, 1); WRITEF(gmesa->buf, Light0LinearAttenuation, params[0]); break; case GL_QUADRATIC_ATTENUATION: CHECK_DMA_BUFFER(gmesa, 1); WRITEF(gmesa->buf, Light0QuadraticAttenuation, params[0]); break; } break; } }
static void gammaDDClear( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint cx, GLint cy, GLint cw, GLint ch ) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv; GLuint temp = 0; FLUSH_BATCH( gmesa ); /* Update and emit any new state. We need to do this here to catch * changes to the masks. * FIXME: Just update the masks? */ if ( gmesa->new_state ) gammaDDUpdateHWState( ctx ); #ifdef DO_VALIDATE /* Flush any partially filled buffers */ FLUSH_DMA_BUFFER(gmesa); DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock, gmesa->driScreen->drawLockID); VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa); #endif if (mask & BUFFER_BIT_DEPTH) { /* Turn off writes the FB */ CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, FBWriteMode, FBWriteModeDisable); mask &= ~BUFFER_BIT_DEPTH; /* * Turn Rectangle2DControl off when the window is not clipped * (i.e., the GID tests are not necessary). This dramatically * increases the performance of the depth clears. */ if (!gmesa->NotClipped) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, Rectangle2DControl, 1); } temp = (gmesa->LBReadMode & LBPartialProdMask) | LBWindowOriginBot; if (gDRIPriv->numMultiDevices == 2) temp |= LBScanLineInt2; CHECK_DMA_BUFFER(gmesa, 5); WRITE(gmesa->buf, LBReadMode, temp); WRITE(gmesa->buf, DeltaMode, DM_DepthEnable); WRITE(gmesa->buf, DepthMode, (DepthModeEnable | DM_Always | DM_SourceDepthRegister | DM_WriteMask)); WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth); /* Increment the frame count */ gmesa->FrameCount++; #ifdef FAST_CLEAR_4 gmesa->FrameCount &= 0x0f; #else gmesa->FrameCount &= 0xff; #endif /* Force FCP to be written */ WRITE(gmesa->buf, GLINTWindow, (WindowEnable | W_PassIfEqual | (gmesa->Window & W_GIDMask) | W_DepthFCP | W_LBUpdateFromRegisters | W_OverrideWriteFiltering | (gmesa->FrameCount << 9))); /* Clear part of the depth and FCP buffers */ { int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h; int x = gmesa->driDrawable->x; int w = gmesa->driDrawable->w; int h = gmesa->driDrawable->h; #ifndef TURN_OFF_FCP float hsub = h; if (gmesa->WindowChanged) { gmesa->WindowChanged = GL_FALSE; } else { #ifdef FAST_CLEAR_4 hsub /= 16; #else hsub /= 256; #endif /* Handle the case where the height < # of FCPs */ if (hsub < 1.0) { if (gmesa->FrameCount > h) gmesa->FrameCount = 0; h = 1; y += gmesa->FrameCount; } else { h = (gmesa->FrameCount+1)*hsub; h -= (int)(gmesa->FrameCount*hsub); y += gmesa->FrameCount*hsub; } } #endif if (h && w) { #if 0 CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, Rectangle2DMode, ((h & 0xfff)<<12) | (w & 0xfff) ); WRITE(gmesa->buf, DrawRectangle2D, ((y & 0xffff)<<16) | (x & 0xffff) ); #else CHECK_DMA_BUFFER(gmesa, 8); WRITE(gmesa->buf, StartXDom, x<<16); WRITE(gmesa->buf, StartY, y<<16); WRITE(gmesa->buf, StartXSub, (x+w)<<16); WRITE(gmesa->buf, GLINTCount, h); WRITE(gmesa->buf, dY, 1<<16); WRITE(gmesa->buf, dXDom, 0<<16); WRITE(gmesa->buf, dXSub, 0<<16); WRITE(gmesa->buf, Render, 0x00000040); /* NOT_DONE */ #endif } } CHECK_DMA_BUFFER(gmesa, 6); WRITE(gmesa->buf, DepthMode, gmesa->DepthMode); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode); WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode); WRITE(gmesa->buf, GLINTWindow, gmesa->Window); WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth); WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable); /* Turn on Depth FCP */ if (gmesa->Window & W_DepthFCP) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, WindowOr, (gmesa->FrameCount << 9)); } /* Turn off GID clipping if window is not clipped */ if (gmesa->NotClipped) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, Rectangle2DControl, 0); } } if (mask & (BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT)) { int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h; int x = gmesa->driDrawable->x; int w = gmesa->driDrawable->w; int h = gmesa->driDrawable->h; mask &= ~(BUFFER_BIT_FRONT_LEFT | BUFFER_BIT_BACK_LEFT); if (x < 0) { w -= -x; x = 0; } /* Turn on GID clipping if window is clipped */ if (!gmesa->NotClipped) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, Rectangle2DControl, 1); } CHECK_DMA_BUFFER(gmesa, 18); WRITE(gmesa->buf, FBBlockColor, gmesa->ClearColor); WRITE(gmesa->buf, ColorDDAMode, ColorDDADisable); WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable); WRITE(gmesa->buf, DepthMode, 0); WRITE(gmesa->buf, DeltaMode, 0); WRITE(gmesa->buf, AlphaBlendMode, 0); #if 1 WRITE(gmesa->buf, dY, 1<<16); WRITE(gmesa->buf, dXDom, 0<<16); WRITE(gmesa->buf, dXSub, 0<<16); WRITE(gmesa->buf, StartXSub, (x+w)<<16); WRITE(gmesa->buf, GLINTCount, h); WRITE(gmesa->buf, StartXDom, x<<16); WRITE(gmesa->buf, StartY, y<<16); WRITE(gmesa->buf, Render, 0x00000048); /* NOT_DONE */ #else WRITE(gmesa->buf, Rectangle2DMode, (((h & 0xfff)<<12) | (w & 0xfff))); WRITE(gmesa->buf, DrawRectangle2D, (((y & 0xffff)<<16) | (x & 0xffff))); #endif WRITE(gmesa->buf, DepthMode, gmesa->DepthMode); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode); WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode); WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode); /* Turn off GID clipping if window is clipped */ if (gmesa->NotClipped) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, Rectangle2DControl, 0); } } #ifdef DO_VALIDATE PROCESS_DMA_BUFFER_TOP_HALF(gmesa); DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock, gmesa->driScreen->drawLockID); VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa); PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa); #endif if ( mask ) _swrast_Clear( ctx, mask, all, cx, cy, cw, ch ); }
/* * Load the current context's state into the hardware. * * NOTE: Be VERY careful about ensuring the context state is marked for * upload, the only place it shouldn't be uploaded is when the setup * state has changed in ReducedPrimitiveChange as this comes right after * a state update. * * Blits of any type should always upload the context and masks after * they are done. */ void gammaEmitHwState( gammaContextPtr gmesa ) { if (!gmesa->driDrawable) return; if (!gmesa->dirty) return; #ifdef DO_VALIDATE /* Flush any partially filled buffers */ FLUSH_DMA_BUFFER(gmesa); DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock, gmesa->driScreen->drawLockID); VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa); #endif if (gmesa->dirty & GAMMA_UPLOAD_VIEWPORT) { gmesa->dirty &= ~GAMMA_UPLOAD_VIEWPORT; CHECK_DMA_BUFFER(gmesa, 6); WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->ViewportOffsetX); WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->ViewportOffsetY); WRITEF(gmesa->buf, ViewPortOffsetZ, gmesa->ViewportOffsetZ); WRITEF(gmesa->buf, ViewPortScaleX, gmesa->ViewportScaleX); WRITEF(gmesa->buf, ViewPortScaleY, gmesa->ViewportScaleY); WRITEF(gmesa->buf, ViewPortScaleZ, gmesa->ViewportScaleZ); } if ( (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) || (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) || (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) ) { CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode); } if (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) { gmesa->dirty &= ~GAMMA_UPLOAD_POINTMODE; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, PointMode, gmesa->PointMode); } if (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) { gmesa->dirty &= ~GAMMA_UPLOAD_LINEMODE; CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, LineMode, gmesa->LineMode); WRITE(gmesa->buf, LineStippleMode, gmesa->LineMode); } if (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) { gmesa->dirty &= ~GAMMA_UPLOAD_TRIMODE; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode); } if (gmesa->dirty & GAMMA_UPLOAD_FOG) { GLchan c[3], col; UNCLAMPED_FLOAT_TO_RGB_CHAN( c, gmesa->glCtx->Fog.Color ); col = gammaPackColor(4, c[0], c[1], c[2], 0); gmesa->dirty &= ~GAMMA_UPLOAD_FOG; CHECK_DMA_BUFFER(gmesa, 5); #if 0 WRITE(gmesa->buf, FogMode, gmesa->FogMode); WRITE(gmesa->buf, FogColor, col); WRITEF(gmesa->buf, FStart, gmesa->glCtx->Fog.Start); #endif WRITEF(gmesa->buf, FogEnd, gmesa->glCtx->Fog.End); WRITEF(gmesa->buf, FogDensity, gmesa->glCtx->Fog.Density); WRITEF(gmesa->buf, FogScale, 1.0f/(gmesa->glCtx->Fog.End - gmesa->glCtx->Fog.Start)); } if (gmesa->dirty & GAMMA_UPLOAD_DITHER) { gmesa->dirty &= ~GAMMA_UPLOAD_DITHER; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, DitherMode, gmesa->DitherMode); } if (gmesa->dirty & GAMMA_UPLOAD_LOGICOP) { gmesa->dirty &= ~GAMMA_UPLOAD_LOGICOP; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode); } if (gmesa->dirty & GAMMA_UPLOAD_CLIP) { gmesa->dirty &= ~GAMMA_UPLOAD_CLIP; CHECK_DMA_BUFFER(gmesa, 3); WRITE(gmesa->buf, ScissorMinXY, gmesa->ScissorMinXY); WRITE(gmesa->buf, ScissorMaxXY, gmesa->ScissorMaxXY); WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode); } if (gmesa->dirty & GAMMA_UPLOAD_MASKS) { gmesa->dirty &= ~GAMMA_UPLOAD_MASKS; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, FBHardwareWriteMask, gmesa->FBHardwareWriteMask); } if (gmesa->dirty & GAMMA_UPLOAD_ALPHA) { gmesa->dirty &= ~GAMMA_UPLOAD_ALPHA; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode); } if (gmesa->dirty & GAMMA_UPLOAD_BLEND) { gmesa->dirty &= ~GAMMA_UPLOAD_BLEND; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode); } CHECK_DMA_BUFFER(gmesa, 1); if (gmesa->glCtx->Color.BlendEnabled || gmesa->glCtx->Color.AlphaEnabled) { WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode | gmesa->AB_FBReadMode_Save); } else { WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode); } if (gmesa->dirty & GAMMA_UPLOAD_LIGHT) { gmesa->dirty &= ~GAMMA_UPLOAD_LIGHT; CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, LightingMode, gmesa->LightingMode); WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode); } if (gmesa->dirty & GAMMA_UPLOAD_SHADE) { gmesa->dirty &= ~GAMMA_UPLOAD_SHADE; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode); } if (gmesa->dirty & GAMMA_UPLOAD_POLYGON) { gmesa->dirty &= ~GAMMA_UPLOAD_POLYGON; CHECK_DMA_BUFFER(gmesa, 2); WRITEF(gmesa->buf, PolygonOffsetBias, gmesa->glCtx->Polygon.OffsetUnits); WRITEF(gmesa->buf, PolygonOffsetFactor, gmesa->glCtx->Polygon.OffsetFactor); } if (gmesa->dirty & GAMMA_UPLOAD_STIPPLE) { gmesa->dirty &= ~GAMMA_UPLOAD_STIPPLE; CHECK_DMA_BUFFER(gmesa, 33); WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode); WRITE(gmesa->buf, AreaStipplePattern0, gmesa->glCtx->PolygonStipple[0]); WRITE(gmesa->buf, AreaStipplePattern1, gmesa->glCtx->PolygonStipple[1]); WRITE(gmesa->buf, AreaStipplePattern2, gmesa->glCtx->PolygonStipple[2]); WRITE(gmesa->buf, AreaStipplePattern3, gmesa->glCtx->PolygonStipple[3]); WRITE(gmesa->buf, AreaStipplePattern4, gmesa->glCtx->PolygonStipple[4]); WRITE(gmesa->buf, AreaStipplePattern5, gmesa->glCtx->PolygonStipple[5]); WRITE(gmesa->buf, AreaStipplePattern6, gmesa->glCtx->PolygonStipple[6]); WRITE(gmesa->buf, AreaStipplePattern7, gmesa->glCtx->PolygonStipple[7]); WRITE(gmesa->buf, AreaStipplePattern8, gmesa->glCtx->PolygonStipple[8]); WRITE(gmesa->buf, AreaStipplePattern9, gmesa->glCtx->PolygonStipple[9]); WRITE(gmesa->buf, AreaStipplePattern10, gmesa->glCtx->PolygonStipple[10]); WRITE(gmesa->buf, AreaStipplePattern11, gmesa->glCtx->PolygonStipple[11]); WRITE(gmesa->buf, AreaStipplePattern12, gmesa->glCtx->PolygonStipple[12]); WRITE(gmesa->buf, AreaStipplePattern13, gmesa->glCtx->PolygonStipple[13]); WRITE(gmesa->buf, AreaStipplePattern14, gmesa->glCtx->PolygonStipple[14]); WRITE(gmesa->buf, AreaStipplePattern15, gmesa->glCtx->PolygonStipple[15]); WRITE(gmesa->buf, AreaStipplePattern16, gmesa->glCtx->PolygonStipple[16]); WRITE(gmesa->buf, AreaStipplePattern17, gmesa->glCtx->PolygonStipple[17]); WRITE(gmesa->buf, AreaStipplePattern18, gmesa->glCtx->PolygonStipple[18]); WRITE(gmesa->buf, AreaStipplePattern19, gmesa->glCtx->PolygonStipple[19]); WRITE(gmesa->buf, AreaStipplePattern20, gmesa->glCtx->PolygonStipple[20]); WRITE(gmesa->buf, AreaStipplePattern21, gmesa->glCtx->PolygonStipple[21]); WRITE(gmesa->buf, AreaStipplePattern22, gmesa->glCtx->PolygonStipple[22]); WRITE(gmesa->buf, AreaStipplePattern23, gmesa->glCtx->PolygonStipple[23]); WRITE(gmesa->buf, AreaStipplePattern24, gmesa->glCtx->PolygonStipple[24]); WRITE(gmesa->buf, AreaStipplePattern25, gmesa->glCtx->PolygonStipple[25]); WRITE(gmesa->buf, AreaStipplePattern26, gmesa->glCtx->PolygonStipple[26]); WRITE(gmesa->buf, AreaStipplePattern27, gmesa->glCtx->PolygonStipple[27]); WRITE(gmesa->buf, AreaStipplePattern28, gmesa->glCtx->PolygonStipple[28]); WRITE(gmesa->buf, AreaStipplePattern29, gmesa->glCtx->PolygonStipple[29]); WRITE(gmesa->buf, AreaStipplePattern30, gmesa->glCtx->PolygonStipple[30]); WRITE(gmesa->buf, AreaStipplePattern31, gmesa->glCtx->PolygonStipple[31]); } if (gmesa->dirty & GAMMA_UPLOAD_DEPTH) { gmesa->dirty &= ~GAMMA_UPLOAD_DEPTH; CHECK_DMA_BUFFER(gmesa, 4); WRITE(gmesa->buf, DepthMode, gmesa->DepthMode); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode); WRITE(gmesa->buf, GLINTWindow,gmesa->Window | (gmesa->FrameCount << 9)); WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode); } if (gmesa->dirty & GAMMA_UPLOAD_GEOMETRY) { gmesa->dirty &= ~GAMMA_UPLOAD_GEOMETRY; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode); } if (gmesa->dirty & GAMMA_UPLOAD_TRANSFORM) { gmesa->dirty &= ~GAMMA_UPLOAD_TRANSFORM; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, TransformMode, gmesa->TransformMode); } if (gmesa->dirty & GAMMA_UPLOAD_TEX0) { gammaTextureObjectPtr curTex = gmesa->CurrentTexObj[0]; gmesa->dirty &= ~GAMMA_UPLOAD_TEX0; if (curTex) { CHECK_DMA_BUFFER(gmesa, 21); WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode | GM_TextureEnable); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode | DM_TextureEnable); WRITE(gmesa->buf, TextureAddressMode, curTex->TextureAddressMode); WRITE(gmesa->buf, TextureReadMode, curTex->TextureReadMode); WRITE(gmesa->buf, TextureColorMode, curTex->TextureColorMode); WRITE(gmesa->buf, TextureFilterMode, curTex->TextureFilterMode); WRITE(gmesa->buf, TextureFormat, curTex->TextureFormat); WRITE(gmesa->buf, GLINTBorderColor, curTex->TextureBorderColor); WRITE(gmesa->buf, TxBaseAddr0, curTex->TextureBaseAddr[0]); WRITE(gmesa->buf, TxBaseAddr1, curTex->TextureBaseAddr[1]); WRITE(gmesa->buf, TxBaseAddr2, curTex->TextureBaseAddr[2]); WRITE(gmesa->buf, TxBaseAddr3, curTex->TextureBaseAddr[3]); WRITE(gmesa->buf, TxBaseAddr4, curTex->TextureBaseAddr[4]); WRITE(gmesa->buf, TxBaseAddr5, curTex->TextureBaseAddr[5]); WRITE(gmesa->buf, TxBaseAddr6, curTex->TextureBaseAddr[6]); WRITE(gmesa->buf, TxBaseAddr7, curTex->TextureBaseAddr[7]); WRITE(gmesa->buf, TxBaseAddr8, curTex->TextureBaseAddr[8]); WRITE(gmesa->buf, TxBaseAddr9, curTex->TextureBaseAddr[9]); WRITE(gmesa->buf, TxBaseAddr10, curTex->TextureBaseAddr[10]); WRITE(gmesa->buf, TxBaseAddr11, curTex->TextureBaseAddr[11]); WRITE(gmesa->buf, TextureCacheControl, (TCC_Enable | TCC_Invalidate)); } else { CHECK_DMA_BUFFER(gmesa, 6); WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode); WRITE(gmesa->buf, TextureAddressMode, TextureAddressModeDisable); WRITE(gmesa->buf, TextureReadMode, TextureReadModeDisable); WRITE(gmesa->buf, TextureFilterMode, TextureFilterModeDisable); WRITE(gmesa->buf, TextureColorMode, TextureColorModeDisable); } } #ifdef DO_VALIDATE PROCESS_DMA_BUFFER_TOP_HALF(gmesa); DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock, gmesa->driScreen->drawLockID); VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa); PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa); #endif }
static void gammaLoadHWMatrix(GLcontext *ctx) { gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); const GLfloat *m; gmesa->TransformMode &= ~XM_XformTexture; switch (ctx->Transform.MatrixMode) { case GL_MODELVIEW: gmesa->TransformMode |= XM_UseModelViewMatrix; m = ctx->ModelviewMatrixStack.Top->m; CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, ModelViewMatrix0, m[0]); WRITEF(gmesa->buf, ModelViewMatrix1, m[1]); WRITEF(gmesa->buf, ModelViewMatrix2, m[2]); WRITEF(gmesa->buf, ModelViewMatrix3, m[3]); WRITEF(gmesa->buf, ModelViewMatrix4, m[4]); WRITEF(gmesa->buf, ModelViewMatrix5, m[5]); WRITEF(gmesa->buf, ModelViewMatrix6, m[6]); WRITEF(gmesa->buf, ModelViewMatrix7, m[7]); WRITEF(gmesa->buf, ModelViewMatrix8, m[8]); WRITEF(gmesa->buf, ModelViewMatrix9, m[9]); WRITEF(gmesa->buf, ModelViewMatrix10, m[10]); WRITEF(gmesa->buf, ModelViewMatrix11, m[11]); WRITEF(gmesa->buf, ModelViewMatrix12, m[12]); WRITEF(gmesa->buf, ModelViewMatrix13, m[13]); WRITEF(gmesa->buf, ModelViewMatrix14, m[14]); WRITEF(gmesa->buf, ModelViewMatrix15, m[15]); break; case GL_PROJECTION: m = ctx->ProjectionMatrixStack.Top->m; CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, ModelViewProjectionMatrix0, m[0]); WRITEF(gmesa->buf, ModelViewProjectionMatrix1, m[1]); WRITEF(gmesa->buf, ModelViewProjectionMatrix2, m[2]); WRITEF(gmesa->buf, ModelViewProjectionMatrix3, m[3]); WRITEF(gmesa->buf, ModelViewProjectionMatrix4, m[4]); WRITEF(gmesa->buf, ModelViewProjectionMatrix5, m[5]); WRITEF(gmesa->buf, ModelViewProjectionMatrix6, m[6]); WRITEF(gmesa->buf, ModelViewProjectionMatrix7, m[7]); WRITEF(gmesa->buf, ModelViewProjectionMatrix8, m[8]); WRITEF(gmesa->buf, ModelViewProjectionMatrix9, m[9]); WRITEF(gmesa->buf, ModelViewProjectionMatrix10, m[10]); WRITEF(gmesa->buf, ModelViewProjectionMatrix11, m[11]); WRITEF(gmesa->buf, ModelViewProjectionMatrix12, m[12]); WRITEF(gmesa->buf, ModelViewProjectionMatrix13, m[13]); WRITEF(gmesa->buf, ModelViewProjectionMatrix14, m[14]); WRITEF(gmesa->buf, ModelViewProjectionMatrix15, m[15]); break; case GL_TEXTURE: m = ctx->TextureMatrixStack[0].Top->m; CHECK_DMA_BUFFER(gmesa, 16); gmesa->TransformMode |= XM_XformTexture; WRITEF(gmesa->buf, TextureMatrix0, m[0]); WRITEF(gmesa->buf, TextureMatrix1, m[1]); WRITEF(gmesa->buf, TextureMatrix2, m[2]); WRITEF(gmesa->buf, TextureMatrix3, m[3]); WRITEF(gmesa->buf, TextureMatrix4, m[4]); WRITEF(gmesa->buf, TextureMatrix5, m[5]); WRITEF(gmesa->buf, TextureMatrix6, m[6]); WRITEF(gmesa->buf, TextureMatrix7, m[7]); WRITEF(gmesa->buf, TextureMatrix8, m[8]); WRITEF(gmesa->buf, TextureMatrix9, m[9]); WRITEF(gmesa->buf, TextureMatrix10, m[10]); WRITEF(gmesa->buf, TextureMatrix11, m[11]); WRITEF(gmesa->buf, TextureMatrix12, m[12]); WRITEF(gmesa->buf, TextureMatrix13, m[13]); WRITEF(gmesa->buf, TextureMatrix14, m[14]); WRITEF(gmesa->buf, TextureMatrix15, m[15]); break; default: /* ERROR!!! -- how did this happen? */ break; } gmesa->dirty |= GAMMA_UPLOAD_TRANSFORM; }
void gammaInitHW( gammaContextPtr gmesa ) { GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv; int i; if (gDRIPriv->numMultiDevices == 2) { /* Set up each MX's ScanLineOwnership for OpenGL */ CHECK_DMA_BUFFER(gmesa, 5); WRITE(gmesa->buf, BroadcastMask, 1); WRITE(gmesa->buf, ScanLineOwnership, 5); /* Use bottom left as [0,0] */ WRITE(gmesa->buf, BroadcastMask, 2); WRITE(gmesa->buf, ScanLineOwnership, 1); /* Use bottom left as [0,0] */ /* Broadcast to both MX's */ WRITE(gmesa->buf, BroadcastMask, 3); FLUSH_DMA_BUFFER(gmesa); } gmesa->AlphaBlendMode = (AlphaBlendModeDisable | AB_Src_One | AB_Dst_Zero | AB_NoAlphaBufferPresent | AB_ColorFmt_8888 | AB_ColorOrder_RGB | AB_OpenGLType | AB_AlphaDst_FBData | AB_ColorConversionScale | AB_AlphaConversionScale); gmesa->DitherMode = DitherModeEnable | DM_ColorOrder_RGB; switch (gmesa->gammaScreen->cpp) { case 2: gmesa->DitherMode |= DM_ColorFmt_5555; gmesa->AlphaBlendMode |= AB_ColorFmt_5555; CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, PixelSize, 1); break; case 4: gmesa->DitherMode |= DM_ColorFmt_8888; gmesa->AlphaBlendMode |= AB_ColorFmt_8888; WRITE(gmesa->buf, PixelSize, 0); break; } /* FIXME for stencil, gid, etc */ switch (gmesa->DepthSize) { case 16: gmesa->LBReadFormat = (LBRF_DepthWidth16 | LBRF_StencilWidth8 | LBRF_StencilPos16 | LBRF_FrameCount8 | LBRF_FrameCountPos24 | LBRF_GIDWidth4 | LBRF_GIDPos32 ); gmesa->LBWriteFormat = (LBRF_DepthWidth16 | LBRF_StencilWidth8 | LBRF_StencilPos16 | LBRF_FrameCount8 | LBRF_FrameCountPos24 | LBRF_GIDWidth4 | LBRF_GIDPos32 ); break; case 24: gmesa->LBReadFormat = (LBRF_DepthWidth24 | LBRF_StencilWidth8 | LBRF_StencilPos24 | LBRF_FrameCount8 | LBRF_FrameCountPos32 | LBRF_GIDWidth4 | LBRF_GIDPos36 ); gmesa->LBWriteFormat = (LBRF_DepthWidth24 | LBRF_StencilWidth8 | LBRF_StencilPos24 | LBRF_FrameCount8 | LBRF_FrameCountPos32 | LBRF_GIDWidth4 | LBRF_GIDPos36 ); break; case 32: gmesa->LBReadFormat = (LBRF_DepthWidth32 | LBRF_StencilWidth8 | LBRF_StencilPos32 | LBRF_FrameCount8 | LBRF_FrameCountPos40 | LBRF_GIDWidth4 | LBRF_GIDPos44 ); gmesa->LBWriteFormat = (LBRF_DepthWidth32 | LBRF_StencilWidth8 | LBRF_StencilPos32 | LBRF_FrameCount8 | LBRF_FrameCountPos40 | LBRF_GIDWidth4 | LBRF_GIDPos44 ); break; } gmesa->FBHardwareWriteMask = 0xffffffff; gmesa->FogMode = FogModeDisable; gmesa->ClearDepth = 0xffffffff; gmesa->AreaStippleMode = AreaStippleModeDisable; gmesa->x = 0; gmesa->y = 0; gmesa->w = 0; gmesa->h = 0; gmesa->FrameCount = 0; gmesa->MatrixMode = GL_MODELVIEW; gmesa->ModelViewCount = 0; gmesa->ProjCount = 0; gmesa->TextureCount = 0; gmesa->PointMode = PM_AntialiasQuality_4x4; gmesa->LineMode = LM_AntialiasQuality_4x4; gmesa->TriangleMode = TM_AntialiasQuality_4x4; gmesa->AntialiasMode = AntialiasModeDisable; for (i = 0; i < 16; i++) if (i % 5 == 0) gmesa->ModelView[i] = gmesa->Proj[i] = gmesa->ModelViewProj[i] = gmesa->Texture[i] = 1.0; else gmesa->ModelView[i] = gmesa->Proj[i] = gmesa->ModelViewProj[i] = gmesa->Texture[i] = 0.0; gmesa->LBReadMode = (LBReadSrcDisable | LBReadDstDisable | LBDataTypeDefault | LBWindowOriginBot | gDRIPriv->pprod); gmesa->FBReadMode = (FBReadSrcDisable | FBReadDstDisable | FBDataTypeDefault | FBWindowOriginBot | gDRIPriv->pprod); if (gDRIPriv->numMultiDevices == 2) { gmesa->LBReadMode |= LBScanLineInt2; gmesa->FBReadMode |= FBScanLineInt2; gmesa->LBWindowBase = gmesa->driScreen->fbWidth * (gmesa->driScreen->fbHeight/2 - 1); gmesa->FBWindowBase = gmesa->driScreen->fbWidth * (gmesa->driScreen->fbHeight/2 - 1); } else { gmesa->LBWindowBase = gmesa->driScreen->fbWidth * (gmesa->driScreen->fbHeight - 1); gmesa->FBWindowBase = gmesa->driScreen->fbWidth * (gmesa->driScreen->fbHeight - 1); } gmesa->Begin = (B_AreaStippleDisable | B_LineStippleDisable | B_AntiAliasDisable | B_TextureDisable | B_FogDisable | B_SubPixelCorrectEnable | B_PrimType_Null); gmesa->ColorDDAMode = (ColorDDAEnable | ColorDDAGouraud); gmesa->GeometryMode = (GM_TextureDisable | GM_FogDisable | GM_FogExp | GM_FrontPolyFill | GM_BackPolyFill | GM_FrontFaceCCW | GM_PolyCullDisable | GM_PolyCullBack | GM_ClipShortLinesDisable | GM_ClipSmallTrisDisable | GM_RenderMode | GM_Feedback2D | GM_CullFaceNormDisable | GM_AutoFaceNormDisable | GM_GouraudShading | GM_UserClipNone | GM_PolyOffsetPointDisable | GM_PolyOffsetLineDisable | GM_PolyOffsetFillDisable | GM_InvertFaceNormCullDisable); gmesa->AlphaTestMode = (AlphaTestModeDisable | AT_Always); gmesa->AB_FBReadMode_Save = gmesa->AB_FBReadMode = 0; gmesa->Window = (WindowEnable | /* For GID testing */ W_PassIfEqual | (0 << 5)); /* GID part is set from draw priv (below) */ gmesa->NotClipped = GL_FALSE; gmesa->WindowChanged = GL_TRUE; gmesa->Texture1DEnabled = GL_FALSE; gmesa->Texture2DEnabled = GL_FALSE; gmesa->DepthMode |= (DepthModeDisable | DM_WriteMask | DM_Less); gmesa->DeltaMode |= (DM_SubPixlCorrectionEnable | DM_SmoothShadingEnable | DM_Target500TXMX); gmesa->LightingMode = LightingModeDisable | LightingModeSpecularEnable; gmesa->Light0Mode = LNM_Off; gmesa->Light1Mode = LNM_Off; gmesa->Light2Mode = LNM_Off; gmesa->Light3Mode = LNM_Off; gmesa->Light4Mode = LNM_Off; gmesa->Light5Mode = LNM_Off; gmesa->Light6Mode = LNM_Off; gmesa->Light7Mode = LNM_Off; gmesa->Light8Mode = LNM_Off; gmesa->Light9Mode = LNM_Off; gmesa->Light10Mode = LNM_Off; gmesa->Light11Mode = LNM_Off; gmesa->Light12Mode = LNM_Off; gmesa->Light13Mode = LNM_Off; gmesa->Light14Mode = LNM_Off; gmesa->Light15Mode = LNM_Off; gmesa->LogicalOpMode = LogicalOpModeDisable; gmesa->MaterialMode = MaterialModeDisable; gmesa->ScissorMode = UserScissorDisable | ScreenScissorDisable; gmesa->TransformMode = XM_UseModelViewProjMatrix | XM_TexGenModeS_None | XM_TexGenModeT_None | XM_TexGenModeR_None | XM_TexGenModeQ_None; CHECK_DMA_BUFFER(gmesa, 20); WRITE(gmesa->buf, LineStippleMode, 0); WRITE(gmesa->buf, RouterMode, 0); WRITE(gmesa->buf, TextureAddressMode, 0); WRITE(gmesa->buf, TextureReadMode, 0); WRITE(gmesa->buf, TextureFilterMode, 0); WRITE(gmesa->buf, TextureColorMode, 0); WRITE(gmesa->buf, StencilMode, 0); WRITE(gmesa->buf, PatternRamMode, 0); WRITE(gmesa->buf, ChromaTestMode, 0); WRITE(gmesa->buf, StatisticMode, 0); WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode); WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode); WRITE(gmesa->buf, FogMode, gmesa->FogMode); WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode); WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode); WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode); WRITE(gmesa->buf, PointMode, gmesa->PointMode); WRITE(gmesa->buf, LineMode, gmesa->LineMode); WRITE(gmesa->buf, LBWriteFormat, gmesa->LBWriteFormat); WRITE(gmesa->buf, LBReadFormat, gmesa->LBReadFormat); /* Framebuffer initialization */ CHECK_DMA_BUFFER(gmesa, 10); WRITE(gmesa->buf, FBSourceData, 0); WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode); if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER) { if (gDRIPriv->numMultiDevices == 2) { WRITE(gmesa->buf, FBPixelOffset, (gmesa->driScreen->fbHeight/2)*gmesa->driScreen->fbWidth); } else { WRITE(gmesa->buf, FBPixelOffset, gmesa->driScreen->fbHeight*gmesa->driScreen->fbWidth); } } else WRITE(gmesa->buf, FBPixelOffset, 0); WRITE(gmesa->buf, FBSourceOffset, 0); WRITE(gmesa->buf, FBHardwareWriteMask, 0xffffffff); WRITE(gmesa->buf, FBSoftwareWriteMask, 0xffffffff); WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable); WRITE(gmesa->buf, FBWindowBase, gmesa->FBWindowBase); WRITE(gmesa->buf, ScreenSize, ((gmesa->driScreen->fbHeight << 16) | (gmesa->driScreen->fbWidth))); WRITE(gmesa->buf, WindowOrigin, 0x00000000); /* Localbuffer initialization */ CHECK_DMA_BUFFER(gmesa, 5); WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode); WRITE(gmesa->buf, LBSourceOffset, 0); WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable); WRITE(gmesa->buf, LBWindowOffset, 0); WRITE(gmesa->buf, LBWindowBase, gmesa->LBWindowBase); CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, Rectangle2DControl, 1); CHECK_DMA_BUFFER(gmesa, 11); WRITE(gmesa->buf, DepthMode, gmesa->DepthMode); WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode); WRITE(gmesa->buf, FBBlockColor, 0x00000000); WRITE(gmesa->buf, ConstantColor, 0x00000000); WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode); WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode); WRITE(gmesa->buf, DitherMode, gmesa->DitherMode); if (gDRIPriv->numMultiDevices == 2) WRITE(gmesa->buf, RasterizerMode, RM_MultiGLINT | RM_BiasCoordNearHalf); else WRITE(gmesa->buf, RasterizerMode, RM_BiasCoordNearHalf); WRITE(gmesa->buf, GLINTWindow, gmesa->Window); WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth); WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth); CHECK_DMA_BUFFER(gmesa, 1); WRITE(gmesa->buf, EdgeFlag, EdgeFlagEnable); CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, ModelViewMatrix0, 1.0); WRITEF(gmesa->buf, ModelViewMatrix1, 0.0); WRITEF(gmesa->buf, ModelViewMatrix2, 0.0); WRITEF(gmesa->buf, ModelViewMatrix3, 0.0); WRITEF(gmesa->buf, ModelViewMatrix4, 0.0); WRITEF(gmesa->buf, ModelViewMatrix5, 1.0); WRITEF(gmesa->buf, ModelViewMatrix6, 0.0); WRITEF(gmesa->buf, ModelViewMatrix7, 0.0); WRITEF(gmesa->buf, ModelViewMatrix8, 0.0); WRITEF(gmesa->buf, ModelViewMatrix9, 0.0); WRITEF(gmesa->buf, ModelViewMatrix10, 1.0); WRITEF(gmesa->buf, ModelViewMatrix11, 0.0); WRITEF(gmesa->buf, ModelViewMatrix12, 0.0); WRITEF(gmesa->buf, ModelViewMatrix13, 0.0); WRITEF(gmesa->buf, ModelViewMatrix14, 0.0); WRITEF(gmesa->buf, ModelViewMatrix15, 1.0); CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, ModelViewProjectionMatrix0, 1.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix1, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix2, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix3, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix4, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix5, 1.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix6, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix7, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix8, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix9, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix10, 1.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix11, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix12, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix13, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix14, 0.0); WRITEF(gmesa->buf, ModelViewProjectionMatrix15, 1.0); CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, TextureMatrix0, 1.0); WRITEF(gmesa->buf, TextureMatrix1, 0.0); WRITEF(gmesa->buf, TextureMatrix2, 0.0); WRITEF(gmesa->buf, TextureMatrix3, 0.0); WRITEF(gmesa->buf, TextureMatrix4, 0.0); WRITEF(gmesa->buf, TextureMatrix5, 1.0); WRITEF(gmesa->buf, TextureMatrix6, 0.0); WRITEF(gmesa->buf, TextureMatrix7, 0.0); WRITEF(gmesa->buf, TextureMatrix8, 0.0); WRITEF(gmesa->buf, TextureMatrix9, 0.0); WRITEF(gmesa->buf, TextureMatrix10, 1.0); WRITEF(gmesa->buf, TextureMatrix11, 0.0); WRITEF(gmesa->buf, TextureMatrix12, 0.0); WRITEF(gmesa->buf, TextureMatrix13, 0.0); WRITEF(gmesa->buf, TextureMatrix14, 0.0); WRITEF(gmesa->buf, TextureMatrix15, 1.0); CHECK_DMA_BUFFER(gmesa, 16); WRITEF(gmesa->buf, TexGen0, 0.0); WRITEF(gmesa->buf, TexGen1, 0.0); WRITEF(gmesa->buf, TexGen2, 0.0); WRITEF(gmesa->buf, TexGen3, 0.0); WRITEF(gmesa->buf, TexGen4, 0.0); WRITEF(gmesa->buf, TexGen5, 0.0); WRITEF(gmesa->buf, TexGen6, 0.0); WRITEF(gmesa->buf, TexGen7, 0.0); WRITEF(gmesa->buf, TexGen8, 0.0); WRITEF(gmesa->buf, TexGen9, 0.0); WRITEF(gmesa->buf, TexGen10, 0.0); WRITEF(gmesa->buf, TexGen11, 0.0); WRITEF(gmesa->buf, TexGen12, 0.0); WRITEF(gmesa->buf, TexGen13, 0.0); WRITEF(gmesa->buf, TexGen14, 0.0); WRITEF(gmesa->buf, TexGen15, 0.0); CHECK_DMA_BUFFER(gmesa, 9); WRITEF(gmesa->buf, NormalMatrix0, 1.0); WRITEF(gmesa->buf, NormalMatrix1, 0.0); WRITEF(gmesa->buf, NormalMatrix2, 0.0); WRITEF(gmesa->buf, NormalMatrix3, 0.0); WRITEF(gmesa->buf, NormalMatrix4, 1.0); WRITEF(gmesa->buf, NormalMatrix5, 0.0); WRITEF(gmesa->buf, NormalMatrix6, 0.0); WRITEF(gmesa->buf, NormalMatrix7, 0.0); WRITEF(gmesa->buf, NormalMatrix8, 1.0); CHECK_DMA_BUFFER(gmesa, 3); WRITEF(gmesa->buf, FogDensity, 0.0); WRITEF(gmesa->buf, FogEnd, 0.0); WRITEF(gmesa->buf, FogScale, 0.0); CHECK_DMA_BUFFER(gmesa, 2); WRITEF(gmesa->buf, LineClipLengthThreshold, 0.0); WRITEF(gmesa->buf, TriangleClipAreaThreshold, 0.0); CHECK_DMA_BUFFER(gmesa, 5); WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode); WRITE(gmesa->buf, NormalizeMode, NormalizeModeDisable); WRITE(gmesa->buf, LightingMode, gmesa->LightingMode); WRITE(gmesa->buf, ColorMaterialMode, ColorMaterialModeDisable); WRITE(gmesa->buf, MaterialMode, MaterialModeDisable); CHECK_DMA_BUFFER(gmesa, 2); WRITE(gmesa->buf, FrontSpecularExponent, 0); /* fixed point */ WRITE(gmesa->buf, BackSpecularExponent, 0); /* fixed point */ CHECK_DMA_BUFFER(gmesa, 29); WRITEF(gmesa->buf, FrontAmbientColorRed, 0.2); WRITEF(gmesa->buf, FrontAmbientColorGreen, 0.2); WRITEF(gmesa->buf, FrontAmbientColorBlue, 0.2); WRITEF(gmesa->buf, BackAmbientColorRed, 0.2); WRITEF(gmesa->buf, BackAmbientColorGreen, 0.2); WRITEF(gmesa->buf, BackAmbientColorBlue, 0.2); WRITEF(gmesa->buf, FrontDiffuseColorRed, 0.8); WRITEF(gmesa->buf, FrontDiffuseColorGreen, 0.8); WRITEF(gmesa->buf, FrontDiffuseColorBlue, 0.8); WRITEF(gmesa->buf, BackDiffuseColorRed, 0.8); WRITEF(gmesa->buf, BackDiffuseColorGreen, 0.8); WRITEF(gmesa->buf, BackDiffuseColorBlue, 0.8); WRITEF(gmesa->buf, FrontSpecularColorRed, 0.0); WRITEF(gmesa->buf, FrontSpecularColorGreen, 0.0); WRITEF(gmesa->buf, FrontSpecularColorBlue, 0.0); WRITEF(gmesa->buf, BackSpecularColorRed, 0.0); WRITEF(gmesa->buf, BackSpecularColorGreen, 0.0); WRITEF(gmesa->buf, BackSpecularColorBlue, 0.0); WRITEF(gmesa->buf, FrontEmissiveColorRed, 0.0); WRITEF(gmesa->buf, FrontEmissiveColorGreen, 0.0); WRITEF(gmesa->buf, FrontEmissiveColorBlue, 0.0); WRITEF(gmesa->buf, BackEmissiveColorRed, 0.0); WRITEF(gmesa->buf, BackEmissiveColorGreen, 0.0); WRITEF(gmesa->buf, BackEmissiveColorBlue, 0.0); WRITEF(gmesa->buf, SceneAmbientColorRed, 0.2); WRITEF(gmesa->buf, SceneAmbientColorGreen, 0.2); WRITEF(gmesa->buf, SceneAmbientColorBlue, 0.2); WRITEF(gmesa->buf, FrontAlpha, 1.0); WRITEF(gmesa->buf, BackAlpha, 1.0); CHECK_DMA_BUFFER(gmesa, 7); WRITE(gmesa->buf, PointSize, 1); WRITEF(gmesa->buf, AApointSize, 1.0); WRITE(gmesa->buf, LineWidth, 1); WRITEF(gmesa->buf, AAlineWidth, 1.0); WRITE(gmesa->buf, LineWidthOffset, 0); WRITE(gmesa->buf, TransformMode, gmesa->TransformMode); WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode); CHECK_DMA_BUFFER(gmesa, 16); WRITE(gmesa->buf, Light0Mode, LNM_Off); WRITE(gmesa->buf, Light1Mode, LNM_Off); WRITE(gmesa->buf, Light2Mode, LNM_Off); WRITE(gmesa->buf, Light3Mode, LNM_Off); WRITE(gmesa->buf, Light4Mode, LNM_Off); WRITE(gmesa->buf, Light5Mode, LNM_Off); WRITE(gmesa->buf, Light6Mode, LNM_Off); WRITE(gmesa->buf, Light7Mode, LNM_Off); WRITE(gmesa->buf, Light8Mode, LNM_Off); WRITE(gmesa->buf, Light9Mode, LNM_Off); WRITE(gmesa->buf, Light10Mode, LNM_Off); WRITE(gmesa->buf, Light11Mode, LNM_Off); WRITE(gmesa->buf, Light12Mode, LNM_Off); WRITE(gmesa->buf, Light13Mode, LNM_Off); WRITE(gmesa->buf, Light14Mode, LNM_Off); WRITE(gmesa->buf, Light15Mode, LNM_Off); CHECK_DMA_BUFFER(gmesa, 22); WRITEF(gmesa->buf, Light0AmbientIntensityBlue, 0.0); WRITEF(gmesa->buf, Light0AmbientIntensityGreen, 0.0); WRITEF(gmesa->buf, Light0AmbientIntensityRed, 0.0); WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, 1.0); WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, 1.0); WRITEF(gmesa->buf, Light0DiffuseIntensityRed, 1.0); WRITEF(gmesa->buf, Light0SpecularIntensityBlue, 1.0); WRITEF(gmesa->buf, Light0SpecularIntensityGreen, 1.0); WRITEF(gmesa->buf, Light0SpecularIntensityRed, 1.0); WRITEF(gmesa->buf, Light0SpotlightDirectionZ, 0.0); WRITEF(gmesa->buf, Light0SpotlightDirectionY, 0.0); WRITEF(gmesa->buf, Light0SpotlightDirectionX, -1.0); WRITEF(gmesa->buf, Light0SpotlightExponent, 0.0); WRITEF(gmesa->buf, Light0PositionZ, 0.0); WRITEF(gmesa->buf, Light0PositionY, 0.0); WRITEF(gmesa->buf, Light0PositionX, 1.0); WRITEF(gmesa->buf, Light0PositionW, 0.0); WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, -1.0); WRITEF(gmesa->buf, Light0ConstantAttenuation, 1.0); WRITEF(gmesa->buf, Light0LinearAttenuation, 0.0); WRITEF(gmesa->buf, Light0QuadraticAttenuation,0.0); CHECK_DMA_BUFFER(gmesa, 2); WRITEF(gmesa->buf, XBias, 0.0); WRITEF(gmesa->buf, YBias, 0.0); CHECK_DMA_BUFFER(gmesa, 6); WRITEF(gmesa->buf, ViewPortScaleX, gmesa->driScreen->fbWidth/4); WRITEF(gmesa->buf, ViewPortScaleY, gmesa->driScreen->fbHeight/4); WRITEF(gmesa->buf, ViewPortScaleZ, 1.0f); WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->x); WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->y); WRITEF(gmesa->buf, ViewPortOffsetZ, 0.0f); CHECK_DMA_BUFFER(gmesa, 3); WRITEF(gmesa->buf, Nz, 1.0); WRITEF(gmesa->buf, Ny, 0.0); WRITEF(gmesa->buf, Nx, 0.0); /* Send the initialization commands to the HW */ FLUSH_DMA_BUFFER(gmesa); }