e1 = major;
by e1 = minor;
fixes the bug. Fix committed to CVS.
Thomas
Kevin Brosius wrote:
Klaus Peichl wrote:
Thomas Winischhofer wrote:
Apparently, after looking into the 3.3.6 code, the first generations of S3 do support Bresenham lines after all.
What I see from comparing the code is that the 3.3.6 version does a lot of stuff to reduce the error term to 12 bit which is the hardware's maximum.
The 4.x code, although demanding a 12bit Bresenham error term from XAA, simply adds the given minor and error term and writes the result to the hardware register, without checking it for overflows. I don't know what values this function is given, but in case the values are somewhat big, this may result in a completely wrong error term. The result may very well look like what the original poster saw, namely lines with a wrong slope.
Furthermore, I think the way the error term, e1 and e2 values are calculated differ:
3.3:
(deltas: adx = x2 - x1; ady = y2 - y1)
if (adx > ady) { axis = X_AXIS; <-- x is major axis; adx=major > ady=minor e1 = ady << 1; e2 = e1 - (adx << 1); e = e1 - adx; } else { axis = Y_AXIS; <-- y is major axis; adx=minor < ady=major e1 = adx << 1; e2 = e1 - (ady << 1); e = e1 - ady; ... }
Simply put, if I understood that right, this does
e1 = minor; e2 = minor - major;
4.x:
Here it looks like this:
e1 = major; e2 = minor - major;
Would be interesting to know what impact this difference has. If anybody's interested, I could compile the driver with that change and send out the binary.
That would be great! Will the binary be a replacement for /usr/bin/X11/XFree86 or will I have to change something else to test it?
The default XFree86 binary is a module loader, using drivers in /usr/X11R6/lib/modules/drivers/ by default. Thomas would likely provide you a s3.o module you could swap with your existing driver.
-- Thomas Winischhofer Vienna/Austria thomas AT winischhofer DOT net http://www.winischhofer.net/ twini AT xfree86 DOT org
_______________________________________________ XFree86 mailing list XFree86@xxxxxxxxxxx http://XFree86.Org/mailman/listinfo/xfree86