mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-15 08:50:28 +01:00
Get PolygonStipple working.. (or seemingly too). It seems to do the right
things now given the demos I've used and passes glean's paths test.
This commit is contained in:
parent
38595eda39
commit
42cfcce8d4
3 changed files with 10 additions and 44 deletions
|
|
@ -303,8 +303,6 @@ struct via_context_t {
|
|||
GLuint swap_count;
|
||||
GLuint swap_missed_count;
|
||||
|
||||
GLuint stipple[32];
|
||||
|
||||
PFNGLXGETUSTPROC get_ust;
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -542,18 +542,8 @@ static void via_emit_cliprect(viaContextPtr vmesa,
|
|||
vb[4] = ((HC_SubA_HDBBasL << 24) | (offset & 0xFFFFFF));
|
||||
vb[5] = ((HC_SubA_HDBBasH << 24) | ((offset & 0xFF000000)) >> 24);
|
||||
|
||||
/* HSPXYOS seems to be ignored on CLE266, don't emit. This is
|
||||
* required for hardware stipple conformance (as long as we still
|
||||
* have drawXoff).
|
||||
*/
|
||||
if (vmesa->viaScreen->deviceID == VIA_CLE266) {
|
||||
vb[6] = HC_DUMMY;
|
||||
vb[7] = ((HC_SubA_HDBFM << 24) | HC_HDBLoc_Local | format | pitch);
|
||||
}
|
||||
else {
|
||||
vb[6] = ((HC_SubA_HDBFM << 24) | HC_HDBLoc_Local | format | pitch);
|
||||
vb[7] = ((HC_SubA_HSPXYOS << 24) | ((32 - vmesa->drawXoff) << HC_HSPXOS_SHIFT));
|
||||
}
|
||||
vb[6] = ((HC_SubA_HSPXYOS << 24) | ((31 - vmesa->drawXoff) << HC_HSPXOS_SHIFT));
|
||||
vb[7] = ((HC_SubA_HDBFM << 24) | HC_HDBLoc_Local | format | pitch);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ void viaEmitState(viaContextPtr vmesa)
|
|||
}
|
||||
|
||||
if (ctx->Polygon.StippleFlag) {
|
||||
GLuint *stipple = &vmesa->stipple[0];
|
||||
GLuint *stipple = &ctx->PolygonStipple[0];
|
||||
|
||||
BEGIN_RING(38);
|
||||
OUT_RING( HC_HEADER2 );
|
||||
|
|
@ -505,8 +505,8 @@ void viaEmitState(viaContextPtr vmesa)
|
|||
OUT_RING( stipple[0] );
|
||||
OUT_RING( HC_HEADER2 );
|
||||
OUT_RING( (HC_ParaType_NotTex << 16) );
|
||||
OUT_RING( ((HC_SubA_HSPXYOS << 24) | (0x20 - (vmesa->driDrawable->h & 0x1F))) );
|
||||
OUT_RING( ((HC_SubA_HSPXYOS << 24) | (0x20 - (vmesa->driDrawable->h & 0x1F))) );
|
||||
OUT_RING( ((HC_SubA_HSPXYOS << 24) | (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT)));
|
||||
OUT_RING( ((HC_SubA_HSPXYOS << 24) | (((31 - vmesa->drawX) & 0x1f) << HC_HSPXOS_SHIFT)));
|
||||
ADVANCE_RING();
|
||||
}
|
||||
|
||||
|
|
@ -776,25 +776,6 @@ flip_bytes( GLubyte *p, GLuint n )
|
|||
}
|
||||
#endif
|
||||
|
||||
static void viaPolygonStipple( GLcontext *ctx, const GLubyte *mask )
|
||||
{
|
||||
viaContextPtr vmesa = VIA_CONTEXT(ctx);
|
||||
GLubyte *s = (GLubyte *)vmesa->stipple;
|
||||
int i;
|
||||
|
||||
/* Fallback for the CLE266 case. Stipple works on the CLE266, but
|
||||
* the stipple x/y offset registers don't seem to be respected,
|
||||
* meaning that when drawXoff != 0, the stipple is rotated left or
|
||||
* right by a few pixels, giving incorrect results.
|
||||
*/
|
||||
if (vmesa->viaScreen->deviceID == VIA_CLE266) {
|
||||
FALLBACK( vmesa, VIA_FALLBACK_STIPPLE, ctx->Polygon.StippleFlag);
|
||||
} else {
|
||||
for (i=0;i<128;i++)
|
||||
s[i] = mask[i];
|
||||
}
|
||||
}
|
||||
|
||||
void viaInitState(GLcontext *ctx)
|
||||
{
|
||||
viaContextPtr vmesa = VIA_CONTEXT(ctx);
|
||||
|
|
@ -1424,13 +1405,11 @@ static void viaChoosePolygonState(GLcontext *ctx)
|
|||
}
|
||||
}
|
||||
|
||||
if (vmesa->viaScreen->deviceID != VIA_CLE266) {
|
||||
if (ctx->Polygon.StippleFlag) {
|
||||
vmesa->regEnable |= HC_HenSP_MASK;
|
||||
}
|
||||
else {
|
||||
vmesa->regEnable &= ~HC_HenSP_MASK;
|
||||
}
|
||||
if (ctx->Polygon.StippleFlag) {
|
||||
vmesa->regEnable |= HC_HenSP_MASK;
|
||||
}
|
||||
else {
|
||||
vmesa->regEnable &= ~HC_HenSP_MASK;
|
||||
}
|
||||
|
||||
if (ctx->Polygon.CullFlag) {
|
||||
|
|
@ -1634,7 +1613,6 @@ void viaInitStateFuncs(GLcontext *ctx)
|
|||
ctx->Driver.DepthRange = viaDepthRange;
|
||||
ctx->Driver.Viewport = viaViewport;
|
||||
ctx->Driver.Enable = viaEnable;
|
||||
ctx->Driver.PolygonStipple = viaPolygonStipple;
|
||||
|
||||
/* Pixel path fallbacks.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue