Commit Graph

3064 Commits

Author SHA1 Message Date
Chris Wilson c8e10f7791 debug: Add names for operators
Most useful for confirming my worst fears: unwarranted use of
OutReverse + Add.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-12 12:48:21 +01:00
Chris Wilson 6ea8ce640f xvmc: Build fix with -pedantic
Fixes:

  Bug 27352 - RPMLINT error causes build breakage
  https://bugs.freedesktop.org/show_bug.cgi?id=27352

Reported-by: Johannes Obermayr <johannesobermayr@gmx.de>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 19:39:01 +01:00
Chris Wilson e1b7e8bf1d drmmode: Reorder i830_set_pixmap_bo() so that the correct stride is used.
The pitch needs to be set on the pixmap prior to the private
intel_pixmap structure being created so that it can record the correct
value from the pixmap.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 15:54:18 +01:00
Chris Wilson dfbaf9aab8 i830: Never create a bo for depth=1 pixmaps.
As we can not accelerate these either as a destination or a source,
don't bother allocating a buffer object for them.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 15:01:00 +01:00
Chris Wilson 5b7efe375a i830: Use set_pixmap_bo() instead of open-coding.
The advantage is that this enables in-flight reuse of the old pixmap if
possible.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 15:00:59 +01:00
Chris Wilson ad8af95dd3 i830: Do not cache in-flight non-reusable buffers.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 15:00:59 +01:00
Chris Wilson f1048e14d5 i965: Add texformats mapping for additional pixman formats
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 13:07:19 +01:00
Chris Wilson a35afd4a2d uxa: Recheck texture after acquiring pattern.
As the first step to handling unsupported texture formats, double check
that the converted pattern can be used as a texture by the card.

Fixes: rendercheck -t repeat

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-11 13:07:03 +01:00
Keith Packard d745cab6c4 Must call ValidateGC in i830_uxa_put_image for scratch GC
Always need to call ValidateGC or the scratch GC will not get the
right composite clip.

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-05-10 22:59:52 -07:00
Chris Wilson 3eded4202e i915: Fix pixmap based masks.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 23:38:17 +01:00
Chris Wilson 1ecd89be03 uxa: Protect against valid SourcePict in uxa_acquire_mask()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 23:33:52 +01:00
Chris Wilson a8761585ef i830: Minor cleanup
Remove some extraneous prototypes and unused variables.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 19:38:24 +01:00
Chris Wilson 9e9b0d85da i830: Update stride when swapping bo for PutImage
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 18:37:26 +01:00
Chris Wilson 0d4dd00aea uxa,i915: Handle SourcePict through uxa_composite()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 12:29:26 +01:00
Chris Wilson 21c1c3c7f6 i915: Use 1x1R pixmap for solid drawables
x11perf has a regression
  https://bugs.freedesktop.org/show_bug.cgi?id=25068

caused by

  commit e581ceb738
  i915: Use the color channels to pass along solid sources and masks.

Do not convert 1x1R pixmaps into a solid color as the readback from the
bo negates all the performances advantages of using a smaller vertex
buffer and fewer samplers.

Before (PineView):
  aa=66800 glyph/s, rgb=28800 glyphs/s

Now:
  aa=96800 glyphs/s, rgb=48500 glyphs/s

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 10:36:15 +01:00
Chris Wilson f52b6e8322 uxa: Rearrange checking and preparing of composite textures.
x11perf regression caused by 2D driver
  https://bugs.freedesktop.org/show_bug.cgi?id=28047

caused by

  commit a7b800513f
  uxa: Extract sub-region from in-memory buffers.

The issue is that as we extract the region prior to checking whether the
composite can in fact be accelerated, we perform expensive surplus
operations. This is particularly noticeable for ComponentAlpha text,
such as rgb10text. The solution here is to rearrange the
check_composite() prior to acquiring the sources, and only extracting
the subregion if the render path can not actually handle the texture.

