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