xf86-video-intel/src/sna
Chris Wilson a3371613c9 sna: Do not automagically convert GTT mappings on untiled scanout to CPU
The likelihood of an untiled mapping of the scanout is slim, except for
gen3 with large desktops, and there it should never be in the CPU
domain...

The issue is that we may perform an operation "inplace", yet incoherent
with the display engine, and never flush the CPU cache, resulting in
render corruption. In theory at least!

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2012-04-25 11:17:58 +01:00
..
Makefile.am sna: Add video sprite support for ILK+ 2012-03-28 22:53:17 +01:00
README
blt.c sna: Allow ridiculously large bo, up to half the total GATT 2012-01-29 14:47:12 +00:00
compiler.h sna: Encourage large operations to be migrated to the GPU 2011-12-24 21:31:06 +00:00
gen2_render.c sna/gen2+: Approximate expensive gradients when using imprecise rendering 2012-03-25 23:04:58 +01:00
gen2_render.h sna/gen2: Use specular component for solid spans 2011-07-01 21:41:23 +01:00
gen3_render.c sna/gen3: Reset accumulated constants for each composite 2012-04-08 13:20:13 +01:00
gen3_render.h
gen4_render.c sna/gen4: Remove the accidental debugging hack from the last commit 2012-04-02 13:51:37 +01:00
gen4_render.h
gen5_render.c sna/gen3+: Fix sampling of borders around gradients 2012-04-02 13:42:35 +01:00
gen5_render.h sna/gen5: Avoid bitfields for simple assignments 2011-09-12 19:25:08 +01:00
gen6_render.c sna/gen3+: Fix sampling of borders around gradients 2012-04-02 13:42:35 +01:00
gen6_render.h sna: Move the flush to the backends 2012-01-20 00:02:05 +00:00
gen7_render.c sna/gen3+: Fix sampling of borders around gradients 2012-04-02 13:42:35 +01:00
gen7_render.h sna: Move the flush to the backends 2012-01-20 00:02:05 +00:00
kgem.c sna: Do not automagically convert GTT mappings on untiled scanout to CPU 2012-04-25 11:17:58 +01:00
kgem.h sna: Always clear the mmapped domains when reusing partial upload buffers 2012-04-20 13:21:40 +01:00
kgem_debug.c sna: Begin debugging gen7 2011-11-11 00:15:44 +00:00
kgem_debug.h sna: Begin debugging gen7 2011-11-11 00:15:44 +00:00
kgem_debug_gen2.c sna/gen2: Improve batch decoder. 2011-09-04 12:46:32 +01:00
kgem_debug_gen3.c sna: Explicitly retire the bo following a serialisation point 2012-01-11 12:10:18 +00:00
kgem_debug_gen4.c sna: Explicitly retire the bo following a serialisation point 2012-01-11 12:10:18 +00:00
kgem_debug_gen5.c sna: Allow ridiculously large bo, up to half the total GATT 2012-01-29 14:47:12 +00:00
kgem_debug_gen6.c sna/gen6: Reduce PictOpClear to PictOpSrc (with blending disabled) 2012-02-04 20:07:45 +00:00
kgem_debug_gen7.c sna: Store damage-all in the low bit of the damage pointer 2012-01-12 02:16:49 +00:00
rop.h sna: Reduce and clarify dependencies 2011-11-16 22:15:39 +00:00
sna.h sna: Minimise the risk of hotplug hangs by checking fb before vsync 2012-03-30 23:01:21 +01:00
sna_accel.c sna: Remove the assertions that the cached upload buffers are active 2012-04-20 17:15:37 +01:00
sna_blt.c sna/gen3: Convert the clear-color from picture->format to a8r8g8b8 2012-04-03 12:36:22 +01:00
sna_composite.c sna: Adjust the damage region for the composite offset 2012-03-22 11:23:02 +00:00
sna_damage.c sna: Correct the damage offset for redirected rendering 2012-04-06 15:38:02 +01:00
sna_damage.h sna: Use a proxy rather than a temporary bo for too-tall but thin targets 2012-01-27 20:34:30 +00:00
sna_display.c sna: Clear the domain tracking after attaching the bo to scanout 2012-04-25 11:17:58 +01:00
sna_dri.c sna/dri: Always clear the scanout when destroying dri2 buffers 2012-04-23 11:09:37 +01:00
sna_driver.c sna: Declare videoRam correctly on gen2 devices 2012-03-19 14:38:28 +00:00
sna_glyphs.c sna/glyphs: Prefer a temporary upload mask for large glyph masks 2012-04-06 15:14:45 +01:00
sna_gradient.c sna/gradient: Compute the absolute delta between color stops 2012-04-07 10:02:23 +01:00
sna_io.c sna: Only engage the GPU detiler for multiple rows 2012-04-04 11:13:27 +01:00
sna_module.h sna: Add zaphod support 2011-06-07 16:54:57 +01:00
sna_reg.h sna: Support performing alpha-fixup on the source 2012-01-06 17:50:01 +00:00
sna_render.c sna: Align texture subsurfaces to 2x2 texture samples 2012-04-14 13:07:06 +01:00
sna_render.h sna/gen3: Convert the clear-color from picture->format to a8r8g8b8 2012-04-03 12:36:22 +01:00
sna_render_inline.h sna: Don't consider upload proxies as being on the GPU for render targets 2012-04-19 09:12:18 +01:00
sna_stream.c sna: Pass usage hint for creating linear buffers 2012-03-02 14:34:23 +00:00
sna_tiling.c sna: Tidy an assertion when handling tiled copies 2012-03-21 09:05:58 +00:00
sna_transform.c
sna_trapezoids.c sna/traps: Use a temporary variable for the write pointer 2012-04-09 10:48:08 +01:00
sna_video.c sna: Add video sprite support for ILK+ 2012-03-28 22:53:17 +01:00
sna_video.h sna: Add video sprite support for ILK+ 2012-03-28 22:53:17 +01:00
sna_video_hwmc.c sna: Disable use of xvmc for SNB+ 2012-02-06 09:19:56 +00:00
sna_video_hwmc.h
sna_video_overlay.c sna/video: Constify a couple of attribute arrays 2011-11-13 13:13:03 +00:00
sna_video_sprite.c sna: Avoid leaking the plane resources when determining sprite planes 2012-04-14 20:45:26 +01:00
sna_video_textured.c sna/video: Only wait upon the scanout pixmap 2012-04-06 21:10:50 +01:00

