Commit Graph

3029 Commits

Author SHA1 Message Date
Jesse Barnes 0d26d950fd KMS: add fake EDID on eDP too
This gives us a few more standard modes on eDP panels with just a simple
fixed timing in the VBT, just like on older, LVDS attached panels.

Fixes FDO bug https://bugs.freedesktop.org/show_bug.cgi?id=30069.

Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Tested-by: Manoj Iyer <manoj.iyer@canonical.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2010-09-07 13:48:59 -07:00
Chris Wilson 273d34fbc4 display: Query current level after finding max value.
The current backlight value is clamped to the valid range [0, max] and
so as we queried the value before setting the max, we forced the current
backlight to 0 and so set it to be zero on initialising the display.

Fixes:

  Bug 30063 - start X will modify brightness value to zero
  https://bugs.freedesktop.org/show_bug.cgi?id=30063

which is a regression due to 38f940dfea.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-09-07 13:00:23 +01:00
Zhenyu Wang 53767cc0d0 Add more sandybridge graphics device ids
New ids for GT2 and GT2+ on desktop and mobile sandybridge, and
server sandybridge device ids.
2010-09-07 14:17:05 +08:00
Chris Wilson 00f6af2c8e display: Set MONITOR_EDID_COMPLETE_RAWDATA for large EDIDs
Quoting Adam Jackson:

"But the X driver looks like
it never sets MONITOR_EDID_COMPLETE_RAWDATA, which means the X core
doesn't know that any sections beyond the first are present, so it won't
ever hand back more than 128 bytes to clients.  Boo."

This patch is based on his.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-09-04 18:51:32 +01:00
Chris Wilson 501e78b009 Force use of GTT and fence registers for mapping tiled objects
If the buffer object is tiled, we need to use the fence registers to
perform the appropriate untiling for CPU access. Ensure that we always
take this path for tiled objects, regardless of their size.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-09-04 12:37:39 +01:00
Chris Wilson b7a8087fbc Revert "Leave adjustment of backlight to the driver."
This reverts commit 9c3e34703d.

This commit is not ready, as first the driver needs to handle all
controllers, especially those that ignore the BLC and require their own
interface.  Fortunately, by moving that discovery into the kernel - where
it just means finding which ACPI device is attached to the video and has a
backlight interface - the userspace code should become much more sane,
and work even with multi-gpu, multi-lid systems.

But that is for tomorrow.
2010-08-26 00:59:33 +01:00
Chris Wilson 9c3e34703d Leave adjustment of backlight to the driver. 2010-08-25 15:01:41 +01:00
Zhenyu Wang 104cd0554b Add sandybridge D0 support
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
2010-08-23 09:48:22 +08:00
Chris Wilson 271dda84be display: Use the native intel backlight controller
If the i915 driver exposes a native ACPI interface to modify the panel
backlight use it in preference to the generic interfaces. On multi-GPU
systems, the panel backlight is meant to be connected via the IGP and
this ensures that we always find the right interface.

Fixes:

      Bug 29273 - XORG Intel driver chooses wrong acpi_video to control
                  brightness in multi-GPU system
      https://bugs.freedesktop.org/show_bug.cgi?id=29273

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-22 19:57:24 +01:00
Chris Wilson 42312bbd8c Remove accel_pitch_alignment
This has to be 64 on all generations currently, so replace the variable
with a constant.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-22 09:54:18 +01:00
Matt Turner 7f86e5b5da Replace ROUND_* macros with ALIGN.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-22 09:52:54 +01:00
Matt Turner b611bced15 Use ALIGN macro instead of open coding it.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-22 09:52:42 +01:00
Chris Wilson 8b04b350a9 Open-code DRICreatePCIBusID()
During -configure we would attempt to query the availablility of KMS
before the DRI module was loaded, thus we were unable to create a valid
bus identifier and so the query failed and we disowned the device.

Fixes:

  Bug 29611 - Xorg -configure fails
  https://bugs.freedesktop.org/show_bug.cgi?id=29611

Reported-by: Sergey Samokhin <prikrutil@gmail.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-19 20:05:08 +01:00
Chris Wilson c882f6a22a Move registration of vsync fd from pre-init to screen-init
Marty Jack reported an issue he found where the page-flipping handler
was being lost on server reset. This results in the swap completion
notification being lost, with the sporadic hang of full screen
applications like Compiz, flash and even glxgears!

Fixes:

  Bug 29584 - Server in compute loop
  https://bugs.freedesktop.org/show_bug.cgi?id=29584

There are also several possibly related bugs with similar symptoms, i.e.
OpenGL applications hanging on missed swap notifications.

Reported-by: Marty Jack <martyj19@comcast.net>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Keith Packard <keithp@keithp.com>
2010-08-18 10:21:22 +01:00
Chris Wilson 19c48d3b3f display: outputs are enabled automatically by KMS
When an output is attached to a crtc and that crtc is enabled, the
output is automatically enabled so we can remove the redundant manual
dpms on.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-09 10:13:58 +01:00
Chris Wilson 6304cb048c display: Minor cleanup for adding extra LVDS modes
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-05 18:17:18 +01:00
Chris Wilson 41ae956435 display: Refactor EDID attachment to output.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-05 18:16:35 +01:00
Chris Wilson a8919ab296 Revert "display: Cache whether we have probed for an EDID"
Dave Airlie advised that hotplug detection can be unreliable and that
mode caching, in general, should be done in the kernel in any case.

