Commit Graph

192 Commits

Author SHA1 Message Date
Dave Airlie 1df1fee82d exa: make sure we set fb_ptr to NULL 2007-10-03 11:56:04 +10:00
Dave Airlie dc90d50008 exa: increase minor version number for pixmap allocation hooks 2007-10-02 14:05:07 +10:00
Kristian Høgsberg f15af2ae60 exa: only setup offscreen allocator if driver doesn't provide CreatePixmap 2007-10-02 14:03:48 +10:00
Dave Airlie ffb58f4fa8 exa: add hooks for drivers to take over pixmap allocation
This adds hooks for the driver to access Create/DestroyPixmap and ModifyPixmapHe
ader.

It allocates a 0 sized pixmap using fb and calls the driver routine to do
work of allocating the actual memory.

ModifyPixmapHeader is mainly required for hooking the screen pixmap which
isn't create by normal methods
2007-10-02 14:03:39 +10:00
Dave Airlie 31555af000 exa: add a pixmap private pointer for drivers to retrieve. 2007-10-02 13:57:55 +10:00
Tilman Sauerbeck cfe549d1ba EXA: Added back the maxPitchPixels initialization code.
This doesn't add real value yet, but it will be useful once I add code
that splits large render operations into smaller parts if necessary.
2007-09-27 22:36:52 +02:00
Michel Dänzer 6d5c1e0d89 EXA: Remove bogus pitch checks.
exaCreatePixmap should handle all cases correctly.
2007-09-27 13:35:23 +02:00
Michel Dänzer 598698678b EXA: Punt for all fallbacks in exaFillRegion*.
Now that PaintWindow is gone, all callers already handle fallbacks.
2007-09-27 13:33:52 +02:00
Michel Dänzer 006f652505 EXA: Make sure tile offsets passed to drivers are never negative.
Thanks to Björn Steinbrink for pointing out the problem on IRC.
2007-09-27 13:30:58 +02:00
Michel Dänzer da7d9aa1fb EXA: Tile offscreen pixmap coordinate offsets are always 0. 2007-09-27 13:30:48 +02:00
Michel Dänzer d6f4764bf5 EXA: Remove some clearly bogus code from exaCopyNtoN.
Not sure what I was thinking when I wrote this... it would cause the box
coordinates to be off for exaCopyNtoNTwoDir or fallbacks.

Thanks to Tilman Sauerbeck for pointing out the problem on IRC and testing the
fix.
2007-09-27 13:29:07 +02:00
Michel Dänzer c7d6d1f589 EXA: Punt on fallback case not handled correctly in exaFillRegionTiled.
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=12520 .
2007-09-27 13:20:45 +02:00
Tilman Sauerbeck 56ffc381d3 EXA: Removed duplicated exaGetDrawablePixmap() calls. 2007-09-26 16:52:27 +02:00
Tilman Sauerbeck ae8b4f7dcf EXA: Added pitch limitations.
Drivers can now specify the max pitches that the accelerator supports.
2007-09-25 16:43:06 +02:00
Tilman Sauerbeck edd8817083 EXA: Check ABI compatibility earlier.
If the driver isn't compatible to the server, all bets are off anyway wrt
the contents of the fields that we're validating, which can lead to bogus
error messages.
2007-09-22 13:52:56 +02:00
Michel Dänzer 547ad2125e EXA: Make sure driver hooks get correct offscreen offsets from exaCopyDirty.
This should ensure the driver UploadTo/DownloadFromScreen hooks can always
work as intended.
2007-09-17 20:40:13 +02:00
Alan Hourihane 56cc24ffb2 EXA: Don't crash in ExaCheckPolyArc.
See https://bugs.freedesktop.org/show_bug.cgi?id=12286 .
2007-09-17 20:40:06 +02:00
Michel Dänzer 7ac89060e0 EXA: Don't crash in exaGetImage when swapped out. 2007-09-17 20:39:59 +02:00
Tilman Sauerbeck 3876c6c805 EXA: Fixed compiler warnings. 2007-09-17 18:47:45 +02:00
Tilman Sauerbeck d5738ff2e0 EXA: Added missing exaPrepare/FinishAccess calls in ExaCheckPushPixels. 2007-09-17 17:42:55 +02:00
Eric Anholt e4d11e58ce Remove the PaintWindow optimization.
This was an attempt to avoid scratch gc creation and validation for paintwin
because that was expensive.  This is not the case in current servers, and the
danger of failure to implement it correctly (as seen in all previous
implementations) is high enough to justify removing it.  No performance
difference detected with x11perf -create -move -resize -circulate on Xvfb.
Leave the screen hooks for PaintWindow* in for now to avoid ABI change.
2007-09-13 00:08:53 +00:00
Michel Dänzer e8093e15c7 EXA: Exclude bits that will be overwritten from migration in exaCopyNtoN.
Also plug a region leak in exaPolyFillRect.
2007-09-07 18:41:33 +02:00
Michel Dänzer e81af8ba64 EXA: exaFillRegion{Solid,Tiled} improvements.
Use region to exclude bits that will be overwritten from migration.

