summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-07-28 23:08:07 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2012-07-30 11:02:36 +0100
commitca9d9c02a260bf7930e04bf64e93cc051893c04e (patch)
tree66f002055cd6241d447e39b964197699968c7de0
parenteefbe5b6038424566faf7333bb09764b050dd6b4 (diff)
sna: Prefer not to create a GPU bo without RENDER acceleration
Unless that bo happens to be used on a render chain to the scanout. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/sna.h5
-rw-r--r--src/sna/sna_accel.c3
-rw-r--r--src/sna/sna_glyphs.c6
3 files changed, 9 insertions, 5 deletions
diff --git a/src/sna/sna.h b/src/sna/sna.h
index 0db6861c..b8099c94 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -558,6 +558,11 @@ static inline bool wedged(struct sna *sna)
return unlikely(sna->kgem.wedged);
}
+static inline bool can_render(struct sna *sna)
+{
+ return likely(!sna->kgem.wedged && sna->have_render);
+}
+
static inline uint32_t pixmap_size(PixmapPtr pixmap)
{
return (pixmap->drawable.height - 1) * pixmap->devKind +
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 1b8c7c67..f5cfd29d 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -931,7 +931,7 @@ static PixmapPtr sna_create_pixmap(ScreenPtr screen,
goto fallback;
}
- if (wedged(sna))
+ if (!can_render(sna))
flags = 0;
if (usage == CREATE_PIXMAP_USAGE_SCRATCH) {
@@ -957,7 +957,6 @@ static PixmapPtr sna_create_pixmap(ScreenPtr screen,
if (usage == CREATE_PIXMAP_USAGE_BACKING_PIXMAP)
usage = 0;
-force_create:
pad = PixmapBytePad(width, depth);
if (pad * height <= 4096) {
DBG(("%s: small buffer [%d], attaching to shadow pixmap\n",
diff --git a/src/sna/sna_glyphs.c b/src/sna/sna_glyphs.c
index 918b51c7..ccf64976 100644
--- a/src/sna/sna_glyphs.c
+++ b/src/sna/sna_glyphs.c
@@ -188,7 +188,7 @@ bool sna_glyphs_create(struct sna *sna)
if (sna->render.white_image == NULL)
goto bail;
- if (sna->kgem.wedged || !sna->have_render)
+ if (!can_render(sna))
return true;
for (i = 0; i < ARRAY_SIZE(formats); i++) {
@@ -1675,10 +1675,10 @@ sna_glyphs(CARD8 op,
if (REGION_NUM_RECTS(dst->pCompositeClip) == 0)
return;
- if (FALLBACK || !sna->have_render)
+ if (FALLBACK)
goto fallback;
- if (wedged(sna)) {
+ if (!can_render(sna)) {
DBG(("%s: wedged\n", __FUNCTION__));
goto fallback;
}