This reverts commit 622e600069.
2010-08-05 10:00:56 +01:00
Chris Wilson 622e600069 display: Cache whether we have probed for an EDID
Remember for the detection cycle whether we have already probed for the
EDID -- as this can be slow.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-04 10:05:09 +01:00
Chris Wilson a6a707ca13 display: Embed the lvds size into the connector
Remove one very common allocation.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-04 10:05:09 +01:00
Chris Wilson 6c7d105cca display: Handle cursor error paths.
Check that the cursor was allocated before freeing.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-04 09:51:34 +01:00
Chris Wilson 38f940dfea display: Tidy backlight initialisation
Mostly whitespace and a single error-code fix.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-04 09:50:14 +01:00
Chris Wilson 2b7263b771 display: Check for buffer overrun in output name lookup.
The kernel may know about more types than we do, so protect ourselves
from reading from beyond the end of the string array.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-04 09:46:01 +01:00
Dave Airlie 5662916691 intel: add output names for later additions to kernel 2010-08-04 15:35:41 +10:00
Chris Wilson fe7dee7fe1 Remove the final references to the drmmode prefix
In particular fix the compile regression for intel_do_pageflip().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-01 14:15:09 +01:00
Chris Wilson 4f8b279f32 intel_display: Miscellaneous tidy
A mixture of whitespace and closing of leaks on error paths.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-01 12:35:57 +01:00
Chris Wilson db7cd7b9f0 Rename drmmode_display to intel_display
And fixup all the drmmode_* functions to have an intel prefix and
categorise those into intel_mode, intel_crtc, intel_output and
intel_property so that the functions are a little more self-descriptive
and, more importantly, are consistent.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-08-01 11:27:29 +01:00
Kristian Høgsberg 0be3e95c84 Remove explicit batchbuffer submit in DRI2 copyregion
Now that we submit from the flush callback chain, we know we'll always
submit before the client receives the reply or event that blocks it from
rendering the next frame.
2010-07-30 09:39:58 -04:00
Kristian Høgsberg 69d65f9184 Submit batch buffers from flush callback chain
There are a few cases where the server will flush client output buffers
but our block handler only catches the most common (before going into select).
If the server flushes client buffers before we submit our batch buffer,
the client may receive a damage event for rendering that hasn't happened yet.

Instead, we can hook into the flush callback chain, which the server will
invoke just before flushing output.  This lets us submit batch buffers
before sending out events, preserving ordering.

Fixes 28438: [bisected] incorrect character in gnome-terminal under compiz
https://bugs.freedesktop.org/show_bug.cgi?id=28438

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
2010-07-30 09:29:55 -04:00
Chris Wilson b68d4fcab5 drmmode: Only treat a backlight as connected if it has a non-zero max
Optimistically might help
https://bugs.freedesktop.org/show_bug.cgi?id=29273

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-28 13:42:15 +01:00
Kristian Høgsberg 938ef4eaec legacy: Remove long gone use of GlxSetVisualConfigs()
This removes the last dependeny on anything GL/GLX in the driver.
2010-07-28 07:58:02 -04:00
Kristian Høgsberg fba6651a92 Drop use of GL types in the driver
Still used in i810 for building the glx visuals.
2010-07-27 12:59:53 -04:00
Daniel Vetter f46a8dfce5 video: kill do { ... } while (ret != -EINTR) loops
Chris Wilson likes to sprinkle these all over, but in this
case it's just misleading. libdrm already does this for us.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-07-26 23:02:02 +02:00
Daniel Vetter 1cb69b9a77 video: kernel overlay needs triple buffering
The kernel overlay code does asynchronous overlay flips. So keep
onto two old buffers, for otherwise the rendering of the next
frame might overwrite the contents of the currently still displaying
one. With ~25fps videos and ~50 Hz screens that's rather unlikely,
still, fix it.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2010-07-26 23:00:20 +02:00
Gaetan Nadon 68df6b2790 simplify Makefile as per-target compilation flags are not needed
Per-target compilation flags (libIntelXvMC_la_CFLAGS) are required
when multiple targets which require different compiler flags,
are build in the same makefile.

Automake issues a command with -c and -o flags which not all compilers
support. The object fles are prefixed with libIntelXvMC_la.
The macro AM_PROG_CC_C_O must then be used to provide this feature
on compilers that do not have it. If not, a warning is issued at make time.

This macros checks for compiler support and if missing, uses a "compile"
script it generates in the package root directory.

Currently the driver uses per-target flags but the macro is missing.
Rather than adding the macro, this patch stops using per-target flags
by using the AM_CFLAGS variable for all targets in the makefile, as
there is only one.

Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2010-07-24 09:21:02 -04:00
Chris Wilson 142ffa2872 video/i915: ValidateGC after setting clip.
Order is important. And ensure that the scratch GC is performing clip by
children.

Fixes:

  Bug 29213 - video artifacts if used dualscreen mode
  https://bugs.freedesktop.org/show_bug.cgi?id=29213

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-22 16:49:05 +01:00
Dave Airlie 7a4bfaf424 intel: respect tiling disable.
For testing purposes its nice to know tiling isn't being used anywhere.

Signed-off-by: Dave Airlie <airlied@redhat.com>
2010-07-20 11:31:48 +10:00
Chris Wilson d48d584a82 video: Free the buffers immediately after turning off.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-16 10:31:58 +01:00
Chris Wilson 24bdfe0d5e video: Reuse the old buffers.
After passing the new buffer to the kernel, the old buffer is unpinned
and becomes available for re-use. So keep hold of the old buffer and
swap after a PutImage. This greatly reduces the amount of CPU time
consumed by the kernel on behalf of the video overlay -- by only
allocating two buffers for an entire sequence, we avoid clflushing and
page allocation on every frame.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-16 10:31:58 +01:00
Chris Wilson 2267e5928b Workaround a broken container_of define in list.h 2010-07-13 10:36:34 +01:00
Chris Wilson 798c3a5fc6 Teardown the bufmgr on shutdown as well.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-13 10:30:51 +01:00
Chris Wilson b2e98227d1 Remove the duplicate drmmode prototypes.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-13 10:15:34 +01:00
Chris Wilson 5de1b74d64 modes: There may be more than one crtc and output... DESTROY THEM ALL!
In order to cleanup all CRTCs and outputs on shutdown, we need to keep a
list of the individual structures and iterate over that list on
shutdown.

Also, the output and crtcs are configured just once and not for each
screen generation so move the shutdown to the termination and not on
CloseScreen. Oops.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-13 10:09:38 +01:00
Chris Wilson 3a7c25ff8d video: Apply overlay stride errata for i830 and i845
Due to an erratum on these chipsets, the overlay stride must be a
multiple of 256 bytes.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-12 19:47:46 +01:00
Chris Wilson 56e5816252 video: Copy DummyEncoding into each adapter.
As we use the static DummyEncoding and may attempt to modify it for each
adaptor (on each device), we should use copies instead.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-12 17:40:55 +01:00
Chris Wilson 5ce3f536b7 drmmode: Destroy the output on shutdown
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-09 14:12:43 +01:00
Chris Wilson 6ff369cd26 drmmode: Destroy Crtc on screen shutdown
Should fix:

  Bug 26946 - CRTC cursor BO leak in 2D
  https://bugs.freedesktop.org/show_bug.cgi?id=26946

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-09 14:12:25 +01:00
Chris Wilson 6fba8c449f Add support for I854.
I spotted that the kernel knew of the I854, but the pci-id was never
added to the ddx.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-09 12:12:13 +01:00
Chris Wilson 141e88c873 video: forgotten amendment to previous commit.
An extra sanity check to skip the wait if all clipped...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-09 12:12:00 +01:00
Chris Wilson 272d1c14a3 video: apply the crtc box checks from dri.
The dri code is much more careful in ensuring that the scan lines that
is waits for are valid. Copy this code to video, with a bit of work this
can be refactored, and perhaps even teach dri how to handle rotated
front buffers.

References:

  Bug 28964 - [i965gm] GPU infinite MI_WAIT_FOR_EVENT while watching video
              in Totem
  https://bugs.freedesktop.org/show_bug.cgi?id=28964

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-09 10:50:52 +01:00
Evan McClain 75850e824b Add mbp_backlight support.
Acked-by: Julien Cristau <jcristau@debian.org>
2010-07-05 17:08:35 +01:00
Chris Wilson afcd41820d Reduce front buffer stride prior to rejection
If we reject the front buffer because it has too large a stride, repeat
the allocation using untiled for the cases where we can utilize laxer
hardware restrictions.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-01 22:10:49 +01:00
Chris Wilson f8778b66a9 drmmode: Add missing newlines at the end of log messages.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-01 21:58:43 +01:00
Chris Wilson 690fbd1a64 drmmode: Use a copy of the converted mode on resize
Avoid a potential use-after-free of the copied mode string by reusing
the converted kernel mode on resize.

==19897== Invalid read of size 8
==19897==    at 0x661C330: ??? (strcpy.S:1308)
==19897==    by 0x8618AE7: drmmode_set_mode_major (drmmode_display.c:293)
==19897==    by 0x8618E6F: drmmode_xf86crtc_resize (drmmode_display.c:1299)
==19897==    by 0x529A77: xf86RandR12ScreenSetSize (xf86RandR12.c:708)
==19897==    by 0x4BD528: ProcRRSetScreenSize (rrscreen.c:301)
==19897==    by 0x42B820: Dispatch (dispatch.c:432)
==19897==    by 0x4254C9: main (main.c:289)
==19897==  Address 0x72e91e0 is 0 bytes inside a block of size 9 free'd
==19897==    at 0x4C23DBC: free (vg_replace_malloc.c:325)
==19897==    by 0x48424F: xf86DeleteMode (xf86Mode.c:1921)
==19897==    by 0x4942B7: xf86ProbeOutputModes (xf86Crtc.c:1572)
==19897==    by 0x5290BB: xf86RandR12GetInfo12 (xf86RandR12.c:1551)
==19897==    by 0x5313AE: RRGetInfo (rrinfo.c:202)
==19897==    by 0x4BCCAA: rrGetScreenResources (rrscreen.c:337)
==19897==    by 0x42B820: Dispatch (dispatch.c:432)
==19897==    by 0x4254C9: main (main.c:289)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-07-01 21:55:04 +01:00
Chris Wilson 772f8236d5 dri: Handle errors during GetBuffers() gracefully.
Unwind the array of Pixmaps already allocated and report failure for the
old dri GetBuffers() path.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-30 13:58:05 +01:00
Chris Wilson 17884af4ed Repair the damage to 'make distcheck' after splitting out i810
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-28 17:44:45 +01:00
Chris Wilson 28c0ca676c Remove unused inclusion of <sys/mman.h>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-25 13:40:22 +01:00
Chris Wilson 5c663ce844 Rename common infrastructure to the intel namespace.
After splitting out the i810 driver into its own legacy directory, we
can identify the common routines not as i830 but as intel. This
clarifies the code which *is* i830 specific.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-25 13:18:01 +01:00
Chris Wilson 797d173a9a i810: Move into a legacy directory.
The driver is still built but is no longer under active development so
move it and supporting files to a new directory.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-25 13:18:01 +01:00
Chris Wilson 6d33e578de Limit maximum tiled stride to 8k and untiled to 32k.
Tiling on gen 2/3 hardware is only supported for pitches up to 8192
bytes, so above this limit the surface will be untiled and we will no
longer have to comply with the power-of-two pitch alignment. So
disabling tiling for these too wide surface should ~halve the memory
requirement for the full surface.

