[Note Cc's to potentially interested parties added - Neale]
On Wed, 25 Sep 2002, Bill Soudan wrote:
[...]
> One silly thing I noticed is that the code used to write the blitter
> source pitch to the ring buffer in I810SubsequentScreenToScreenCopy:
>
> OUT_RING( pI810->BR[13] & 0xFFFF );
>
> should really only write 13 bits, 14-32 are reserved according to my copy
> of the specs. Does the i810 get cranky about its reserved bits?
Ah, "that's interesting". A few of us have been plagued by a crash which
happens with i810 when running two servers - and goes away when
XaaNoSolidFillRect is set on. In
i810_accel.c:I810SubsequentSolidFillRect() we find:
OUT_RING( pI810->BR[13] );
and
OUT_RING( pI810->BR[16]);
Hmm... similar code fragments...
I810SubsequentScreenToScreenCopy():
===================================8<===================================
{
BEGIN_LP_RING(6);
OUT_RING( BR00_BITBLT_CLIENT | BR00_OP_SRC_COPY_BLT | 0x4 );
OUT_RING( pI810->BR[13] );
OUT_RING( (h << 16) | (w * pI810->cpp));
OUT_RING( pI810->bufferOffset + dst );
OUT_RING( pI810->BR[13] & 0xFFFF );
OUT_RING( pI810->bufferOffset + src );
ADVANCE_LP_RING();
}
===================================8<===================================
I810SubsequentSolidFillRect():
===================================8<===================================
{
BEGIN_LP_RING(6);
OUT_RING( BR00_BITBLT_CLIENT | BR00_OP_COLOR_BLT | 0x3 );
OUT_RING( pI810->BR[13] );
OUT_RING( (h << 16) | (w * pI810->cpp));
OUT_RING( pI810->bufferOffset +
(y * pScrn->displayWidth + x) * pI810->cpp);
OUT_RING( pI810->BR[16]);
OUT_RING( 0 ); /* pad to quadword */
ADVANCE_LP_RING();
}
===================================8<===================================
Any chance that these two problems are different manifestations of the
same coding oversight?
If so, what would be the correct constructs here?
Thanks,
Neale.
_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert