Re: 4.4.99.902: s3 fails some of xtests
Németh Márton <[email protected]>
| Newsgroups | gmane.comp.xfree86.devel |
|---|---|
| Message-ID | <[email protected]> |
Mark Vojkovich írta:
> On Wed, 2 Mar 2005, Tim Roberts wrote:
>
>
>>Németh Márton wrote:
>>
>>
>>>Hi!
>>>
>>>I've tested 4.5.0RC2 with xtest 4.0.10, see
>>>http://bugs.xfree86.org/show_bug.cgi?id=1557 for details.
>>>
>>>I've attached a test C program which always produces bad rendering
>>>using acceleration, and never if XaaNoScreenToScreenCopy is set
>>>(=without acceleration). The results are also attached.
>>>
>>>Have anyone see souch behaviour?
>>>
>>>Have anyone programers manual about 86c764/765 [Trio32/64/64V+] chip?
>>
>>
>>Is it really only GXclear, GXinvert, and GXset that fail? If so, the
>>diagnosis is pretty easy.
>>
>>For those three ROPs, it's not really a screen-to-screen blit at all:
>>the source surface is not used. Most S3 chips (Savage included) fail if
>>you attempt to use a two-operand bitblt command when the source is not
>>involved. That's why there is an XAA flag specifically for this case.
>>
>>The solution is to add
>> pXAA->ScreenToScreenCopyFlags = ROP_NEEDS_SOURCE;
>> to the S3AccelInitXxx function at the bottom of the file.
>>
>
>
> I don't believe the Trio32/64/64V+ had that problem. That was
> specific to the ViRGE. I'm more inclined to believe that this
> problem is because it's not setting:
>
> pXAA->ScreenToScreenCopyFlags = NO_TRANSPARENCY;
>
> I don't recall the the S3 driver I wrote a long time ago having
> that feature, and you definitely don't want to be using it if you
> support transparency during color expansions. The transparent blit
> feature is really only for chips that don't have a color expansion
> engine for stippling.
>
> If you want to see correct acceleration code for the old S3 chips
> you should dig up the old s3 code in the XFree86 3.3.x XF86_SVGA
> server. I wrote that years ago.
>
I've tested the two settings using xtest 4.0.10 at color depth 16. Here
are my results:
pXAA->ScreenToScreenCopyFlags = ROP_NEEDS_SOURCE;
=> the XCopyArea tests passed
pXAA->ScreenToScreenCopyFlags = NO_TRANSPARENCY;
=> the XCopyArea tests fails the following tests:
- GXclear (6)
- GXinvert (16)
- GXset (21)
Is there any need to set the ROP_NEEDS_SOURCE on S3 Trio64V+ and not on
the other S3 chips or the ROP_NEEDS_SOURCE will work on all S3 cards?
s3virge have an other driver, and uses NO_TRANSPARENCY already.
(What does ROP mean, anyway?)
NMarci
P.S.: My hardware is:
chip:
-----
S3 Trio64V+
P1E3BF
86C765
9650 MB851
TAIWAN
VGA BIOS:
---------
Phoenix S3 TRIO64V+ Enhanced VGA BIOS. Version 1.02-02
Copyright 1987-1992 Phoenix Technologies Ltd.
Copyright 1992-1995 S3 Incorporated.
All Rights Reserved
lspci -v:
---------
0000:00:09.0 VGA compatible controller: S3 Inc. 86c764/765
[Trio32/64/64V+] (rev 54) (prog-if 00 [VGA])
Flags: medium devsel, IRQ 10
Memory at e0000000 (32-bit, non-prefetchable) [size=64M]
s3_accel.patch
(text/plain, 555 B)
--- xc/programs/Xserver/hw/xfree86/drivers/s3/s3_accel.c.orig 2005-03-03 16:22:32.000000000 +0100 +++ xc/programs/Xserver/hw/xfree86/drivers/s3/s3_accel.c 2005-03-04 08:36:04.000000000 +0100 @@ -567,6 +567,7 @@ pXAA->SetupForScreenToScreenCopy = S3SetupForScreenToScreenCopy; pXAA->SubsequentScreenToScreenCopy = S3SubsequentScreenToScreenCopy; + pXAA->ScreenToScreenCopyFlags = ROP_NEEDS_SOURCE; pXAA->SetupForColor8x8PatternFill = S3SetupForColor8x8PatternFill; pXAA->SubsequentColor8x8PatternFillRect = S3SubsequentColor8x8PatternFillRect;