Commit Graph

4258 Commits

Author SHA1 Message Date
Chris Wilson 34efb73146 sna: Hint likely usage of CPU bo
If we are going to transfer GPU damage back to the CPU bo, then we can
reuse an active buffer and so improve the recycling.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 17:00:22 +00:00
Chris Wilson 3018967438 sna: Only upload to the source GPU bo if we need tiling to avoid TLB misses
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 16:25:49 +00:00
Chris Wilson b7f5d75aa5 Silence uxa-only compilation
Kill the stray warning for the undeclared extern used by the module
loader.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 16:25:28 +00:00
Chris Wilson a73cc4bf1e sna/gen5: Tidy checking against hardcoded maximum 3D size
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 14:55:23 +00:00
Chris Wilson b43548af39 sna: Explicitly handle errors from madv
In order to avoid conflating whether a bo was marked purgeable with its
retained state, we need to carefully handle the errors from madv.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 13:19:26 +00:00
Chris Wilson 954cf5129d sna/gen[67]: check for context switch after preparing source
If we used the BLT to prepare the source, see if we can continue the
operation on the BLT.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 11:17:35 +00:00
Chris Wilson 90a432431c sna/gen[23]: Try BLT if the source/target do no fit in the 3D pipeline
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 10:25:40 +00:00
Chris Wilson eeb9741981 sna/gen3: Tidy checks against hardcoded maximum 3D pipeline size
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 10:04:08 +00:00
Chris Wilson dcfcf438a5 sna/gen2+: If we use the BLT to prepare the target, try using BLT for op
If we incurred a context switch to the BLT in order to prepare the
target (uploading damage for instance), we should recheck whether we can
continue the operation on the BLT rather than force a switch back to
RENDER.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 09:58:08 +00:00
Chris Wilson 507debe801 sna/gen5: If we need to flush the composite op, check to see if we can blit
If we need to halt the 3D engine in order to flush the pipeline for a
dirty source, we may as well re-evaluate whether we can use the BLT
instead.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 01:47:27 +00:00
Chris Wilson de530f89a3 sna/gen5+: First try a blt composite if the source/dest are too large
If we will need to extract either the source or the destination, we
should see if we can do the entire operation on the BLT.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 01:47:27 +00:00
Chris Wilson 7b88f87945 sna: Upload images in place from CopyArea
As for PutImage, if the damage will be immediately flushed out to the
GPU bo, we may as well do the write directly to the GPU bo and not
staged via the shadow.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-18 00:48:33 +00:00
Chris Wilson 1418e4f315 sna: Tune the default pixmap upload paths
One issue with the heuristic is that it is based on total pixmap size
whereas the goal is to pick the placement for the next series of
operations. The next step in refinement is to combine an overall
placement to avoid frequent migrations along with a per-operation
override.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 23:42:06 +00:00
Chris Wilson 25c353503a sna: Simplify write domain tracking
Replace the growing bitfield with an enum marking where it was last
used.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:35 +00:00
Chris Wilson d20d167a75 sna: Upload to large pixmaps inplace
When the pixmap is large, larger than L2 cache size, we are unlikely to
benefit from first copying the data to a shadow buffer -- as that shadow
buffer itself will mostly reside in main memory. In such circumstances
we may as perform the write to the GTT mapping of the GPU bo. As such,
it is a fragile heuristic that may require further tuning.

Avoiding that extra copy gives a 30% boost to putimage500/shmput500 at
~10% cost to putimage10/shmput10 on Atom (945gm/PineView), without any
noticeable impact upon cairo.

Reported-by: Michael Larabel <Michael@phoronix.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:35 +00:00
Chris Wilson dd8fd6c906 sna: Search through the inactive VMA cache for potential upload bo
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:35 +00:00
Chris Wilson 8ef5d8c195 sna: Map the upload buffer using an LLC bo
In order to avoid having to perform a copy of the cacheable buffer into
GPU space, we can map a bo as cacheable and write directly to its
contents. This is only a win on systems that can avoid the clflush, and
also we have to go to greater measures to avoid unnecessary
serialisation upon that CPU bo. Sadly, we do not yet go to enough length
to avoid negatively impacting ShmPutImage, but that does not appear to
be a artefact of stalling upon a CPU buffer.

Note, LLC is a SandyBridge feature enabled by default in kernel 3.1 and
later. In time, we should be able to expose similar support for
snoopable buffers for other generations.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:35 +00:00
Chris Wilson 6e47f28371 sna/gen3: Enforce a minimum width of 2 elements for the render target
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 2ff0826f94 sna: Discard GPU damage first before choosing where to fill_boxes()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 55520bab57 sna/gen3: Initialise missing value of need ca pass for fill_boxeS()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson e56d5081ea sna: Wrap I915_GEM_GET_PARAM with valgrind markup
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson e0399ec161 sna: Suppress an overwritten XY_SRC_COPY
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 1684ed6a5e sna: Clean up compiler warnings for shadowed variables
No outright bug, just plenty of unwanted noise.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 300586b229 sna/gen4+: disable the blend unit for PictOpSrc
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 0de7604d8e src/gen4+: Add support for depth 15 render copies/fills
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson a8fe50ab65 uxa: Explicitly check for libdrm_intel in configure
And remove the excess dependencies from the common files.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 21:26:34 +00:00
Chris Wilson 3320b459d6 sna: Clean up caches stored upon the batch bo
Until the advent of the VMA cache, we were safe to reap the batch bo by
hand. However, as we continue to add additional data to the bo, it is
wise to use the common free function.