README

SandyBridge's New Acceleration
------------------------------

The guiding principle behind the design is to avoid GPU context switches.
On SandyBridge (and beyond), these are especially pernicious because the
RENDER and BLT engine are now on different rings and require
synchronisation of the various execution units when switching contexts.
They were not cheap on early generation, but with the increasing
complexity of the GPU, avoiding such serialisations is important.

Furthermore, we try very hard to avoid migrating between the CPU and GPU.
Every pixmap (apart from temporary "scratch" surfaces which we intend to
use on the GPU) is created in system memory. All operations are then done
upon this shadow copy until we are forced to move it onto the GPU. Such
migration can only be first triggered by: setting the pixmap as the
scanout (we obviously need a GPU buffer here), using the pixmap as a DRI
buffer (the client expects to perform hardware acceleration and we do not
want to disappoint) and lastly using the pixmap as a RENDER target. This
last is chosen because when we know we are going to perform hardware
acceleration and will continue to do so without fallbacks, using the GPU
is much, much faster than the CPU. The heuristic I chose therefore was
that if the application uses RENDER, i.e. cairo, then it will only be
using those paths and not intermixing core drawing operations and so
unlikely to trigger a fallback.

The complicating case is front-buffer rendering. So in order to accommodate
using RENDER on an application whilst running xterm without a composite
manager redirecting all the pixmaps to backing surfaces, we have to
perform damage tracking to avoid excess migration of portions of the
buffer.