Also the absolute limit for the 2D blitter is 32,768 bytes. The
documentation says "up to 32,768 bytes" and my PineView box was
malfunction with a surface stride of 32,768 so set the limit to be
32,767.

References:

  Bug 28497 - Graphics corruption after opening a specific website
  https://bugs.freedesktop.org/show_bug.cgi?id=28497

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-23 21:33:36 +01:00
Chris Wilson 5bf470bd38 i965: Compile fix.
Oops, I spent more time discussing these flushing bugs than I spent
paying attention to what I was actually doing.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 22:28:58 +01:00
Chris Wilson 0203cf91b5 Do not clear need_mi_flush within the batch.
This is a situation that should not be possible, need_mi_flush being
true but the list of pending flush pixmaps being clear. However, an
earlier bug in doing just that revealed this minor bug. So for
correctness, be careful not to clear need_mi_flush without emitting a
MI_FLUSH.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 22:25:08 +01:00
Chris Wilson 5107b6fa26 i965: Mark the render target as dirty within composite_setup()
The key difference between i965 and earlier, is that the surfaces passed
to the samplers through an indirect table and so the batch and render
target was not being marked dirty by the relocation (since the
relocation only happens within prepare_composite() which may have been
in another batch.) Simply call intel_pixmap_mark_dirty() when binding
the sampler table into the batch to ensure that the dirty is tracked
appropriately.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 22:21:58 +01:00
Chris Wilson bebd64d821 Also submit any pending flush for *this* batch in the BlockHander.
We still need to submit an additional flush if we have further writes
since the last flush.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 22:05:19 +01:00
Chris Wilson c4d2005177 Only append the pixmap to the flushing list if we are writing to it.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 21:57:21 +01:00
Chris Wilson c942585098 Emit the flush after a potential draw from the BlockHandler.
As the batch submit may not trigger further drawing through flushing the
vertices, pass the requirement to emit the flush down to the submission
routine so that the flush can be appended after the final commands.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-21 21:45:04 +01:00
Chris Wilson be55066c64 i830: Remove domain tracking from pixmaps.
The 4 integers can be reduced to a single boolean value, so do so.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-17 14:23:21 +01:00
Chris Wilson c187da9a24 i830: GetImage acceleration.
The presumption is that we wish to keep the target hot, so
copy to a new bo and move that to the CPU in preference to
causing ping-pong of the original.

Also the gpu is much faster at detiling.

Before (PineView):
 400000 trep @   0.1128 msec (  8860.0/sec): GetImage 10x10 square
  18000 trep @   1.3839 msec (   723.0/sec): GetImage 100x100 square
    800 trep @  30.0987 msec (    33.2/sec): GetImage 500x500 square

After: (PineView)
 180000 trep @   0.1478 msec (  6770.0/sec): GetImage 10x10 square
  60000 trep @   0.4545 msec (  2200.0/sec): GetImage 100x100 square
   4000 trep @   8.0739 msec (   124.0/sec): GetImage 500x500 square

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-17 14:08:11 +01:00
Chris Wilson 0e01017584 i830: Tidy i830_uxa_put_image()
Use a single code path to upload the image data after selecting the
right bo, and take advantage of pwrite() when possible.

Fixes:

  Bug 28569 - [i965] IGN's flash-based video player crashes X
  https://bugs.freedesktop.org/show_bug.cgi?id=28569

  Bug 28573 - [i965] Fullscreen flash and windowed SDL games fail to
              update the screen
  https://bugs.freedesktop.org/show_bug.cgi?id=28573

Reported-and-tested-by: Brian Rogers <brian@xyzw.org>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-17 14:08:11 +01:00
Chris Wilson 2ff7a2fc9d i915: Force the emission of BUF_INFO on every composite_setup
We should be able to eliminate these as the drawable remains unchanged.
However, the implicit flush of BUF_INFO fixes the rendering in KDE.
Alternatively, we need an MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH between
composites. (Note that it is not stale cache data causing the rendering
corruption and that a pipelined flush is not sufficient either.) Also,
having tried varies points at which to flush, the only place where the
flush is effective seems to be between composite operations - that is a
flush after 2D is not sufficient.

Reported-by: Vasily Khoruzhick <anarsoul@gmail.com>
Reported-by: Clemens Eisserer <linuxhippy@gmail.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-17 14:08:07 +01:00
Chris Wilson a25573d5c4 drmmode: Use the tiled stride for the rotated pixmap.
After d41684d545 we now allocate all framebuffers as tiled bo, and so
we must be careful to use the appropriate stride as returned from the
allocation, instead of assuming that it is just an aligned width.

Fixes:

  Bug 28461 - screen rotation results in corrupted output.
  https://bugs.freedesktop.org/show_bug.cgi?id=28461

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reported-by: Till Matthiesen <entropy@everymail.net>
2010-06-15 20:30:41 +01:00
Chris Wilson 995a4b2b1d i965: Sanity check ComponentAlpha status in prepare_composite
Fixes:

  Bug 28446 - Garbled Font with Mathematica 7
  https://bugs.freedesktop.org/show_bug.cgi?id=28446

Rewriting the glyphs to render to the destination directly and removing
the more expensive multiple invocations of CompositePicture per picture
was a great performance boost -- except that it needs special handling
in the backend in order to not fallback. Having done so for i915, I
neglected to ensure the sanity checking in i965_prepare_composite() was
sufficient. As it turns out, it was not and so we misrendered CA-glyphs
when rendering directly to the destination. This causes us to fallback
properly, but is a performance regression as we no longer try the 2-pass
magic helper before resorting to s/w. At the moment, I'd rather live
with the temporary regression and fix i965 to do the same magic as i915,
as it critical to fixing the severe performance issues currently
crippling i965, as I believe that this regression only affects the
minority of applications (incorrect, as it turns out, as the glyphs are
overlapping) rendering directly to the destination.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-14 12:14:30 +01:00
Chris Wilson 84d65bace5 Compile fix for alternate list.h from xserver-1.9
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-14 11:31:40 +01:00
Chris Wilson 5a0a8a1cf6 i830: Limit disabling acceleration following EIO to !i965
Following a conversation with Owain G. Ainsworth, it was decided that
the second best approach to handling a wedged GPU was to hope that the
kernel could successfully reset it, which currently is only possible for
i965 and later chipsets.