Reported-by: Clemens Eisserer <linuxhippy@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43899
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-17 12:18:55 +00:00
Zhigang Gong e2c8bac972 uxa/glamor: Fallback to new glamor pixmap if failed to create textured pixmap.
If we failed to create textured pixmap from BO's handle, we
turn to create a new glamor pixmap by call glamor_create_pixmap
rather than fallback to in-memory pixmap. Have to introduce
a new wrapper function intel_glamor_create_pixmap.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
2011-12-16 20:23:09 +08:00
Chris Wilson 19c184b7e4 sna/gen3: Check for upload failure of video bo
And propagate that failure back to the client.

Reported-by: Paul Neumann <paul104x@yahoo.de>
References: https://bugs.freedesktop.org/show_bug.cgi?id=43716
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-15 18:19:18 +00:00
Chris Wilson e68a8748f3 uxa: Move the region creation beyond the call into glamor
So that we avoid leaking the region if hooking into glamor.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-15 09:48:08 +00:00
Chris Wilson e3153a779e sna: cap the number of times we attempt to resubmit the batch upon EBUSY
Just in case the kernel gets stuck in a loop and we fail to make any
progress at all.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-15 09:31:42 +00:00
Chris Wilson 1cc43dc97b sna: More missing move-to-cpu allocation checks
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-15 00:05:49 +00:00
Chris Wilson 12448b5606 sna: silence warning for unused 'priv'
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-15 00:05:44 +00:00
Chris Wilson eb8e979b4d uxa/glamor: Allocate a fbPixmap with storage for fallbacks
When we try to create a glamor pixmap and fail we need to create a real
pixmap along with its pixel allocation, instead of detaching ourselves
and returning the fake pixmap header.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 23:08:34 +00:00
Chris Wilson 232fa93a4b uxa/glamor: Always notify glamor that the glyph has been unrealized
The danger of the early return when UXA is not using glyphs is evident
in the eventual crash when glamor begins evicting and reusing its glyph
cache slots.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 20:11:39 +00:00
Chris Wilson 95cceb5ae5 sna: Fix DBG crash whilst pruning inactive GPU buffers
Don't attempt to dereference the NULL gpu_bo after having just freed it.
Here in lies the folly of trying to blindly silence the compiler.

Instead we should heed the error return as it means that we didn't
decouple the pixmap from the inactive list and so we choose to place it
back on the active list to purge again in the near future.

Reported-by: Paul Neumann <paul104x@yahoo.de
References: https://bugs.freedesktop.org/show_bug.cgi?id=43716
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 19:38:36 +00:00
Chris Wilson e7f4b7fd91 sna: Add some DBG() around Y-to-X fallbacks
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 18:21:22 +00:00
Chris Wilson 32bb2c89b8 sna: Check allocation of pixman_image_t
And just fail to perform the copy, clearing the dst instead.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 16:29:50 +00:00
Chris Wilson 37c525a11c sna: Skip glyphs if we fail to allocate pixel data for them
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 16:26:46 +00:00
Chris Wilson 6a8188bb4d sna: Close any handles after bo allocation failures
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 16:24:54 +00:00
Chris Wilson 43a2274312 sna: Use the provided bo for blitting rather than assume priv->gpu_bo
Reported-by: nkalkhof@web.de
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=43802
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 13:26:05 +00:00
Chris Wilson 30f5ee11f8 sna: Use a static request and synchronous rendering in case of malloc failure
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 13:06:35 +00:00
Chris Wilson 23fb2cebbe sna/blt: Add a missing allocation check upon the source CPU pixmap
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 12:50:35 +00:00
Chris Wilson 5b0f3ff9a8 sna/damage: Guard against malloc failures
In the event of failure, we choose to loose track of the damage and
choose rendering corruption over crashing.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 12:23:04 +00:00
Zhigang Gong f8b9a2a547 uxa/glamor: Enable the rest of the glamor rendering routines
This commit hooks up all the remaining rendering routines to call into
glamor; the takeover is nearly complete! When tested with the latest
glamor master branch, it passes rendercheck.

One thing need to be pointed out is the picture's handling.
Pictures support many different color formats, but glamor's
texture only support a few color formats. And the most common
scenario is that we create a pixmap with a color depth and
then attach it to a picture which has a specific color format
with the same color depth. But there is no way to change a
texture's internal format after the texture was allocated.
If you do that, the OpenGL will allocate a new texture. And
then the glamor side and UXA side will be inconsitent. So
for all the picture related operations, we can't fallback to
UXA path directly, even it is rather a straight forward
operation. So for the get_image, Addtraps.., we have to add
wrappers function for them to jump into glamor firstly.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
[ickle: prefer access; ok = glamor(); finish; if (!ok) goto fallback; return; ]
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 11:29:29 +00:00
Chris Wilson d5456e40d9 uxa/glamor: Silence a compiler warning for some unused code
intel_glamor.c: In function 'intel_glamor_create_screen_image':
intel_glamor.c:192:12: warning: variable 'pixmap' set but not used
[-Wunused-but-set-variable]

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 10:41:33 +00:00
Chris Wilson 4f1a99a70e sna: Protect against deferred malloc failures for pixel data
As we now defer the allocation of pixel data until first use, it can
fail in the middle of a rendering routine. In order to prevent chasing
us passing a NULL pointer into the fallback routines, we need to propagate
the failure from the malloc and suppress the failure, discarding the
operation, which is less than ideal.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 10:35:04 +00:00
Chris Wilson d2c6d950ed sna: Mark upload buffers as unaccessible upon submission
Use valgrind to catch use-after-finish bugs.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-14 08:58:31 +00:00
Chris Wilson e39ea29bcc sna: Allow the debugger to map bo from the batch during kgem_submit()
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-13 13:18:56 +00:00
Chris Wilson 2fabb5068d sna: Debug fixup for non-LLC systems
The cpu bo is only allocated on LLC systems, so do avoid the NULL deref on
debugging for others.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
2011-12-13 13:15:51 +00:00