Performance (on PineView):
a7b800513^: aa=68600 glyphs/s, rgb=29900 glyphs/s
a7b800513: aa=65700 glyphs/s, rgb=13200 glyphs/s
now: aa=66800 glyph/s, rgb=28800 glyphs/s

The residual lossage seems to be from the extra function call and
dixPrivate lookups. Hmm. More warning is the extremely low performance,
however the results are consistent so the improvement looks real...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-10 10:36:14 +01:00
Chris Wilson 848ab66384 uxa: Transform composites with a simple translation into a blit
We can also convert a composite with an integer translation into a
blit, so long as the sample extents remains within the source.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-08 19:35:28 +01:00
Chris Wilson a7b800513f uxa: Extract sub-region from in-memory buffers.
If the buffer is too large or not suitable for a GPU operation, we
currently fallback and perform the composite on the CPU. An alternative
is too extract the small region out of the source (as usually the
sample extents are much smaller than the actual surface size) and try
the composite with the new surface.

The effect is particularly noticeable on pathological websites that use
very large background images. For example, http://www.woodtv.com/ uses a
1299x15000 pattern that is obscured by another opaque pattern.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-08 19:35:07 +01:00
Chris Wilson 8562b7bc67 i830: prepare the uxa pixmap for fbCopyArea.
Complete the prepare access for the PutImage fallback via fbCopyArea(),
by remembering to set the private pointer to the GTT mapping.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-27 10:29:16 +01:00
Chris Wilson 9a5cd65b59 i830: if pixman_blt() fails fallback to fbCopyArea()
On older versions of pixman, pixman_blt() can return false if the images
are <= 8bpp. If we are being called from CopyArea, then we cannot return
FALSE here as that will trigger an infinite recursion. Instead we must
manually perform the fallback using fbCopyArea().

Reported-by: Peter Clifton <pcjc2@cam.ac.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-26 09:14:17 +01:00
Chris Wilson 86d349aa7b i830: tidy in flight bo reuse.
A left-over cleanup patch for c374c94. *sigh*

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-26 09:13:54 +01:00
Daniel Vetter 72fd7d191c Fix "make dist"
This is some fallout from my xvmc cleanup.

Original-Patch-by: Rico Tzschichholz <ricotz@t-online.de>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-19 21:56:57 +02:00
Daniel Vetter 9494f4e91f i810: adjust the pitch for DRI rendering
Current code forgot to adjust the pitch of the frontbuffer.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=16729
2010-04-16 22:24:01 +02:00
Chris Wilson c374c94e41 uxa: Reuse in-flight bo
When we need to allocate a new bo for use as a gpu target, first check
if we can reuse a pixmap that has already been relocated into the
aperture as a temporary target, for instance a glyph mask or a clip mask.

Before:
backend                      test   min(s) median(s) stddev.
xlib         firefox-planet-gnome   50.568   50.873   0.30%
 xcb         firefox-planet-gnome   49.686   53.003   3.92%
xlib                    evolution   40.115   40.131   0.86%
 xcb                    evolution   28.241   28.285   0.18%

After:
backend                      test   min(s) median(s) stddev.
xlib         firefox-planet-gnome   47.759   48.233   0.80%
 xcb         firefox-planet-gnome   48.611   48.657   0.87%
xlib                    evolution   38.954   38.991   0.05%
 xcb                    evolution   26.561   26.654   0.19%

And even more dramatic improvements when using a font size larger than
the maximum size of the glyph cache:
 xcb firefox-36-20090611:  1.79x speedup
xlib firefox-36-20090611:  1.74x speedup
 xcb firefox-36-20090609:  1.62x speedup
xlib firefox-36-20090609:  1.59x speedup

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-15 21:37:32 +01:00
Chris Wilson 96aa7a236a i830: Allocate bo's for glyphs larger than 32x32.
As we only use the glyph cache for small glyphs, those large than 32x32
will first be copied to a bo and used as a mask in a composite
operation. We can avoid the allocation and upload per use by allocating
a bo for the over-sized glyph from the start. As the glyph is large
anyway, the excess memory allocation is less significant.