The best approach is of course to prevent such hangs from ever occurring
in the first place.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-10 23:02:34 +01:00
Chris Wilson 3bf4ca2cdc i830: Only emit the disabling GPU error message once.
But emit the warning about rendering corruption every time for the
transient errors like out-of-memory.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-10 23:02:34 +01:00
Chris Wilson 8c1a8d2297 Revert "xp:trapezoids"
This reverts commit f429fb9d87.

An experimental patch I forgot was on my main branch as I was bugfixing.
ARGH!
2010-06-09 10:03:29 +01:00
Chris Wilson f429fb9d87 xp:trapezoids 2010-06-08 19:52:46 +01:00
Chris Wilson 0776a42b70 implicit-flush 2010-06-08 15:00:16 +01:00
Eric Anholt d41684d545 Allocate rotate shadow buffers using the usual framebuffer allocator.
This means we can get tiling on them, which should significantly boost
performance, and also allow for FBC.
2010-06-07 11:18:09 -07:00
Eric Anholt b5c9de10ba Allocate a correctly sized framebuffer when tiling by using libdrm's support.
When I made libdrm stop overallocating so much memory for the purpose
of bo caching, things started scribbling on the bottom of my
frontbuffer (and vice versa, leading to GPU hangs).  We had the usual
mistake of size = tiled_pitch * height instead of size = tiled_pitch *
tile_aligned_height.
2010-06-07 11:15:28 -07:00
Chris Wilson e6acbc7632 uxa: Setup acceleration functions prior to the damage layer
We need to install the acceleration functions so that they are wrapped
by the Damage layer. This fixes the corruption under a compositing WM
introduced in commit 8700673157.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reported-and-tested-by: Arkadiusz Miśkiewicz <arekm@maven.pl>
2010-06-07 18:23:17 +01:00
Chris Wilson 1788b16eb2 i915: Fix typo from previous commit.
A trivial change, I thought, having tested it before rebasing, unworthy
even of a perfunctory compile test. How wrong I was.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-07 15:31:47 +01:00
Chris Wilson d9bc36ae03 i915: Remove screen size limit from video setup.
The i915 textured video routine know how to handle drawing on an output
larger than the 3D pipe, so allow them to do so.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-07 15:30:07 +01:00
Chris Wilson 6555ef5fd1 i915: Replace structure passing with macros for shader generation.
gcc is horribly bad at collapsing the constants:

  text     data     bss     dec     hex filename
282336     8720     256  291312   471f0 intel_drv.so.old
269280     8720     256  278256   43ef0 intel_drv.so

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-07 14:23:11 +01:00
Chris Wilson d56ea7a852 Use the direct dixGevPrivate() API when available
This is quicker and smaller than the old indirect function call to
dixLookupPrivate().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-07 00:20:35 +01:00
Chris Wilson 8700673157 Adapt glyphs for changes in devPrivates API
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-07 00:17:32 +01:00
Keith Packard 42ddc39430 Adapt to DevPrivate API changes
This allows the driver to be built against either the old or new
DevPrivate API.

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-06-06 16:00:12 -07:00
Eric Anholt 2c1fda08e8 Use libc instead of deprecated libc wrappers for malloc/calloc/free. 2010-06-06 15:56:35 -07:00
Chris Wilson 6db1e5231b dri: Protect against NULL dereference following GPU hang.
References:

  Bug 28361 - "glresize" causes server segfault with single buffering.
  https://bugs.freedesktop.org/show_bug.cgi?id=28361

[ 14528.767] (EE) intel(0): Failed to submit batch buffer, expect rendering corruption or even a frozen display: Input/output error.
[ 14528.767] (EE) intel(0): Disabling acceleration.
[ 14528.788] Backtrace:
[ 14528.858] 0: /usr/bin/X (xorg_backtrace+0x28) [0x491818]
[ 14528.858] 1: /usr/bin/X (0x400000+0x65ca9) [0x465ca9]
[ 14528.858] 2: /lib/libpthread.so.0 (0x7f9df2dc9000+0xedf0) [0x7f9df2dd7df0]
[ 14528.858] 3: /usr/local/lib/libdrm_intel.so.1 (drm_intel_bo_flink+0x0) [0x7f9defd60c60]
[ 14528.858] 4: /usr/local/lib/xorg/modules/drivers/intel_drv.so (0x7f9deff6a000+0x2fdfd) [0x7f9deff99dfd]
[ 14528.858] 5: /usr/lib/xorg/modules/extensions/libdri2.so (0x7f9df01b8000+0x19e7) [0x7f9df01b99e7]
[ 14528.858] 6: /usr/lib/xorg/modules/extensions/libdri2.so (0x7f9df01b8000+0x1fdb) [0x7f9df01b9fdb]
[ 14528.858] 7: /usr/lib/xorg/modules/extensions/libdri2.so (DRI2GetBuffersWithFormat+0x10) [0x7f9df01ba250]
[ 14528.858] 8: /usr/lib/xorg/modules/extensions/libdri2.so (0x7f9df01b8000+0x3834) [0x7f9df01bb834]
[ 14528.858] 9: /usr/bin/X (0x400000+0x2fc2c) [0x42fc2c]
[ 14528.858] 10: /usr/bin/X (0x400000+0x24da5) [0x424da5]
[ 14528.858] 11: /lib/libc.so.6 (__libc_start_main+0xe6) [0x7f9df1d60a26]
[ 14528.858] 12: /usr/bin/X (0x400000+0x24959) [0x424959]
[ 14528.858] Segmentation fault at address 0x20
[ 14528.858] Fatal server error:
[ 14528.858] Caught signal 11 (Segmentation fault). Server aborting

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-02 20:43:49 +01:00
Chris Wilson 2989f51caf i830: Remove unused coord-adjust.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-01 23:15:02 +01:00
Chris Wilson dc402334f4 i915: Centre sampling.
Use centre sampling of textures to match pixman, and remove numerous
off-by-one and visual artefacts when rendering. The classic example for
this is cairo/text/xcomposite-projection where the edge of the rotated
rectangle is jaggy due to the incorrect sample position.