Also make exaFillRegionSolid use the same logic as exaFillRegionTiled.
2007-09-07 18:41:33 +02:00
Michel Dänzer 5f7da4da8d EXA: Use exaShmPutImage for pushing glyphs to scratch pixmap in exaGlyphs. 2007-09-07 18:41:33 +02:00
Michel Dänzer be922b3048 EXA: exa(Shm)PutImage improvements.
Improve exaShmPutImage performance and reuse its core in exaPutImage as it
seems faster than the previous code when the driver doesn't provide an
UploadToScreen hook.

Make sure all damage records are notified of the damage incurred by actual
ShmPutImage calls.

Remove superfluous manual damage tracking for actual PutImage calls.
2007-09-07 18:41:33 +02:00
Michel Dänzer ea92ea4156 EXA: exaGetImage improvements.
Use the new migration infrastructure to cache FB bits we need in the system
copy, for the benefit of repeated calls.
2007-09-07 18:41:32 +02:00
Michel Dänzer aa2ed73e0e EXA: Remove superfluous manual damage tracking.
These should all be covered by damage wrappers.
2007-09-07 18:41:32 +02:00
Michel Dänzer a634c9b034 EXA: RENDER improvements.
Exclude bits that will be overwritten from migration.

Use exaGlyphs even when Composite can't be accelerated, to avoid PolyFillRect
roundtrip via offscreen memory.

Initialize mask pixmap in exaGlyphs in FB in addition to system if the driver
provides Composite hooks to avoid migration overhead.

Remove manual damage tracking where superfluous.
2007-09-07 18:41:32 +02:00
Michel Dänzer 1f457ff3db EXA: Improvements for 1x1 pixmaps.
Initialize system and FB copy in exaFillRegionSolid and adapt
exaGetPixmapFirstPixel to the new migration infrastructure.

This should mostly eliminate migration overhead for these, whether they are
used for acceleration or fallbacks.
2007-09-07 18:41:31 +02:00
Michel Dänzer 489bc7551f EXA: exaImageGlyphBlt improvements.
As we can't actually accelerate anything interesting here, just migrate out
once and call fbSolidBoxClipped instead of taking a round trip via offscreen
memory with exaSolidBoxClipped.

Reuse pending damage region for extents and to prevent any actual migration of
pixmap contents when we're overwriting the whole pending damage region.

Remove superfluous manual damage tracking.
2007-09-07 18:41:31 +02:00
Michel Dänzer 2e0895a4ba EXA: Improvements for trapezoids and triangles.
Only migrate once in exaTrapezoids/Triangles instead of every time in
exaRasterizeTrapezoid/AddTriangles. Adapt manual damage tracking to new
infrastructure.

Also move definition of NeedsComponent() closer to where it's used.
2007-09-07 18:41:31 +02:00
Michel Dänzer 6c9d7ed61b EXA: Hide pixmap pointer outside of exaPrepare/FinishAccess whenever possible.
We finally want to catch all cases where the pixmap pointer is dereferenced
outside of exaPrepare/FinishAccess.

Also fix a couple of such cases exposed by this change.
2007-09-07 18:41:30 +02:00
Michel Dänzer 962eddd7a2 EXA: Support partial migration of pixmap contents between Sys and FB.
The initiator of migration can pass in a region that defines the relevant area
of each source pixmap or the irrelevant area of the destination pixmap. By
default, the pending damage region is assumed relevant for the destination
pixmap, and everything for source pixmaps.

Thanks to Jarno Manninen for reassuring me that my own ideas for this were
feasible and for providing additional ideas.
2007-09-07 18:41:30 +02:00
Michel Dänzer 5c7ee3f47f EXA: Track valid bits in Sys and FB separately.
Also consolidate exaCopyDirtyToFb/Sys.
2007-09-07 18:41:29 +02:00
Michel Dänzer 8cfcf9973c EXA: Migrate out pixmap in exaPrepareAccess.
Also fix exaFinishAccessGC not to use the same index for tile and stipple.
2007-09-07 18:41:29 +02:00
Dave Airlie e510a77ba4 EXA: Add a couple of missing exaPrepare/FinishAccess calls. 2007-09-07 18:41:29 +02:00
Adam Jackson ae7f71a8b3 Implement core protocol backing store exclusively in terms of Composite.
Composite's automatic redirection is a more general mechanism than the
ad-hoc BS machinery, so it's much prettier to implement the one in terms
of the other.  Composite now wraps ChangeWindowAttributes and activates
automatic redirection for windows with backing store requested.  The old
backing store infrastructure is completely gutted: ABI-visible structures
retain the function pointers, but they never get called, and all the
open-coded conditionals throughout the DIX layer to implement BS are gone.

