Commit Graph

107 Commits

Author SHA1 Message Date
Eric Anholt
7106a77df3 Fix bugs in support for new repeatTypes in XAA and EXA.
EXA now won't pass pictures with new repeatTypes to drivers.  We can add a flag
for them to support it at a later time.
2006-07-03 16:41:44 +02:00
Jens Granseuer
179737d4a0 Bug 7145: fix build with gcc 2.95 & other c89 compilers
Move variable declarations to start of blocks as required by c89
2006-06-30 15:56:40 -07:00
Eric Anholt
48c871564d Move EXA_PM_IS_SOLID() to the public API, since drivers will want it frequently. 2006-06-26 15:57:32 +02:00
George Fufutos
afb84c2fca Bug #6911: Check return value of exaGetPixelFromRGBA(). 2006-06-24 15:23:14 +02:00
Michel Dänzer
930b9a069a Bug #6818: Avoid infinite loop in exaLog2() with negative arguments. 2006-06-24 15:21:17 +02:00
Eric Anholt
520c80f4b8 Don't forget to step the rows when verifying the equivalence of fb/sys areas.
This is only used by fakexa, but we would have missed some errors without this
fix.
2006-06-19 15:11:55 -07:00
Eric Anholt
6aaf0e5b58 Add options to disable EXA acceleration for Composite/UTS/DFS, and always print
out how much memory EXA is managing for offscreen pixmaps.
2006-06-18 19:47:51 -07:00
Alan Coopersmith
1e8a594957 Fix Solaris build with Sun compilers to work when exa is built before
hw/xfree86/os-support/solaris (as it is by default now).
2006-05-02 01:37:25 +00:00
Adam Jackson
291e89d4f2 Remove NEED_LINEHELPER BC cruft for pre-R6 DDXes. 2006-04-30 19:16:14 +00:00
Eric Anholt
fdcacc5a4b Add Polylines and PolyPoint acceleration as well. This is primarily to
clean up fallback debugging output, so I can focus on more imporant
    cases. Performance is comparable but without hardware stalls, and
    passes Xlib9.
2006-04-28 03:27:12 +00:00
Eric Anholt
005529a1c9 Correct some bugs causing performance issues in the "Smart" scheme. 2006-04-28 03:26:30 +00:00
Eric Anholt
8738bc295b Improve EXA fallback debugging output to include the locations of pixmaps.
This is being used in tracking down recent compositing performance
    regressions.
2006-04-27 20:27:27 +00:00
Eric Anholt
83b061776a Add trivial PolySegment acceleration for 0-width horizontal/vertical lines,
which still happen somewhat frequently and were cluttering up my
    fallback debugging output. x11perf says it's a major performance win in
    those cases (though probably irrelevant), and it passes Xlib9.
2006-04-27 19:17:34 +00:00
Eric Anholt
69164ec00c In drawing glyphs, shortcut our way to exaComposite instead of going
through the whole CompositePicture stack and doing things like
    computing damage over again. This is a sizeable win for text drawing
    with a compmgr. Also avoid calling down into the server for dealing
    with the scratch pixmap when we are able to do UploadToScreen
    successfully and never need it.
2006-04-27 02:15:19 +00:00
Eric Anholt
3d4ca57b69 Add a helper for the Component Alpha Over case, which breaks the operation
down into an OutReverse and an Add. Turn off the fallback to software
    glyphs when component alpha, now that we expect all (new) drivers to be
    able to support it. Also, make Xephyr fall back in the CA Over case to
    exercise this code. This speeds up my rgb24text and ls -lR in
    gnome-terminal by a factor of 5.
2006-04-26 18:27:40 +00:00
Eric Anholt
6d156c0440 Improve the migration debugging output. 2006-04-26 01:33:15 +00:00
Eric Anholt
eaed7545a2 Fix a bug in the intersection computation that could concievably cause
incorrect results to be returned (but would probably usually be
    over-conservative).
2006-04-26 01:32:55 +00:00
Eric Anholt
5d00859c6e Bug #4668: Check if the lists of glyphs don't have any intersecting glyphs,
and if they all have a maskFormat matching the format of the actual
    glyphs If so, we can avoid the temporary pixmap for accumulating
    glyphs, which reduces the number of operations done, and makes it
    easier on the migration system. This fixes some significant performance
    issues, particularly with subpixel antialiasing. Note that it does
    increase the amount of damage computation which is done, so is not
    always a win with a compositing manager running.
2006-04-25 23:56:17 +00:00
Eric Anholt
074dc9a023 Add an option to verify at the point of migration that pixmaps which aren't
marked dirty are in fact not dirty. This will hopefully help catch
    issues like the previous commit. Leave it on in fakexa.
