http://bugs.freedesktop.org/show_bug.cgi?id=16384

           Summary: damage report after operation leaves artefacts on the
                    screen
           Product: Mesa
           Version: unspecified
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: medium
         Component: Drivers/DRI/Radeon
        AssignedTo: [email protected]
        ReportedBy: [EMAIL PROTECTED]


Created an attachment (id=17159)
 --> (http://bugs.freedesktop.org/attachment.cgi?id=17159)
0001-Report-damage-before-modifying-the-area-not-after.patch

Using two cursors (the second of which is SW rendered) can lead artefacts on
the screen when moving windows around. Reproducable simply with compiz, current
xserver git master, and by creating two cursors to, well, move windows around.

I compared SW cursor redrawing with and without a composite manager, the
artefacts are created when the cursor rendering restores the previously
buffered image in miSpriteRemoveCursor after a call to miSpriteReportDamage.
Here's a backtrace:

(gdb) bt
#0  miSpriteRemoveCursor (pDev=0x88f9c38, pScreen=0x8275790) at misprite.c:887
#1  0x081527ca in miSpriteReportDamage (pDamage=0x829fbe8, pRegion=0xbfc0d228,
closure=0x8275790) at misprite.c:172
#2  0x081c0488 in DamageReportDamage (pDamage=0x829fbe8,
pDamageRegion=0xbfc0d228) at damage.c:128
#3  0x081c09ba in damageDamageRegion (pDrawable=0x8520018, pRegion=0xbfc0d2b0,
clip=0, subWindowMode=-1) at damage.c:308
#4  0x081c5d16 in DamageDamageRegion (pDrawable=0x8520018, pRegion=0xbfc0d2b0)
at damage.c:1943
#5  0xb7aa3087 in __glXReportDamage (driDraw=0x8496098, x=0, y=0,
rects=0xbfc0d330, num_rects=1, front_buffer=1 '\001', data=0x84b2508) at
glxdri.c:813
#6  0xaebaf2b9 in driReportDamage (pdp=0x8496098, pClipRects=0xbfc0d330,
numClipRects=1) at ../common/dri_util.c:438
#7  0xaebaf469 in driCopySubBuffer (dPriv=0x8496098, x=441, y=488, w=182,
h=146) at ../common/dri_util.c:518
#8  0xb7aa1bcb in __glXDRIdrawableCopySubBuffer (basePrivate=0x84b2508, x=441,
y=488, w=182, h=146) at glxdri.c:287
#9  0xb7a8dc8c in __glXDisp_CopySubBufferMESA (cl=0x84b4cac, pc=0x8927190 "i")
at glxcmds.c:1631
#10 0xb7a8f168 in __glXDisp_VendorPrivate (cl=0x84b4cac, pc=0x8927184
"\233\020\b") at glxcmds.c:2255
#11 0xb7a941aa in __glXDispatch (client=0x85219a0) at glxext.c:492
#12 0x0808c712 in Dispatch () at dispatch.c:448
#13 0x08071ed4 in main (argc=1, argv=0xbfc0d574, envp=0xbfc0d57c) at main.c:415


Without compiz, a backtrace into miSpriteReportDamage is 
(gdb) bt
#0  miSpriteReportDamage (pDamage=0x829cbe8, pRegion=0xbff9f728,
closure=0x8272790) at misprite.c:152
#1  0x081bdcef in DamageReportDamage (pDamage=0x829cbe8,
pDamageRegion=0xbff9f728) at damage.c:128
#2  0x081be221 in damageDamageRegion (pDrawable=0x84a74a8, pRegion=0xbff9f788,
clip=1, subWindowMode=0) at damage.c:308
#3  0x081be3ed in damageDamageBox (pDrawable=0x84a74a8, pBox=0xbff9f7b8,
subWindowMode=0) at damage.c:358
#4  0x081c1c37 in damagePolyFillArc (pDrawable=0x84a74a8, pGC=0x84a7270,
nArcs=1, pArcs=0x85b8d74) at damage.c:1325
#5  0x080904da in ProcPolyFillArc (client=0x84a6738) at dispatch.c:1806
#6  0x0808c756 in Dispatch () at dispatch.c:448
#7  0x08071f24 in main (argc=1, argv=0xbff9f964, envp=0xbff9f96c) at main.c:415


The big difference here is that w/o mesa, the damage is reported _before_ the
operation occurs, whereas mesa reports it _after_ the operation, leading the
server to draw out-dated data when restoring what was behind the cursor.

The patch fixes the problem for me so far, but airlied mentioned that this may
leave artefacts with delayed rendering.


-- 
Configure bugmail: http://bugs.freedesktop.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
--
_______________________________________________
Dri-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to