Fixes:

  Bug 16917  - [i915] Blur on y-axis also when only x-axis is scaled
               billiear
  https://bugs.freedesktop.org/show_bug.cgi?id=16917

And about 15 tests from the Cairo test suite.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-01 23:15:02 +01:00
Chris Wilson f74b3f82ba i915; Avoid the implicit flush on changing BUF_INFO
3DSTATE_BUF_INFO is an implicit flush of the piepline, so avoid emitting
that and associated state unless the destination pixmap has actually
changed. This is a win of around 3-5% for cairo-perf-trace, notably for
firefox.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-06-01 23:15:02 +01:00
Jesse Barnes f227240203 DRI2: fix new buffer exchange check
Chris's new buffer exchange check is a good one, but we don't want to
hit the immediate blit fallback path if it fails.  We still want to
schedule a blit for sometime in the future, and we need to use it
wherever an exchange might occur (like the secondary flip check or the
currently disabled CanExchange check).

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=28252.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2010-06-01 13:46:15 -07:00
Chris Wilson cd38b705be Disable acceleration if we detect a hardware error.
This is wildly optimistic, but it should work in a surprising number of
error situations and some output in those cases will be hopefully be
better than none...

If we submit a batchbuffer and the kernel reports the GPU is hung (which
will be caused by an earlier execbuffer, and so the kernel should have
had enough time to determine whether or not it could reset the GPU) then
disable any further attempt to accelerate gfx and force fallbacks to map
the buffers and use the CPU. We cannot normally map any more buffers if
the GPU is hung, so only those already mapped prior to the hang can be
written to, or those allocated in system memory. However, we can expect
that the framebuffer is already mapped, and so have a reasonable
expectation to continue to see the display update.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-31 18:00:11 +01:00
Chris Wilson 5fff430046 uxa: Mega-Glyphs!
Rewrite glyph rendering to avoid the intermediate buffer, accumulating
the glyph rectangles directly in the backend composite routines. And
modify the glyph cache routines to fully utilise the allocated size of
the tiled buffer on older hardware. To do this we alias all glyph sizes
into the same texture using a technique suggested by Keith Packard.

PineView:
  885/856-> 1150/1110 kglyph/s (aa/rgb)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-31 14:03:42 +01:00
Chris Wilson d31abccd41 i915: Support textured video on an extended desktop.
Handle rendering textured video onto an extended desktop (>2048) by
using a temporary pixmap. Note that we still cannot handle rendering to
a greater than 2048 destination region, for that we will need to tile.
Hmm, time to request a 2560x1600, 10bpc monitor...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-31 12:23:29 +01:00
Chris Wilson 2cfd5bc134 dri: Compilation fix.
17:53 < arekm> ickle: i830_dri.c:630:28: error: ‘DrawableRec’ has no member named ‘bpp’
17:53 < arekm> ickle: i830_dri.c:630:57: error: ‘DrawableRec’ has no member named ‘bpp’

* sigh. I need to fix this machine to have the right version of the
* headers.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-29 17:55:19 +01:00
Chris Wilson e2615cdeef dri: Only flip if the front and back pixmaps match.
An unredirected window (thanks Michel for the reminder) is backed by the
Screen pixmap, and so uses a reference of that as its front buffer. The
back buffer is a pixmap appropriately sized for the drawable. When the
application requests to swap its buffers, obviously we cannot simply
exchange the front and back buffer as they do not match, but need to copy
the appropriate region from the back to the front.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-29 16:40:06 +01:00
Chris Wilson 8b2039187f Revert "dri: Use size from backing pixmap when creating buffers."
This reverts commit 44d45d3fa5.

Michel Dänzer pointed out the flaw in using the pixmap size instead of
the drawable size:

  Using the backing pixmap dimensions for this is not desirable. In
  particular, it means that the DRI2 buffers of non-redirected windows
  always have the same size as the screen. But even for redirected windows
  it wastes some graphics memory with a re-parenting window manager, that
  is if it doesn't break in various ways due to the top left corner of the
  DRI2 buffers no longer corresponding to the top left corner of the window.
