Commit Graph

436 Commits

Author SHA1 Message Date
Keith Packard
d5b16b037b Revert "dix: Remove usage_hint from pixmaps, store it in ->drawable.class"
This reverts commit 1564c82417.

The drivers used the top bits of the usage_hint to store driver
private flags (intel, radeon, nouveau).

With EXA we need to get at this data so if we migrate the pixmap we
can create the correct type of pixmap in the driver, however this
commit truncates the usage_hint into 8-bit class and loses all the
good stuff.

Signed-off-by: Dave Airlie <airlied@gmail.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
2011-03-17 23:48:52 -07:00
Adam Jackson
1564c82417 dix: Remove usage_hint from pixmaps, store it in ->drawable.class
The class field was unused for pixmaps, and we don't have enough classes
to justify a whole uint32 anyway.

Reviewed-by: Soren Sandmann <ssp@redhat.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
2011-03-08 13:16:50 -05:00
Michel Dänzer
31704510f4 EXA/mixed: ModifyPixmapHeader pitch fixes. (bug #33929)
If there's a GPU copy and a non-zero devKind was passed in, set the GPU copy
pitch to that instead of to a possibly bogus value derived from the new width.
This is e.g. used by the radeon driver's drmmode_xf86crtc_resize hook, fixes
https://bugs.freedesktop.org/show_bug.cgi?id=33929 .

On the other hand, the system memory copy doesn't need the pitch to be aligned
beyond the PixmapBytePad of the width.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Cyril Brulebois <kibi@debian.org>
Tested-by: Cyril Brulebois <kibi@debian.org>
Reported-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Tested-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-02-24 19:38:20 -08:00
Maarten Maathuis
b4ef34d466 Revert "exa/mixed: Exclude frontbuffer from deferred pixmap handling."
This reverts commit 541b25038a.

- It turns out that the high latency was a driver problem.
- catting a large amount of text turns out to look prettier when the
  throughput is lower, but it's not worth the loss for a minor
  improvement that may not even exist on someone else's computer.

Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-02-20 08:44:38 -08:00
Maarten Maathuis
541b25038a exa/mixed: Exclude frontbuffer from deferred pixmap handling.
- Apps like xterm can trigger a lot of fallback rendering.
- This can lead to (annoyingly) high latencies, because you
  have to wait for the block handler.
- You need a driver that doesn't directly access the front
  buffer to trigger this (NV50+ nouveau for example).
- Repeatingly doing dmesg on an xterm with a bitmap font
  will reveal that you never see part of the text.
- I have recieved at least one complaint in the past of slow
  terminal performance, which was related to core font
  rendering.
- This does sacrifice some throughput, roughly 33% slower.

Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-02-02 14:54:25 -08:00
Maarten Maathuis
af87f6367e exa: Only call driver FinishAccess hook if PrepareAccess hook succeeded.
Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-02-02 14:53:31 -08:00
Maarten Maathuis
648d4fe517 exa/driver: set pExaPixmap->use_gpu_copy to the right value
- Not sure if it was causing problems, but you never know.

Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-02-02 14:53:06 -08:00
Michel Dänzer
6358a60065 EXA: Pad size of system memory copy for 1x1 pixmaps (bug #32803).
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=32803 .

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-01-06 08:37:27 -08:00
Ville Syrjälä
e41e907b3c Add subWindowMode parameter to SourceValidate
Pass the subWindowMode from the GC/source Picture to SourceValidate.

Signed-off-by: Ville Syrjälä <ville.syrjala@nokia.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2011-01-05 11:56:28 -08:00
Michel Dänzer
e06fa80400 EXA: Fix crash with fill using 1x1 tile of depth < 8 (bug #24703).
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=24703 .

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-12-22 11:38:05 -08:00
Eric Anholt
f36153e3ef Replace usage of DamageRegionAppend with DamageDamageRegion to fix reportAfter.
In all these cases, any rendering implied by this damage has already
occurred, and we want to get the damage out to the client.  Some of
the DamageRegionAppend calls were explicitly telling damage to flush
the reportAfter damage out, but not all.

Bug #30260. Fixes the compiz wallpaper plugin with client damage
changed to reportAfter.

Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-11-10 15:51:03 -08:00
Michel Dänzer
0540c46066 EXA: Finish access to pixmap if it's prepared at destruction time.
Previously we assumed every pixmap destroyed during a software fallback was
also created during a software fallback and had access prepared, but that's
not always true.

Fixes a server abort
Reported-by: 邓逸昕 <bupt.dengyixin@gmail.com>

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-07-13 10:07:04 -07:00
Keith Packard
a41d6e9bff Merge remote branch 'dottedmag/for-keithp' 2010-06-11 10:08:13 -07:00
Éric Piel
7e8f100121 exa: fix ExaCheckCopyNtoN for exa_classic when source = dest
In case you want to copy a region with source = dest, you have the same pixmap
as source and dest.

At the end of exaPixmapIsOffscreen_classic() the devPrivate.ptr is reset to
NULL (look at the sources).

Now this is what happens in ExaCheckCopyNtoN:

exaPrepareAccess( pDst );
   Calls IsOffscreen()
      sets devPrivate.ptr to NULL
   sets up devPrivate.ptr to real pointer
   Everything OK
exaPrepareAccess( pSrc );
   Calls IsOffscreen()
      sets devPrivate.ptr to NULL
   BAILS OUT CAUSE OF NESTED OPERATION SINCE DST EQUALS SRC

We end up with devPrivate.ptr as NULL, and that is clearly wrong.

In particular this fixes a segfault when using the psb driver (bug 28077)

Signed-off-by: Éric Piel <eric.piel@tremplin-utc.net>
Reviewed-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-06-11 09:16:32 -07:00
Matt Turner
f4190feb25 Remove more superfluous if(p) checks around free(p)
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
2010-06-11 19:05:46 +07:00
Mikhail Gusarov
0a4d8cbdcd Remove more superfluous if(p) checks around free(p)
This patch has been generated by the following Coccinelle semantic patch:

@@
expression E;
@@

-if(E) { free(E); }
+free(E);

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Fernando Carrijo <fcarrijo@yahoo.com.br>
Reviewed-by: Matt Turner <mattst88@gmail.com>
2010-06-06 20:27:18 +07:00
Keith Packard
6bd5f0d75b Fix exa_priv.h declarations of privates
exa_priv.h exposes the privates to the rest of the exa code, and yet
the declarations of the privates wasn't fixed when the exa.c versions were.

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-06-05 21:12:41 -07:00
Keith Packard
faeebead7b Change the devPrivates API to require dixRegisterPrivateKey
This patch only changes the API, not the implementation of the
devPrivates infrastructure. This will permit a new devPrivates
implementation to be layed into the server without requiring
simultaneous changes in every devPrivates user.

Signed-off-by: Keith Packard <keithp@keithp.com>
Tested-by: Tiago Vignatti <tiago.vignatti@nokia.com>
2010-06-05 19:23:03 -07:00
Keith Packard
2dc138922b Rename region macros to eliminate screen argument
This is a combination of a huge mechanical patch and a few small
fixups required to finish the job. They were reviewed separately, but
because the server does not build without both pieces, I've merged
them together at this time.

The mechanical changes were performed by running the included
'fix-region' script over the whole tree:

$ git ls-files | grep -v '^fix-' | xargs ./fix-region

And then, the white space errors in the resulting patch were fixed
using the provided fix-patch-whitespace script.

$ sh ./fix-patch-whitespace

Thanks to Jamey Sharp for the mighty fine sed-generating sed script.

The hand-done changes involve removing functions from dix/region.c
that duplicate inline functions in include/regionstr.h, along with
their declarations in regionstr.h, mi.h and mispans.h.

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-06-05 18:59:00 -07:00
Keith Packard
9b6f5f549d Change region implementation names to eliminate the 'mi' prefix
This prepares the file to be moved from mi to dix. This patch
was done mechanically with the included scripts 'fix-miregion' run over
the entire X server and 'fix-miregion-private' run over
include/regionstr.h and mi/miregion.c.

Reviewed-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-06-05 17:47:32 -07:00
Michel Dänzer
a1c2bdb6ab EXA: Wrap Glyphs even without Composite acceleration.
In order to avoid migration ping-pong when accumulating glyphs in a mask
picture.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-05-20 07:48:51 -07:00
Mikhail Gusarov
3f3ff971ec Replace X-allocation functions with their C89 counterparts
The only remaining X-functions used in server are XNF*, the rest is converted to
plain alloc/calloc/realloc/free/strdup.

X* functions are still exported from server and x* macros are still defined in
header file, so both ABI and API are not affected by this change.

Signed-off-by: Mikhail Gusarov <dottedmag@dottedmag.net>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2010-05-13 00:22:37 +07:00
Keith Packard
25d1c6cd37 Exa screen private has SavedSourceValidate, not SourceValidate
Need to check the right field to see if there is a wrapped
SourceValidate function.

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-26 11:04:38 -07:00
Jerome Glisse
b557571dbf exa: avoid calling non existent SourceValidate callback
In unaccel path we were unconditionaly calling the SourceValidate
callback but in some case it could be NULL. Check if we have a
valid callback before calling it.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-26 09:15:22 -07:00
Keith Packard
0e6e75b04e Revert "exa: avoid calling non existent SourceValidate callback"
This reverts commit daa6f9308f.

This one checked pScreen->SourceValidate instead of
pExaScr->SourceValidate which would cause a segfault when
pExaScr->SourceValidate was NULL.
2010-04-26 09:14:22 -07:00
Jerome Glisse
daa6f9308f exa: avoid calling non existent SourceValidate callback
In unaccel path we were unconditionaly calling the SourceValidate
callback but in some case it could be NULL. Check if we have a
valid callback before calling it.

Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-26 08:42:57 -07:00
Keith Packard
7ac6a6b7d0 Merge remote branch 'vignatti/for-keith'
Conflicts:
	exa/exa.c

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-21 16:07:38 -07:00
Tiago Vignatti
471f350c99 exa: don't need to check for NULL pointer if we already assumed it has a value
the alternative would be to check ps in the beginning of the function.

Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
2010-04-21 18:07:22 +03:00
Tiago Vignatti
49835eec0c exa: check for NULL pointer before dereferences it
Signed-off-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
2010-04-21 18:06:59 +03:00
Keith Packard
28b7b2b8d0 unifdef -B -DRENDER to always include RENDER code
This patch was created with:

git ls-files '*.[ch]' | while read f; do unifdef -B -DRENDER -o $f $f; done

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-19 09:26:10 -07:00
Michel Dänzer
7b65175266 EXA: Check sys_ptr isn't NULL before passing it to the UploadToScreen hook.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=27510 .

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-04-14 17:10:07 -07:00
Oliver McFadden
d9ee31ab05 exa: exaFinishAccess: Overrun of static array "pExaScr->access" of size 6 at position 6 with index variable "i"
Signed-off-by: Oliver McFadden <oliver.mcfadden@nokia.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-03-21 15:20:07 -07:00
Michel Dänzer
03ef00ae79 EXA/mixed: Clean up exaPrepareAccessReg_mixed() a little.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-02-17 23:22:36 -08:00
Maarten Maathuis
9623daad7c exa/mixed: fix gnome-panel corruption
- A mapped pixmap can't be used for acceleration, any decent memory manager
will refuse this.
- Source pixmaps migrated with a bounding region are incomplete (from the
gpu point of view), so do the upload unconditionally, instead of just for
deferred destination pixmaps.
- Fixes fd.o bug #26076.

Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-02-17 23:22:33 -08:00
Michel Dänzer
e707612e9d EXA: Restore migration call in exaDoPutImage().
Turns out this is still necessary if the driver PrepareAccess hook succeeds.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Tested-by: Maarten Maathuis <madman2003@gmail.com>
Tested-by: Andrew Chant <andrew.chant+debian@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2010-01-04 08:28:12 -08:00
Michel Dänzer
db2c6f7c91 EXA: Don't use UTS/DFS directly for Put/GetImage when there's a system copy.
We want to save the result in the system memory copy, in case we'll need it
again for subsequent software fallbacks.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-By: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:10:41 -08:00
Thomas Hellstrom
f28ca728e9 EXA: Restrict the regions that need to be migrated for composite fallback for src / mask pictures.
[ Michel: Minor fixups to address compiler warnings ]

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:05:08 -08:00
Michel Dänzer
0c1f43c0f3 EXA/mixed: Handle results of software fallbacks in DamageReport hook.
This is more elegant and probably also slightly more correct than doing it
at FinishAccess time.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:04:51 -08:00
Michel Dänzer
08bf26c28f EXA: Fix migration avoidance for 1x1 pixmaps.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:04:40 -08:00
Michel Dänzer
0bd8f0cd7f EXA/classic: Fix crash with migration heuristic "smart".
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:04:07 -08:00
Thomas Hellstrom
40453bf771 EXA: Limit src prepareAccess regions for a number of unaccelerated operations.
When we can trivially calculate the affected source regions,
do that before calling region bounded prepareAccess.

[ Michel: Minor fixups to address compiler warnings ]

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:03:14 -08:00
Michel Dänzer
aa9ce8ab34 EXA: Use relevant source region to minimize migration on CopyWindow fallbacks.
Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:02:56 -08:00
Thomas Hellstrom
39cc110caa EXA: Fix bugs in exaGetImage / ExaCheckGetImage migration.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-29 11:02:40 -08:00
Michel Dänzer
661630f909 EXA/mixed: Don't clear deferred status of pixmaps if migration is limited.
* With optimized migration, only the pending damage region is synchronized for
  destination pixmaps.
* Migration of source pixmaps can be limited to a bounding region.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-28 22:01:38 -08:00
Michel Dänzer
df2635d464 EXA/mixed: Don't consider devKind for detecting dimension change.
Fixes http://bugs.freedesktop.org/show_bug.cgi?id=25536 .

There should be no reason for the pitch to actually change when none of the
other dimensions do, and this could lead to incorrectly freeing the system
memory copy when allocating a GPU copy, resulting in loss of valid pixmap
contents.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-10 09:11:14 -08:00
Michel Dänzer
955b9f23a3 EXA: ModifyPixmapHeader_mixed fixes.
* Better detection of dimension changes.
* Make sure to re-create the system memory copy when the pixmap dimensions
  change (e.g. the screen pixmap on screen resize).
* Clear the valid regions.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-08 13:06:42 -08:00
Michel Dänzer
c1503861cf EXA: ExaDoPrepareAccess return value fixes.
Only return TRUE if the GPU copy is being accessed, and preserve the return
value on repeated / nested calls for the same pixmap.

exaPrepareAccessReg_mixed could get inconsistent return values e.g. when the
same pixmap is both the destination and source of an operation, potentially
resulting in a crash.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Acked-by: Maarten Maathuis <madman2003@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-08 13:06:37 -08:00
Maarten Maathuis
fd86738733 exa/mixed: pixmaps that succeed prepare access have no need for a cpu copy
- When they have a gpu copy ofcource.
- Use the presence of a cpu copy as a hint to fall back instead of UTS'ing in
exaHWCopyNtoN.

Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-04 22:10:13 -08:00
Michel Dänzer
bb7acfbcfb EXA: Use correct coordinate system for calculating Composite fallback region.
Fixes incorrectly skipped rendering of some Composite operations to windows.

Signed-off-by: Michel Dänzer <daenzer@vmware.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-04 07:46:15 -08:00
Maarten Maathuis
0f4ef7123d exa/mixed: setting devKind before exaCopyDirty* is not needed
Signed-off-by: Maarten Maathuis <madman2003@gmail.com>
Acked-by: Michel Dänzer <michel@daenzer.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
2009-12-03 16:45:08 -08:00