xf86-video-intel/src/sna
Chris Wilson 0267f5902d sna: Check after filtering points before submitting boxes to be drawn
As we clip the points when converting them into GPU boxes, check that we
have something to draw before submitting the commands.

Reported-by: Ian Gay <gay@sfu.ca>
References: https://bugs.freedesktop.org/show_bug.cgi?id=86075
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2014-11-10 07:46:53 +00:00
..
brw sna/gen6+: Fix projective sample coordinates 2014-10-31 16:20:25 +00:00
fb sna: Adapt to changes in internal render API in Xorg-1.17 2014-10-24 08:04:27 +01:00
Makefile.am sna: Emit assertions with FatalError 2014-09-10 11:58:11 +01:00
README
atomic.h
blt.c sna: Micro-optimise unswizzling tiling/detiling 2014-06-28 14:18:23 +01:00
compiler.h
gen2_render.c sna: Leave more Pixmap breadcrumbs in DBG 2014-09-02 19:15:49 +01:00
gen2_render.h
gen3_render.c sna: Leave more Pixmap breadcrumbs in DBG 2014-09-02 19:15:49 +01:00
gen3_render.h
gen4_common.c
gen4_common.h
gen4_render.c sna/gen4+: Assert that the offset coordinate is within range if negative 2014-09-24 16:16:25 +01:00
gen4_render.h
gen4_source.c
gen4_source.h
gen4_vertex.c sna: Remvoe unused code 2014-09-12 21:17:04 +01:00
gen4_vertex.h
gen5_render.c intel: Store pointer to struct intel_device 2014-10-08 13:59:55 +01:00
gen5_render.h
gen6_common.c
gen6_common.h sna/gen8: Check for WT support before attempting to use the WT mocs 2014-06-13 08:27:05 +01:00
gen6_render.c sna: Modicum of extra DBG for transformed redisplay 2014-10-31 16:20:25 +00:00
gen6_render.h
gen7_render.c intel: Store pointer to struct intel_device 2014-10-08 13:59:55 +01:00
gen7_render.h
gen8_eu.c sna/gen6+: Fix projective sample coordinates 2014-10-31 16:20:25 +00:00
gen8_eu.h
gen8_render.c sna: Use VMask in 3DSTATE_PS 2014-11-06 10:43:17 +00:00
gen8_render.h sna: a bit of cleanup on gen8_render.h 2014-10-14 08:01:00 +01:00
gen8_vertex.c
gen8_vertex.h
kgem.c sna: Fix debug mmapping of active + released aux buffers 2014-11-06 16:55:46 +00:00
kgem.h sna: Experimental support for write-combining mmaps 2014-11-06 16:55:46 +00:00
kgem_debug.c sna: Expand debugging to cover gen8 BLT variations 2014-06-10 21:31:05 +01:00
kgem_debug.h
kgem_debug_gen2.c
kgem_debug_gen3.c
kgem_debug_gen4.c
kgem_debug_gen5.c
kgem_debug_gen6.c
kgem_debug_gen7.c
rop.h
sna.h sna: Experimental support for write-combining mmaps 2014-11-06 16:55:46 +00:00
sna_accel.c sna: Check after filtering points before submitting boxes to be drawn 2014-11-10 07:46:53 +00:00
sna_acpi.c
sna_blt.c sna/blt: Fix computation of remainaing boxes on gen8+ 2014-09-12 08:24:06 +01:00
sna_composite.c sna: Check picture format on destination before beginning a GPU operation 2014-11-10 07:46:39 +00:00
sna_cpu.c Silence CLang (almost) 2014-05-28 13:34:53 +01:00
sna_cpuid.h configure: check for cpuid.h 2014-08-31 11:51:46 +01:00
sna_damage.c sna: Mark up const boxes to keep the compiler happy 2014-06-20 16:23:18 +01:00
sna_damage.h sna: Prune damage that covers the entire target Pixmap 2014-09-10 16:55:14 +01:00
sna_display.c sna: Experimental support for write-combining mmaps 2014-11-06 16:55:46 +00:00
sna_display_fake.c sna: Fix attaching to a headless configuration 2014-08-26 11:43:28 +01:00
sna_dri2.c sna/dri2: Fix interoperation with PRIME and older Xorg 2014-10-22 07:24:10 +01:00
sna_dri3.c intel: Store pointer to struct intel_device 2014-10-08 13:59:55 +01:00
sna_driver.c sna: Correct units for videoRam 2014-11-04 13:40:35 +00:00
sna_glyphs.c sna: Check picture format on destination before beginning a GPU operation 2014-11-10 07:46:39 +00:00
sna_gradient.c
sna_io.c sna: Experimental support for write-combining mmaps 2014-11-06 16:55:46 +00:00
sna_module.h
sna_present.c sna: Retrieve private pointer from vblank cookie 2014-10-07 16:30:03 +01:00
sna_reg.h
sna_render.c sna: Replace GPU render operations with CPU callbacks after wedged 2014-10-16 07:48:27 +01:00
sna_render.h sna: Replace GPU render operations with CPU callbacks after wedged 2014-10-16 07:48:27 +01:00
sna_render_inline.h sna: Check picture format on destination before beginning a GPU operation 2014-11-10 07:46:39 +00:00
sna_stream.c
sna_threads.c sna: Tweak number of threads for short areas 2014-07-04 12:43:55 +01:00
sna_tiling.c sna/dri2: Pass around the correct DrawableRec for sampling from the foriegn bo 2014-06-30 21:18:43 +01:00
sna_transform.c
sna_trapezoids.c sna/trapezoids: Prefer GPU for AddTraps() 2014-10-21 20:30:21 +01:00
sna_trapezoids.h sna/trapezoids: Prefer GPU for AddTraps() 2014-10-21 20:30:21 +01:00
sna_trapezoids_boxes.c sna: Prune damage that covers the entire target Pixmap 2014-09-10 16:55:14 +01:00
sna_trapezoids_imprecise.c sna/trapezoids: Difference between two 32-bit quantities is 33-bits in size 2014-10-24 09:44:34 +01:00
sna_trapezoids_mono.c sna/trapezoids: Prevent overflow of edge gradient in mono rasteriser 2014-10-24 09:55:50 +01:00
sna_trapezoids_precise.c sna/trapezoids: Difference between two 32-bit quantities is 33-bits in size 2014-10-24 09:44:34 +01:00
sna_vertex.c
sna_video.c sna: Emit assertions with FatalError 2014-09-10 11:58:11 +01:00
sna_video.h Prepare for spurious Xv ABI changes 2014-08-08 08:26:08 +01:00
sna_video_hwmc.c intel: Store pointer to struct intel_device 2014-10-08 13:59:55 +01:00
sna_video_hwmc.h
sna_video_overlay.c Prepare for spurious Xv ABI changes 2014-08-08 08:26:08 +01:00
sna_video_sprite.c Prepare for spurious Xv ABI changes 2014-08-08 08:26:08 +01:00
sna_video_textured.c sna/xv: Give the illusion of hardware progress 2014-11-07 09:57:07 +00:00
xassert.h sna: Fix include guard 2014-09-12 21:16:12 +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.