2010-05-29 12:14:55 +01:00
Chris Wilson 44d45d3fa5 dri: Use size from backing pixmap when creating buffers.
This avoid using the garbage values stored in the Screen drawable,
instead of the true values which are only maintained in its backing
pixmap. The consequence of using the wrong size was to hand a 1x1
pixmap to metacity/mutter and have it believe it was a full screen
drawable; GPU hangs ensued if using page flipping.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-29 10:39:28 +01:00
Chris Wilson 90c74a4314 i915: Don't re-emit vertex size unless it has changed.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-28 21:50:04 +01:00
Chris Wilson 73111cf2a2 Decouple non-reusuable pixmaps from batch lists on unref.
==7596== Invalid write of size 4
==7596==    at 0x491ACA8: intel_batch_teardown (i830_batchbuffer.c:118)
==7596==    by 0x491C9D6: I830CloseScreen (i830_driver.c:1419)
==7596==    by 0x8103A9C: RRCloseScreen (randr.c:105)
==7596==    by 0x80DE794: xf86CrtcCloseScreen (xf86Crtc.c:759)
==7596==    by 0x80BEBA3: DGACloseScreen (xf86DGA.c:268)
==7596==    by 0x80D044B: DPMSClose (xf86DPMS.c:134)
==7596==    by 0x488B050: XvCloseScreen (xvmain.c:320)
==7596==    by 0x81841B1: VidModeClose (xf86VidMode.c:110)
==7596==    by 0x80EB12F: CursorCloseScreen (cursor.c:191)
==7596==    by 0x810CA17: AnimCurCloseScreen (animcur.c:108)
==7596==    by 0x816937E: compCloseScreen (compinit.c:86)
==7596==    by 0x48D39B9: glxCloseScreen (glxscreens.c:221)
==7596==  Address 0x49c1a50 is 24 bytes inside a block of size 52 free'd
==7596==    at 0x4024866: free (vg_replace_malloc.c:325)
==7596==    by 0x80B023C: Xfree (utils.c:1096)
==7596==    by 0x4927CFD: i830_set_pixmap_bo (i830_uxa.c:647)
==7596==    by 0x491C9B4: I830CloseScreen (i830_driver.c:1413)
==7596==    by 0x8103A9C: RRCloseScreen (randr.c:105)
==7596==    by 0x80DE794: xf86CrtcCloseScreen (xf86Crtc.c:759)
==7596==    by 0x80BEBA3: DGACloseScreen (xf86DGA.c:268)
==7596==    by 0x80D044B: DPMSClose (xf86DPMS.c:134)
==7596==    by 0x488B050: XvCloseScreen (xvmain.c:320)
==7596==    by 0x81841B1: VidModeClose (xf86VidMode.c:110)
==7596==    by 0x80EB12F: CursorCloseScreen (cursor.c:191)
==7596==    by 0x810CA17: AnimCurCloseScreen (animcur.c:108)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-26 21:07:46 +01:00
Chris Wilson a6fb6aa5f9 Add vertex bo to the list of buffers to be torn down.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-26 20:31:45 +01:00
Chris Wilson 5dce69002d i965: Remove ATOMIC_BATCH.
This paranoid check is deceased; pining for the fjords.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-26 20:27:29 +01:00
Eric Anholt 06ebb55d30 Add a workaround for Ironlake errata relating to disabling the clipper. 2010-05-26 12:21:09 -07:00
Eric Anholt 158a158dad Add a workaround for Ironlake errata regarding blits and other engines. 2010-05-26 12:21:09 -07:00
Eric Anholt 3461f8f4bc Remove remaining REG_DUMPER build stuff. 2010-05-26 12:21:09 -07:00
Chris Wilson 309bd3a299 i830: Skip an empty fill.
In the extremely unlikely event that the higher layer erroneous gave us
an empty fill, skip it.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-26 10:21:03 +01:00
Chris Wilson ea07535240 i915: Emit CA over using OutReverse + Add passes
On PineView:
  578/621 -> 610/617 kglyphs/sec [rgb/aa]
2010-05-24 18:31:16 +01:00
Chris Wilson 80a9e64f50 uxa: Use temporary dest when target is too large for compositor
If the destination cannot fit into the 3D pipeline when we need to
composite, we fallback to doing the operation on the CPU. This is very
slow, and quite easy to trigger on i915 by plugging in an external
display.

An alternative is to extract the extents of the operation from the
destination using the blitter which can usually handle much larger
operations. This gives us a temporary target that can fit into the 3D
pipeline and thus be accelerated, before copying back into the larger
real destination.

For x11perf this boosts glyph rendering on PineView, from 38kglyphs/s to
480kglyphs/s. Just a little shy of the native performance of 601kglyphs/s

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 18:31:16 +01:00
Chris Wilson e3ece83f57 i915: compute normalized texcoords using a scale factor.
500 -> 580kglyphs/s on i945.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:42:18 +01:00
Chris Wilson 2adf823b80 i915: Add special case primitive emitters for glyphs.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:40:26 +01:00
Chris Wilson f64ab9e0d9 i915: Move vertices into a vertex buffer object.
In theory this should allow us to pack far more operations into a single
batch buffer, and reduce our overheads.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:36:23 +01:00
Chris Wilson 2b050f330f Use pwrite to upload the batch buffer
By using pwrite() instead of dri_bo_map() we can write to the batch buffer
through the GTT and not be forced to map it back into the CPU domain and
out again, eliminating a double clflush.

Measing x11perf text performance on PineView:

Before:
16000000 trep @   0.0020 msec (511000.0/sec): Char in 80-char aa line (Charter 10)
16000000 trep @   0.0021 msec (480000.0/sec): Char in 80-char rgb line (Charter 10)
After:
16000000 trep @   0.0019 msec (532000.0/sec): Char in 80-char aa line (Charter 10)
16000000 trep @   0.0020 msec (496000.0/sec): Char in 80-char rgb line (Charter 10)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:33:37 +01:00
Chris Wilson dcef703a7c Kill paranoid assertions on every write into the batchbuffer.
On my PineView box these represent ~5% overhead on x11perf text:

Before:
16000000 trep @   0.0020 msec (495000.0/sec): Char in 80-char aa line (Charter 10)
12000000 trep @   0.0022 msec (461000.0/sec): Char in 80-char rgb line (Charter 10)