Using normal font sizes, firefox shows no change - as expected. However,
using the 36 font size traces, we see around a 10% improvement on g45.

Before:
      xcb          firefox-36-20090609  127.333  127.897   0.22%
      xcb          firefox-36-20090611   87.456   88.624   0.66%
      xcb             firefox-20090601   19.522   20.194   1.69%
     xlib          firefox-36-20090609  201.054  201.780   0.18%
     xlib          firefox-36-20090611  133.468  133.717   0.09%
     xlib             firefox-20090601   23.740   23.975   0.49%

With large glyphs in bo:
      xcb          firefox-36-20090609  117.256  118.254   0.42%
      xcb          firefox-36-20090611   79.462   79.962   0.31%
      xcb             firefox-20090601   19.658   20.024   0.92%
     xlib          firefox-36-20090609  185.645  188.202   0.68%
     xlib          firefox-36-20090611  123.592  124.940   0.54%
     xlib             firefox-20090601   23.917   24.098   0.38%

Thanks to Owain G. Ainsworth for the suggestion!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-14 17:10:09 +01:00
Chris Wilson 2d17bd50af Revert "Revert "uxa: Try using put_image when copying from a memory buffer.""
This reverts commit 6d50553e8f.

Now we have taught the fallback path not to infinitely recurse,
re-enable the accelerated path for ShmPutImage and friends.
2010-04-14 17:10:09 +01:00
Chris Wilson 1cc2c2c44a i830: Use pixman_blt directly for performing the in-memory copy
In order to avoid an infinite recursion after enabling CopyArea to use
the put_image acceleration to either stream a blit or to copy in-place,
we cannot call CopyArea from put_image for the fallback path. Instead,
we can simply call pixman_blt directly, which coincidentally is a tiny
bit faster.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-14 17:10:05 +01:00
Daniel Vetter 324a2810da i830 render: check aperture space requirements
No point not doing this.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-13 08:39:43 +02:00
Daniel Vetter 804263c10d render: tell the kernel explicitly when fences are needed
This slighlty improves xrender performance on fence reg starved
i8xx hw.

I've also changed a few function calls to the new names from the
compat ones while looking at the code.

The i915 textured video path is not converted because atm the xv
code does not use tiled surfaces.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-13 08:34:20 +02:00
Daniel Vetter a619a78312 i915 render: use tiling bits where possible
This is in preparation to explicit fence allocation with execbuf2.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-13 08:34:20 +02:00
Daniel Vetter 55cd36046e i830 render: use tiling bits where possible
This is in preparation to explicit fence allocation with execbuf2.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-13 08:34:20 +02:00
Eric Anholt 6d50553e8f Revert "uxa: Try using put_image when copying from a memory buffer."
This reverts commit 27195d7dba.
put_image often calls copy_area. Which calls put_image.  Exhausting of
the stack follows.
2010-04-12 13:46:24 -07:00
Chris Wilson 28024f6c5f Revert "uxa: Add fallback warnings for PutImage."
This reverts commit 299b0338d0.
A debugging patch, it was never intended to go into master
2010-04-12 13:44:01 +01:00
Chris Wilson 27195d7dba uxa: Try using put_image when copying from a memory buffer.
Often, for example in the fallback for ShmPutImage, we will attempt to
use uxa_copy_area() copying to a normal pixmap from a memory buffer.
This triggers a fallback, and maps the destination pixmap back into the
GTT. The accelerated put_image path will attempt to stream a blit to the
destination pixmap if it is currently active, avoiding the stall.
2010-04-10 18:50:26 +01:00
Chris Wilson 385563417d Review i830_pad_drawable_width()
We appear to have a confusion of stride in terms of pixels, pitch in
terms of bytes and the actual width of the surface.
i830_pad_drawable_width() appears to be operating aligning *pixels* to a
64 pixel boundary and has never used the chars-per-pixel causing
considerable confusion in its callers. Remove the parameter and ensure
that the callers are expecting a value in pixels returned, multiplying
by cpp where necessary to get the pitch.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-04-10 18:08:07 +01:00
Chris Wilson 299b0338d0 uxa: Add fallback warnings for PutImage. 2010-04-10 18:08:07 +01:00
Daniel Vetter 80f52482c7 XvMC: fix memory overflow
Caught by a malloc library assert.