2006-04-25 16:47:23 +00:00
Eric Anholt
702d9226d5 Don't forget to mark the drawable as dirty in exaPutImage(). Fixes
corruption with drivers that have UTS. (Michel Dänzer)
2006-04-25 15:46:04 +00:00
Eric Anholt
b17a4de83e Add a new migration scheme, called "Smart" for lack of a better name. This
one behaves somewhat between Greedy and Always. It moves in if we can
    accelerate, unless the destination is clean and shouldn't be kept in
    framebuffer according to the score, in which case we migrate out (and
    force-migrate anything where migration is free). This should help fix
    lack of acceleration for drivers without UTS since removing
    exaAsyncPixmapGCOps, and has removed one performance trap with Radeon
    I'd noticed. It is the new default.
2006-04-18 19:14:07 +00:00
Eric Anholt
771b366abe Fix exaGetPixmapFirstPixel to migrate as unaccelerated. Also adds a bit of
fallback debugging info to PolyGlyphBlt.
2006-04-18 18:50:35 +00:00
Donnie Berkholz
0f065059dc Wrap a couple more SDK headers in if XORG, as per Dave Airlie's commit on
2006-01-18.
2006-04-17 07:27:43 +00:00
Eric Anholt
ccca76b808 Clean up warnings and a debug printf. 2006-04-01 23:41:23 +00:00
Eric Anholt
6afa814ab1 Pull out fb's tile handling during fbValidateGC so we can do the necessary
exaPrepare/FinishAccess()es. Revealed by xtest with fakexa.
2006-04-01 23:28:17 +00:00
Eric Anholt
5f95146fcf Export exaPrepare/FinishGC to the rest of EXA, and use it in the ImageGlyph
implementation to avoid unprepared access to the tile. Also, relocate
    the fbGetDrawable to avoid using a stale dest pointer after
    exaSolidBoxClipped() may have migrated it. Revealed by xtest.
2006-04-01 22:35:16 +00:00
Eric Anholt
c720ffe875 Use fb's depth-to-planemask computation, which doesn't suffer from getting
a 1 planemask at depth 32. Fixes Get/PutImage xtest tests.
2006-04-01 22:17:44 +00:00
Eric Anholt
d1e90113fc Don't attempt to Prepare/FinishAccess NULL pDrawables. Exposed by new
gradient testing in rendercheck.
2006-03-31 23:22:29 +00:00
Eric Anholt
2e38fedd29 Add an option to EXA for the DDX to request that EXA hide the pixmap's
devPrivate.ptr when pointing at offscreen memory, outside of
    exaPrepare/FinishAccess(). This was used with fakexa to find (by NULL
    dereference) many instances of un-Prepared CPU access to the
    framebuffer:
- GC tiles used in several ops when fillStyle == FillTiled were never
    Prepared.
- Migration could lead to un-Prepared access to mask data in render's
    Trapezoids and Triangles
- PutImage's UploadToScreen failure fallback failed to Prepare.
2006-03-31 19:41:28 +00:00
Eric Anholt
f480dc797b Revert mistaken commit to exa_unaccel.c. Should have been to
exa_offscreen.c: Correct a typo in debug-only offscreen validation
    code. (Wang Zhenyu)
2006-03-31 19:25:42 +00:00
Eric Anholt
1a8167c1ba Correct a typo in debug-only offscreen validation code. (Wang Zhenyu) 2006-03-31 19:16:51 +00:00
Eric Anholt
759033703c Remove the exaAsyncPixmapGCOps mostly-unaccelerated ops vector, and always
plug in the accelerated one, even if the destination pixmap is
    currently offscreen. This was a leftover from when kaa originally got
    accelerated offscreen pixmap support, and its only concievable use was
    to avoid a little overhead on ops to in-system pixmaps that weren't
    going to get migrated. At this point, we probably care more about just
    getting everything accelerated that we easily can, which should happen
    with the new migration support.
2006-03-30 21:44:36 +00:00
Eric Anholt
b9203dc068 Don't do an extra fallback path for CopyWindow while swappedOut, since
exaCopyNtoN takes care of the fallback anyway, and we don't care about
    the performance of this path.
2006-03-30 21:25:43 +00:00
Eric Anholt
2153fa9748 Bug #2986: Add PutImage acceleration for the ZPixmap, planeMask ~=
FB_ALLONES, bitsPerPixel >= 8, GXcopy cases. With the radeon driver on
    my machine, this gives about 10% speedup in PutImage
10x10 and 500x500, and 40% speedup for 10x10 ShmPutImage, up to 65%
    improvement in 500x500 ShmPutImage. Also fixes a crasher in GetImage
    that slipped in at the last minute.
