xf86-video-intel: 3 commits - configure.ac src/intel_driver.h src/intel_module.c src/sna/sna_accel.c src/sna/sna_display.c src/uxa/intel_glamor.c src/uxa/intel_uxa.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jul 29 22:57:26 PDT 2014
configure.ac | 20 ++++++++++++++++++--
src/intel_driver.h | 5 +++++
src/intel_module.c | 13 ++++++++++---
src/sna/sna_accel.c | 2 +-
src/sna/sna_display.c | 28 +++++++++++++++++++---------
src/uxa/intel_glamor.c | 3 +--
src/uxa/intel_uxa.c | 14 ++++++++++++++
7 files changed, 68 insertions(+), 17 deletions(-)
New commits:
commit a88795c64123e4084044451d8861838ea904abd9
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jul 29 21:11:09 2014 +0100
sna: Clear cursor image after rotation
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81886
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 8964e77..eed68d3 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4294,7 +4294,7 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc)
image = sna->cursor.scratch;
cursor->last_width = cursor->last_height = size;
}
- if (width < cursor->last_width || height < cursor->last_height)
+ if (width < cursor->last_width || height < cursor->last_height || rotation != cursor->rotation)
memset(image, 0, 4*size*size);
if (rotation == RR_Rotate_0) {
if (argb == NULL) {
commit 02bb0c5bc56df2790ffcd90d47d667dfd63b5407
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Jul 28 21:16:33 2014 +0100
sna: Fix clear shortcut for transformations
The region needs to be transformed along the clear shortcut when
redisplaying the CRTC.
Reported-by: Dirk Griesbach
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81820
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 135d03a..8964e77 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -6349,7 +6349,7 @@ free_pixmap:
}
static void
-sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region)
+sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo *bo)
{
int16_t tx, ty, sx, sy;
struct sna *sna = to_sna(crtc->scrn);
@@ -6367,11 +6367,21 @@ sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region)
assert(!wedged(sna));
if (priv->clear) {
+ RegionRec whole;
+
DBG(("%s: clear damage boxes\n", __FUNCTION__));
- RegionTranslate(region, -crtc->bounds.x1, -crtc->bounds.y1);
+ if (sna_transform_is_integer_translation(&crtc->crtc_to_framebuffer,
+ &tx, &ty)) {
+ RegionTranslate(region, -tx, -ty);
+ } else {
+ whole.extents = region->extents;
+ whole.data = NULL;
+ transformed_box(&whole.extents, crtc);
+ region = &whole;
+ }
sna_blt_fill_boxes(sna, GXcopy,
- sna_crtc->bo, draw->bitsPerPixel,
+ bo, draw->bitsPerPixel,
priv->clear_color,
region_rects(region), region_num_rects(region));
return;
@@ -6391,15 +6401,15 @@ sna_crtc_redisplay(xf86CrtcPtr crtc, RegionPtr region)
if (sna->render.copy_boxes(sna, GXcopy,
draw, priv->gpu_bo, sx, sy,
- &tmp, sna_crtc->bo, -tx, -ty,
+ &tmp, bo, -tx, -ty,
region_rects(region), region_num_rects(region), 0))
return;
}
if (can_render(sna))
- sna_crtc_redisplay__composite(crtc, region, sna_crtc->bo);
+ sna_crtc_redisplay__composite(crtc, region, bo);
else
- sna_crtc_redisplay__fallback(crtc, region, sna_crtc->bo);
+ sna_crtc_redisplay__fallback(crtc, region, bo);
}
#define shadow_flip_handler (sna_flip_handler_t)sna_mode_redisplay
@@ -6590,7 +6600,7 @@ void sna_mode_redisplay(struct sna *sna)
if (bo == NULL)
goto disable1;
- sna_crtc_redisplay__composite(crtc, &damage, bo);
+ sna_crtc_redisplay(crtc, &damage, bo);
kgem_bo_submit(&sna->kgem, bo);
arg.crtc_id = sna_crtc->id;
@@ -6642,7 +6652,7 @@ disable1:
sna_crtc->shadow_bo = kgem_bo_reference(sna_crtc->bo);
} else {
- sna_crtc_redisplay(crtc, &damage);
+ sna_crtc_redisplay(crtc, &damage, sna_crtc->bo);
kgem_scanout_flush(&sna->kgem, sna_crtc->bo);
}
}
commit 997a5d28021ece0e81845d0217a1b6feb765e6fa
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Jul 27 07:15:19 2014 +0100
configure: Expose no acceleration by default (--with-default-accel=none)
Why? I am not sure, but it seems equally as valid as allowing the switch
to uxa/glamor as default. The runtime equivalent is Option "AccelMethod".
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/configure.ac b/configure.ac
index 5c3dd20..94959f7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -646,7 +646,7 @@ fi
AC_ARG_WITH(default-accel,
AS_HELP_STRING([--with-default-accel],
- [Select the default acceleration method [default=sna if enabled, otherwise uxa]]),
+ [Select the default acceleration method out of glamor, none, sna, or uxa [default is sna if enabled, otherwise uxa]]),
[accel="$withval"],
[accel="auto"])
if test "x$accel" = "xyes"; then
@@ -698,7 +698,11 @@ fi
if test "x$have_accel" = "xnone"; then
if test "x$KMS" = "xyes"; then
- AC_MSG_ERROR([Invalid default acceleration option])
+ if test "x$SNA" != "xno" -o "x$UXA" != "xno"; then
+ AC_DEFINE(DEFAULT_ACCEL_METHOD, NONE, [Default acceleration method])
+ else
+ AC_MSG_ERROR([Invalid default acceleration option])
+ fi
fi
accel="none"
fi
@@ -865,6 +869,11 @@ test -e `pwd $0`/README && cat `pwd $0`/README
accel_msg=""
if test "x$SNA" != "xno"; then
+ if test "$accel" = "none"; then
+ accel_msg="$accel_msg *none"
+ else
+ accel_msg="$accel_msg none"
+ fi
if test "$accel" = "sna"; then
accel_msg="$accel_msg *sna"
else
@@ -872,6 +881,13 @@ if test "x$SNA" != "xno"; then
fi
fi
if test "x$UXA" != "xno"; then
+ if test "x$SNA" = "xno"; then
+ if test "$accel" = "none"; then
+ accel_msg="$accel_msg *none"
+ else
+ accel_msg="$accel_msg none"
+ fi
+ fi
if test "$accel" = "uxa"; then
accel_msg="$accel_msg *uxa"
else
diff --git a/src/intel_driver.h b/src/intel_driver.h
index 4f6a764..7ce6b75 100644
--- a/src/intel_driver.h
+++ b/src/intel_driver.h
@@ -135,6 +135,11 @@ int intel_get_master(ScrnInfoPtr scrn);
int intel_put_master(ScrnInfoPtr scrn);
void intel_put_device(ScrnInfoPtr scrn);
+#define IS_DEFAULT_ACCEL_METHOD(x) ({ \
+ enum { SNA, UXA, GLAMOR, NONE } default_accel_method__ = DEFAULT_ACCEL_METHOD; \
+ default_accel_method__ == x; \
+})
+
#define hosted() (0)
#endif /* INTEL_DRIVER_H */
diff --git a/src/intel_module.c b/src/intel_module.c
index d6a0d3c..95200d0 100644
--- a/src/intel_module.c
+++ b/src/intel_module.c
@@ -489,7 +489,7 @@ _xf86findDriver(const char *ident, XF86ConfDevicePtr p)
return NULL;
}
-static enum accel_method { SNA, UXA, GLAMOR } get_accel_method(void)
+static enum accel_method { NONE, SNA, UXA, GLAMOR } get_accel_method(void)
{
enum accel_method accel_method = DEFAULT_ACCEL_METHOD;
XF86ConfDevicePtr dev;
@@ -503,7 +503,9 @@ static enum accel_method { SNA, UXA, GLAMOR } get_accel_method(void)
s = xf86FindOptionValue(dev->dev_option_lst, "AccelMethod");
if (s ) {
- if (strcasecmp(s, "sna") == 0)
+ if (strcasecmp(s, "none") == 0)
+ accel_method = NONE;
+ else if (strcasecmp(s, "sna") == 0)
accel_method = SNA;
else if (strcasecmp(s, "uxa") == 0)
accel_method = UXA;
@@ -562,9 +564,14 @@ intel_scrn_create(DriverPtr driver,
#if KMS
switch (get_accel_method()) {
#if USE_SNA
- case SNA: return sna_init_scrn(scrn, entity_num);
+ case NONE:
+ case SNA:
+ return sna_init_scrn(scrn, entity_num);
#endif
#if USE_UXA
+#if !USE_SNA
+ case NONE:
+#endif
case GLAMOR:
case UXA:
return intel_init_scrn(scrn);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index e4d6f82..00ff492 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -17625,7 +17625,7 @@ static bool sna_option_accel_none(struct sna *sna)
s = xf86GetOptValString(sna->Options, OPTION_ACCEL_METHOD);
if (s == NULL)
- return false;
+ return IS_DEFAULT_ACCEL_METHOD(NONE);
return strcasecmp(s, "none") == 0;
}
diff --git a/src/uxa/intel_glamor.c b/src/uxa/intel_glamor.c
index 0be87b8..9d2792f 100644
--- a/src/uxa/intel_glamor.c
+++ b/src/uxa/intel_glamor.c
@@ -87,12 +87,11 @@ intel_glamor_create_screen_resources(ScreenPtr screen)
static Bool
intel_glamor_enabled(intel_screen_private *intel)
{
- enum { SNA, UXA, GLAMOR } default_accel_method = DEFAULT_ACCEL_METHOD;
const char *s;
s = xf86GetOptValString(intel->Options, OPTION_ACCEL_METHOD);
if (s == NULL)
- return default_accel_method == GLAMOR;
+ return IS_DEFAULT_ACCEL_METHOD(GLAMOR);
return strcasecmp(s, "glamor") == 0;
}
diff --git a/src/uxa/intel_uxa.c b/src/uxa/intel_uxa.c
index b396188..255a245 100644
--- a/src/uxa/intel_uxa.c
+++ b/src/uxa/intel_uxa.c
@@ -1421,6 +1421,17 @@ intel_limits_init(intel_screen_private *intel)
}
}
+static Bool intel_option_accel_none(intel_screen_private *intel)
+{
+ const char *s;
+
+ s = xf86GetOptValString(intel->Options, OPTION_ACCEL_METHOD);
+ if (s == NULL)
+ return IS_DEFAULT_ACCEL_METHOD(NONE);
+
+ return strcasecmp(s, "none") == 0;
+}
+
static Bool intel_option_accel_blt(intel_screen_private *intel)
{
const char *s;
@@ -1542,6 +1553,9 @@ Bool intel_uxa_init(ScreenPtr screen)
return FALSE;
}
+ if (intel_option_accel_none(intel))
+ intel->force_fallback = true;
+
uxa_set_fallback_debug(screen, intel->fallback_debug);
uxa_set_force_fallback(screen, intel->force_fallback);
More information about the xorg-commit
mailing list