Note that this is still not a strictly complete implementation of backing
store, since Composite will throw the bits away on unmap and therefore
WhenMapped and Always hints are equivalent.
2007-08-25 15:08:20 -04:00
Michel Dänzer b9a806f0b3 exaPolyFillRect: pGC->alu doesn't matter with a single rectangle. 2007-08-24 19:04:55 +02:00
Michel Dänzer d0f0d1092c exaGetImage: Don't migrate pixmap out of FB with no DownloadFromScreen hook.
Based on the assumption that GetImage is relatively rare, so the overhead of
the migration is probably bigger than any potential savings.
2007-08-24 14:10:13 +02:00
Michel Dänzer 5d9e2c2821 EXA: Improve ShmPutImage.
Share as much code with exaPutImage as possible, and fall back to fbShmPutImage
when that fails.
2007-08-24 14:03:14 +02:00
Michel Dänzer c19f227b46 EXA: Only mark offscreen memory as used when it really is. 2007-08-24 13:05:52 +02:00
Eric Anholt bc2d516f16 Fix overly-restrictive integer overflow check in EXA pixmap creation.
The result was that at 32bpp, pixmaps of width 8192 or greater couldn't be
created, due to treating a pitch value as a width.
2007-08-22 08:59:10 -07:00
Fredrik Höglund 3c448b0eb6 EXA: Fix a couple of logic errors in exaGetPixmapFirstPixel.
The fb pointer would be left uninitialized when exaPixmapIsOffscreen
returned false. When it returned true and the pixmap was damaged,
fb would be initialized from the pixmap's devPrivate.ptr before the
exaDoMigration and exaPrepareAccess calls, at which point
devPrivate.ptr would still be pointing at offscreen memory.
2007-08-18 19:02:18 +02:00
Fredrik Höglund daee59b170 EXA: Wrap Trapezoids to prevent excessive migration of the alpha pixmap.
miTrapezoids creates an alpha pixmap and initializes the contents
using PolyFillRect, which causes the pixmap to be moved in for
acceleration. The subsequent call to RasterizeTrapezoid won't be
accelerated by EXA, which causing the pixmap to be moved back out
again.

By wrapping Trapezoids and using ExaCheckPolyFillRect instead of
PolyFillRect to initialize the pixmap, we avoid this roundtrip.
2007-08-16 23:49:07 +02:00
Adam Jackson 486fd4145a exaGetPixmapFirstPixel: avoid framebuffer readbacks if possible.
If the pixel in framebuffer memory isn't modified since we uploaded it, we
can just read from the system memory copy, wihch avoids both a readback and
an accelerator stall.

In principle this function is still wrong, and all the framebuffer pixel
access should be going through (w)fb so we can get pixel layout corrections.
2007-07-27 13:10:39 -04:00
Dodji Seketeli 5657fb065c exaDriverInit: Fail if pScreenInfo or a member of it is invalid.
EXA may attempt to use the invalid value and crash otherwise.
2007-07-17 12:12:02 +02:00
Dodji Seketeli 2a75c77497 ExaOffscreenMarkUsed: Don't crash when there's no offscreen memory. 2007-07-03 11:00:29 +02:00
Michel Dänzer c9b79a3558 exaPolyFillRect: Don't track damage explicitly.
All callers should already do it.

Also don't leak pReg.
2007-06-20 18:56:06 +02:00
Michel Dänzer 87966c5d28 exaGetImage: Don't migrate or try to accelerate for 1x1.
This is mainly to avoid wasting effort for XSync(), but just reading a single
pixel directly is probably faster than DownloadFromScreen anyway. Though in
light of the latter, even larger thresholds might be useful.

Also move the swappedOut check before the migration checks because migration
can't actually occur when swapped out.
2007-06-20 18:46:03 +02:00
Michel Dänzer cc648e609d EXA: Export ExaOffscreenMarkUsed.
Can be used to inform EXA that an offscreen area is used outside of EXA.
2007-05-22 10:51:56 +02:00