2006-03-30 05:24:27 +00:00
Eric Anholt
e799dd68e2 Bug #2986: Add acceleration of GetImage using DownloadFromScreen for the
ZPixmap, planeMask ~= FB_ALLONES, bitsPerPixel >= 8 case. I'm pretty
    convinced that this is the only case that we care about at all. Tested
    with xwd -root and xwd on a gnome-terminal, in a composited environment
    or not.
2006-03-29 22:25:17 +00:00
Eric Anholt
14aafc258c Change EXA so that exaMoveOutPixmap() retains the framebuffer copy of the
pixmap, and damage is tracked so that a later exaMoveInPixmap won't
    result in an upload if no upload is necessary. This will likely improve
    the performance of the "Always" migration scheme significantly, and is
    a step in the path to more exact damage tracking between framebuffer
    and system memory.
2006-03-16 18:43:55 +00:00
Eric Anholt
c74464d92c Don't let pinned pixmaps get migrated in when using the "Always" migration
scheme. This notably keeps the visible screen from getting migrated in
    to a new location in framebuffer.
Reported by: Michel Dänzer.
2006-03-15 16:59:45 +00:00
Eric Anholt
c1601717d5 Add a new migration scheme, "always", which will move pixmaps to their
desired location always (unless they don't fit in FB, in which case
    they all get moved out for software rendering). The default remains as
    before, but can be controlled by the MigrationHeuristic xorg.conf
    option (which is intentionally not documented, as it may be
    short-lived). This is part of the exa-damagetrack work, which appears
    stable in testing with fakexa, unlike the work as a whole.
2006-03-15 01:20:08 +00:00
Eric Anholt
a90cff266c Add more doxygen documentation, including notes on WaitMarker() and
MarkSync() that I noticed were needed while reading the VIA driver.
2006-03-15 00:13:52 +00:00
Eric Anholt
693e42114f Move migration logic to a new function, exaDoMigration(). This is largely a
manual conversion to allow for different migration schemes to be
    implemented reasonably, but does include some minor improvements such
    as accounting for pinned pixmaps not being acceleratable, and for our
    current GetImage and GetSpans not being accelerated.
2006-03-14 21:30:12 +00:00
Eric Anholt
d309054780 Pull code for getting the (0,0) pixel from a pixmap out to a separate
function, since it gets repeated (with bad error handling, in one
    case).
2006-03-14 20:38:06 +00:00
Eric Anholt
9ed3463450 Improve doxygen formatting, and attempt to clarify the 1:1 ratio of
successful PrepareCopy()s to DoneCopy()s.
2006-03-12 03:04:52 +00:00
Eric Anholt
9a7fba5fd0 Make exaCopyNtoNTwoDir() call DoneCopy() at the end of each string of
consecutive Copy() calls (rather than exactly once at the end of the
    function).
Reviewed by: jbarnes
2006-03-12 03:02:26 +00:00
Eric Anholt
5b1a7b478f Move the exaDrawableDirty in exaPrepareAccess to exaFinishAccess, which is
after the drawing is done. Previously, a failed PrepareAccess could
    have migrated and cleared the dirty flag before the damage was ever
    done.
2006-03-10 21:32:34 +00:00
Eric Anholt
2bd4110549 Document the restriction on PrepareAccess() failure, from discussion with
benh.
2006-03-10 07:45:25 +00:00
Eric Anholt
7a0f7f7398 Coverity #349: Fall back to software early if pSrc->pDrawable is NULL, or
pMask is non-NULL but pMask->pDrawable is NULL. This prevents NULL
    dereferences on gradients and other Pictures which have no pDrawable.
2006-03-09 23:29:44 +00:00
Eric Anholt
ab35c3fbc1 Do a first pass of doxygen documentation of EXA. This removes the
corresponding pieces of exa-driver.txt, which were becoming stale.
    Hopefully the documentation will stay much more up-to-date this way.
    Many thanks to jbarnes for writing exa-driver.txt which was used a lot
    in writing this documentation.
2006-03-09 23:18:15 +00:00
Eric Anholt
2822cbc1fb Rearrange EXA driver structures so that there's a hope of maintaining ABI
when extending the driver interface. The card and accel structures are
    merged into the ExaDriverRec, which is to be allocated using
    exaDriverAlloc(). The driver structure also grows exa_major and
    exa_minor, which drivers fill in and have checked by EXA
    (double-checking that the driver really did check that the EXA version
    was correct). Removes exaInitCard(), which is replaced by the driver
    filling in the rec by hand, and the exaGetVersion() and related
    EXA_*VERSION which are replaced by always using the XFree86 loadable
    module versioning.
2006-03-09 06:04:07 +00:00
Jesse Barnes
044a3abb38 Add accelerated two directional blt support to EXA 2006-03-01 16:28:34 +00:00
Jesse Barnes
e7f0b84fa7 fix exaInitCard by making it a real function 2006-02-28 05:20:20 +00:00