Note to self: Don't just copy&paste codelines around :(

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Buzilla: https://bugs.freedesktop.org/show_bug.cgi?id=27540
Tested-by: Nick Bowler <nbowler@draconx.ca>
Tested-by: Calvin Walton <calvin.walton@gmail.com>
2010-04-08 22:35:10 +02:00
Daniel Vetter 3d7723526b Xv: fixup overlay stride confusion
For some reason I've made a mess out of the overlay stride constrains.
Fix it up.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Tested-by: Calvin Walton <calvin.walton@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=27453
2010-04-08 22:21:01 +02:00
Daniel Vetter bdf0ee509c i965 Xv: fix chroma pitch
In my recent fix for the chroma pitch for i915 xvmc I've forgotten about
i965 class hw. For videos with a non-even sized stride (measured in dwords)
the chroma pitch was internally incosistent and one dword off.

Fix this by using pitch2 for the chroma pitch in i965 textured video like
everywhere else.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=27417
Tested-by: Nick Bowler <nbowler@draconx.ca>
Tested-by: Sven Arvidsson <sa@whiz.se>
2010-04-08 17:21:18 +02:00
Daniel Vetter f6cb28e909 libXvMC: rip out debug stuff
Almost totatlly unused, but surely totally useless.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:24 +02:00
Daniel Vetter 676028ec0c libXvMC: unify CreateSurface
Simply store the desired bo size in intel_xvmc_context and initialize
it in the driver's create_context function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:24 +02:00
Daniel Vetter 3f590a4577 libXvMC i915: kill unused context private fields
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:24 +02:00
Daniel Vetter 8a31dacb06 libXvMC: derive driver context from struct intel_xvmc_context
... by putting struct intel_xvmc_surface at the beginning. Also kill
the common context handling code and simply keep a pointer in the
surface private to the context.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:24 +02:00
Daniel Vetter 16e5edde4d libXvMC: unify DestroySurface
Surface bo's can be freed by the common code, then there's nothing
driver specific left.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:24 +02:00
Daniel Vetter 5f64122551 libXvMC: drop get_surface_status driver callback
It's unused. Also drop all related generic code that tries to do
clever stuff with this callback. These are all remnants from a
pre-gem world.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00
Daniel Vetter 6c44ce9e12 libXvMC i915: s/i915XvMCSurface/struct intel_xvmc_surface/
The private surface struct now adds nothing. Drop it.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00
Daniel Vetter 583ec1f2f7 libXvMC i915: rip out unneeded surface fields
All of these are also stored in the context. Also kill the context
reference counting. Doesn't serve a purpose besides occupying a
pointer to the context in the private surface struct.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00
Daniel Vetter c9aaaed829 libXvMC: unify PutSurface
Now that the drm bo is in the common structure, do the PutImage
handling in common code, too.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00
Daniel Vetter 4edff6c972 libXvMC: move drm_intel_bo to common intel_xvmc_surface
i965 lost the last field in it's private surface struct. Kill it
and any associated headers.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00
Daniel Vetter 9eeabf876d libXvMC: derive driver surfaces from struct intel_xvmc_surface
... by putting struct intel_xvmc_surface at the beginning. This
will allow to consolidate surface and bo handling.

Also kill some now dead code used to handle the common surface
structure.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-04-08 11:22:23 +02:00