After:
16000000 trep @   0.0020 msec (511000.0/sec): Char in 80-char aa line (Charter 10)
16000000 trep @   0.0021 msec (480000.0/sec): Char in 80-char rgb line (Charter 10)

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:33:35 +01:00
Chris Wilson bc41f84e01 i915: Emit composite primitive with specialised functions.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-24 09:32:30 +01:00
Chris Wilson 4a3476ea09 i915: amalgamate composite into a single primitive list
Combine all the calls to composite between prepare_composite and
done_composite into a single primitive list, rather than a primitive
call per composite().

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-23 18:52:15 +01:00
Kristian Høgsberg 509df27c74 dri: Clean up DRI2 API #ifdefs a bit
Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
2010-05-18 10:01:52 -04:00
Chris Wilson 5e04a81369 i830: Remove vestigal debugging ALWAYS_FLUSH and ALWAYS_SYNC
These are now debugging options exposed in Xorg.conf, and now unused int
the source code.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-17 15:16:25 +01:00
Chris Wilson 723cc45b27 dri: Check error code from GetScratchGC()
It may fail so be prepared, and do use the right drawable!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-17 15:14:55 +01:00
Chris Wilson 2c69709d8a i830: Encode surface bpp into format
References:

  Bug 28135 - [855GM] Slowdown/High CPU-Usage after Git-Commit
              926fbc7d90
  https://bugs.freedesktop.org/show_bug.cgi?id=28135

The simple answer is that I had assumed that 0 was a reserved value.
However, without the bbp encoded into the format 0 was used for a8r8g8b8
and r5g6b5, which are very common formats!

The other possibility for the slowdown is that gtkperf is using of the
now verboten xrgb formats -- but would in fact be valid if the source
covers the clip and we could fixup the alpha value in the fixed function
combine.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-16 18:41:52 +01:00
Chris Wilson 9c3da71349 i830: Remove xrgb conversion to argb, no longer required.
All textures are now properly declared so that the alpha swizzling
occurs in the sampler or not at all. The downside is that for quite a
few composite operations we have to fallback to software on older
hardware. There is scope for more performing the alpha expansion in
shaders or combiners when we know the picture covers the clip - which is
almost all of the time for normal operations especially those
constructed by Cairo.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-15 01:09:26 +01:00
Chris Wilson 926fbc7d90 i830: Remove incorrectly mapped tex formats.
We no longer workaround the lack of alpha expansion for xrgb textures as
this interferes with EXTEND_NONE, though we could if we know the source
covers the clip...

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-15 01:09:13 +01:00
Chris Wilson 213816c30b i915: Load texture into directly into OC when possible.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-15 00:48:19 +01:00
Chris Wilson 271240fd47 i915: Remove a couple of unsupported 16bpp no-alpha tex formats
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 23:56:05 +01:00
Chris Wilson f7bbcc492a Split the prepare blitter functions into check + prepare.
Allow us to check whether we can handle the operation using the blitter
prior to doing any work.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 23:31:57 +01:00
Chris Wilson 4be8d7eb89 i915: Don't force alpha=1 for RGB drawables in the shader.
I was blindly fixing rendercheck without thinking. We need to force the
alpha value to be in the blend unit and not before -- otherwise we
generate the incorrect result whilst blending. D'oh.
2010-05-14 21:16:51 +01:00
Chris Wilson a21297d7cc drm: Remove pin(); unpin() sync
GEM handles serialisation of the new front buffer with respect to page
flipping and rendering and reports back when the flip is complete.
Adding a sync point here is then redundant.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 17:52:22 +01:00
Chris Wilson 7ee73d2c6f drm: Remove unused old_front parameter from drmmode_do_pageflip.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 17:51:40 +01:00
Chris Wilson 030d56279b drm: don't overwrite the old intel->front_buffer
It's now handled in the common ExchangeBuffers() path.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 17:30:23 +01:00
Chris Wilson 5bd0227395 i830: Teardown batch entries on reset.
By not cleaning up the batch entries when resetting the X server, we left
the pointers in an inconsistent state and caused X to crash.
2010-05-14 15:50:05 +01:00
Chris Wilson 0d2392d44a dri: Hold reference to buffers across swap
As we schedule swaps for some time in the future and may process a
detachment prior to receiving the vblank notification from the kernel,
we need to hold a reference to the buffers for our swap event handler.

Fixes:
  Bug 28080 - "glresize" causes X server segfault with indirect rendering.
  https://bugs.freedesktop.org/show_bug.cgi?id=28080

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-14 10:32:12 +01:00
Chris Wilson 25811dc7b7 i915: Force output alpha to 1. if dst has no alpha channel.
Ensure that garbage is not stored in the unused alpha channel so that
we can rely on it being currently initialiased when used as a source or
returning via GetImage.

Partial fix for rendercheck -t blend
2010-05-13 17:17:10 +01:00
Chris Wilson 0e726b85ca i915: Add a2r10g10b10 format and friends
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-13 09:40:27 +01:00
Chris Wilson 9f54107f86 dri2: Handle reference counting across page flipping
1. Instead of swapping bos, swap the entire private structure.

2. If we update the pixmap bo for the Screen, make sure we update the
reference inside intel->front_buffer so that xrandr still functions.

Fixes:

  Bug 27922 - i965: Rapidly resizing OpenGL window causes GPU to hang.
  https://bugs.freedesktop.org/show_bug.cgi?id=27922

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-12 21:37:49 +01:00
Chris Wilson 0c6372a77f i830: Prevent allocation of bo larger than half the aperture
We need to prevent overcommitting the aperture, and in particular if we
allocate a buffer larger than available space we will fail to mmap it in
and rendering will fail. Trying to allocate multiple large buffers in
the aperture, often the case when falling back, causes thrashes and
eviction of useful buffers. So from the outset simply do not allocate a
bo if the the required size is more than half the available aperture
space.

Fixes allocation failure in ocitymap.trace for instance.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2010-05-12 12:50:31 +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
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 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 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