[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-intel: Changes to 'debian-experimental'



 configure.ac                            |   78 
 debian/changelog                        |    6 
 debian/control                          |    2 
 debian/xserver-xorg-video-intel.install |    2 
 src/compat-api.h                        |    1 
 src/i915_pciids.h                       |   32 
 src/intel_device.c                      |   62 
 src/intel_module.c                      |    6 
 src/intel_options.c                     |    1 
 src/intel_options.h                     |    1 
 src/sna/Makefile.am                     |    2 
 src/sna/gen2_render.c                   |   55 
 src/sna/gen3_render.c                   |   17 
 src/sna/gen4_render.c                   |   21 
 src/sna/gen5_render.c                   |   21 
 src/sna/gen6_render.c                   |   21 
 src/sna/gen7_render.c                   |   35 
 src/sna/gen8_render.c                   |   32 
 src/sna/kgem.c                          |  329 ++-
 src/sna/kgem.h                          |    2 
 src/sna/sna.h                           |  147 +
 src/sna/sna_accel.c                     |  436 +++--
 src/sna/sna_blt.c                       |  190 ++
 src/sna/sna_composite.c                 |   49 
 src/sna/sna_cpu.c                       |    4 
 src/sna/sna_cpuid.h                     |    4 
 src/sna/sna_damage.c                    |   42 
 src/sna/sna_display.c                   | 1880 +++++++++++++++++-----
 src/sna/sna_display_fake.c              |   92 -
 src/sna/sna_dri.c                       | 2534 -----------------------------
 src/sna/sna_dri2.c                      | 2705 ++++++++++++++++++++++++++++++++
 src/sna/sna_driver.c                    |   87 -
 src/sna/sna_glyphs.c                    |  311 +--
 src/sna/sna_render.c                    |   22 
 src/sna/sna_render.h                    |    3 
 src/sna/sna_threads.c                   |   14 
 src/sna/sna_tiling.c                    |   70 
 src/sna/sna_trapezoids.c                |    3 
 src/sna/sna_trapezoids_boxes.c          |    7 
 src/sna/sna_video.c                     |   51 
 src/sna/sna_video.h                     |   18 
 src/sna/sna_video_overlay.c             |   22 
 src/sna/sna_video_sprite.c              |  318 ++-
 src/sna/sna_video_textured.c            |   20 
 src/uxa/intel.h                         |    4 
 src/uxa/intel_display.c                 |   24 
 src/uxa/intel_dri.c                     |    3 
 src/uxa/intel_driver.c                  |    2 
 src/uxa/intel_glamor.c                  |   10 
 src/uxa/uxa-accel.c                     |    2 
 src/uxa/uxa-priv.h                      |   17 
 src/uxa/uxa-render.c                    |    4 
 test/dri2-test.c                        |   77 
 tools/Makefile.am                       |    4 
 tools/virtual.c                         |  167 +
 55 files changed, 6052 insertions(+), 4017 deletions(-)

New commits:
commit 7b57260997ee615d30b316b859d84be77794184c
Author: maximilian attems <maks@debian.org>
Date:   Thu May 29 17:18:20 2014 +0200

    add myself to uploaders
    
    Signed-off-by: maximilian attems <maks@debian.org>

diff --git a/debian/changelog b/debian/changelog
index 5a58f3f..e8ac2d8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,7 @@ xserver-xorg-video-intel (2:2.99.911+git20140529-1~exp1) UNRELEASED; urgency=low
 
   * New upstream prerelease.
   * Install new backlight helper.
+  * Add myself to Uploaders.
 
  -- maximilian attems <maks@debian.org>  Thu, 29 May 2014 17:16:30 +0200
 
diff --git a/debian/control b/debian/control
index 9d7840c..65108e3 100644
--- a/debian/control
+++ b/debian/control
@@ -2,7 +2,7 @@ Source: xserver-xorg-video-intel
 Section: x11
 Priority: optional
 Maintainer: Debian X Strike Force <debian-x@lists.debian.org>
-Uploaders: Drew Parsons <dparsons@debian.org>, Cyril Brulebois <kibi@debian.org>, Michael Stapelberg <stapelberg@debian.org>
+Uploaders: Drew Parsons <dparsons@debian.org>, Cyril Brulebois <kibi@debian.org>, Michael Stapelberg <stapelberg@debian.org>, maximilian attems <maks@debian.org>
 Build-Depends:
  debhelper (>= 8),
  dh-autoreconf,

commit e62e35c1cc86418ae87cf97d4f2725f73219691b
Author: maximilian attems <maks@debian.org>
Date:   Thu May 29 16:14:51 2014 +0200

    update changelog
    
    Signed-off-by: maximilian attems <maks@debian.org>

diff --git a/debian/changelog b/debian/changelog
index 76e95df..5a58f3f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,9 @@
-xserver-xorg-video-intel (2:2.99.911-1) UNRELEASED; urgency=low
+xserver-xorg-video-intel (2:2.99.911+git20140529-1~exp1) UNRELEASED; urgency=low
 
   * New upstream prerelease.
+  * Install new backlight helper.
 
- -- Timo Aaltonen <tjaalton@ubuntu.com>  Tue, 01 Oct 2013 14:07:22 +0300
+ -- maximilian attems <maks@debian.org>  Thu, 29 May 2014 17:16:30 +0200
 
 xserver-xorg-video-intel (2:2.21.15-1) unstable; urgency=low
 

commit 631b4e4c78a807e61214026bf9a1461aadbd59b5
Author: maximilian attems <maks@debian.org>
Date:   Thu May 29 17:07:16 2014 +0200

    install add new helper
    
    Signed-off-by: maximilian attems <maks@debian.org>

diff --git a/debian/xserver-xorg-video-intel.install b/debian/xserver-xorg-video-intel.install
index 48c5ed0..fdefaad 100644
--- a/debian/xserver-xorg-video-intel.install
+++ b/debian/xserver-xorg-video-intel.install
@@ -1,4 +1,6 @@
 usr/lib/xorg/modules/drivers/*.so
 usr/lib/libI810XvMC.so*
 usr/lib/libIntelXvMC.so*
+usr/lib/xserver-xorg-video-intel/xf86-video-intel-backlight-helper
+usr/share/polkit-1/actions/org.x.xf86-video-intel.backlight-helper.policy
 usr/share/man

commit 792584fa740dbc81b72fd4f4bdf27d65b9c046cf
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed May 28 14:00:26 2014 +0100

    sna/dri2: Reorder declarations to compile on old Xorg
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index cff9737..72f34d6 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -51,6 +51,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <compositeext.h>
 #endif
 
+#if DRI2INFOREC_VERSION < 2
+#error DRI2 version supported by the Xserver is too old
+#endif
+
 static inline struct kgem_bo *ref(struct kgem_bo *bo)
 {
 	assert(bo->refcnt);
@@ -78,6 +82,7 @@ get_private(void *buffer)
 	return (struct sna_dri2_private *)((DRI2Buffer2Ptr)buffer+1);
 }
 
+#if DRI2INFOREC_VERSION >= 4
 enum frame_event_type {
 	WAITMSC = 0,
 	SWAP,
@@ -206,9 +211,6 @@ sna_dri2_window_get_chain(WindowPtr win)
 	assert(priv != NULL);
 	return priv->chain;
 }
-
-#if DRI2INFOREC_VERSION < 2
-#error DRI2 version supported by the Xserver is too old
 #endif
 
 #if DRI2INFOREC_VERSION < 6

commit 562c47fc21b9029ebff29b53d2be590df4329264
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed May 28 12:51:18 2014 +0100

    Silence CLang (almost)
    
    Fix up all the warnings about implicit enum conversions. The
    container_of() macro remains defunct.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 2e1682c..ce137bd 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -126,7 +126,6 @@ static const struct gt_info ivb_gt2_info = {
 
 static const struct gt_info byt_gt_info = {
 	.name = "Baytrail (gen7)",
-	.urb = { 128, 64, 64 },
 	.max_vs_threads = 36,
 	.max_gs_threads = 36,
 	.max_wm_threads = (48-1) << IVB_PS_MAX_THREADS_SHIFT,
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 24ba6f2..5fa33ce 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -810,11 +810,12 @@ cpu_cache_size__cpuid4(void)
 
 	 unsigned int eax, ebx, ecx, edx;
 	 unsigned int llc_size = 0;
-	 int cnt = 0;
+	 int cnt;
 
 	 if (__get_cpuid_max(BASIC_CPUID, NULL) < 4)
 		 return 0;
 
+	 cnt = 0;
 	 do {
 		 unsigned associativity, line_partitions, line_size, sets;
 
diff --git a/src/sna/sna_cpu.c b/src/sna/sna_cpu.c
index 23e6bcc..a3434b1 100644
--- a/src/sna/sna_cpu.c
+++ b/src/sna/sna_cpu.c
@@ -40,12 +40,13 @@
 unsigned sna_cpu_detect(void)
 {
 	unsigned max = __get_cpuid_max(BASIC_CPUID, NULL);
-	unsigned int eax, ebx, ecx, edx;
+	unsigned eax, ebx, ecx, edx;
 	unsigned features = 0;
 	unsigned extra = 0;
 
 	if (max >= 1) {
 		__cpuid(1, eax, ebx, ecx, edx);
+
 		if (ecx & bit_SSE3)
 			features |= SSE3;
 
@@ -80,6 +81,7 @@ unsigned sna_cpu_detect(void)
 
 	if (max >= 7) {
 		__cpuid_count(7, 0, eax, ebx, ecx, edx);
+
 		if ((extra & has_YMM) && (ebx & bit_AVX2))
 			features |= AVX2;
 	}
diff --git a/src/sna/sna_cpuid.h b/src/sna/sna_cpuid.h
index 5a82c89..ed28a0a 100644
--- a/src/sna/sna_cpuid.h
+++ b/src/sna/sna_cpuid.h
@@ -36,8 +36,8 @@
 #include <cpuid.h>
 #else
 #define __get_cpuid_max(x, y) 0
-#define __cpuid(level, a, b, c, d)
-#define __cpuid_count(level, count, a, b, c, d)
+#define __cpuid(level, a, b, c, d) a = b = c = d = 0
+#define __cpuid_count(level, count, a, b, c, d) a = b = c = d = 0
 #endif
 
 #define BASIC_CPUID 0x0
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index ff1cf5e..cff9737 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -1984,7 +1984,7 @@ get_current_msc(struct sna *sna, DrawablePtr draw, xf86CrtcPtr crtc)
 	uint64_t ret = -1;
 
 	VG_CLEAR(vbl);
-	vbl.request.type = DRM_VBLANK_RELATIVE;
+	vbl.request.type = _DRM_VBLANK_RELATIVE;
 	vbl.request.sequence = 0;
 	if (sna_wait_vblank(sna, &vbl, sna_crtc_to_pipe(crtc)) == 0)
 		ret = sna_crtc_record_vblank(crtc, &vbl);
@@ -2410,7 +2410,7 @@ fail:
 	}
 
 	VG_CLEAR(vbl);
-	vbl.request.type = DRM_VBLANK_RELATIVE;
+	vbl.request.type = _DRM_VBLANK_RELATIVE;
 	vbl.request.sequence = 0;
 	if (sna_wait_vblank(sna, &vbl, sna_crtc_to_pipe(crtc)) == 0) {
 		*ust = ust64(vbl.reply.tval_sec, vbl.reply.tval_usec);
@@ -2460,7 +2460,7 @@ sna_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw, CARD64 target_msc
 	VG_CLEAR(vbl);
 
 	/* Get current count */
-	vbl.request.type = DRM_VBLANK_RELATIVE;
+	vbl.request.type = _DRM_VBLANK_RELATIVE;
 	vbl.request.sequence = 0;
 	if (sna_wait_vblank(sna, &vbl, pipe))
 		goto out_complete;
diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index fd73b09..cbec168 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -1668,7 +1668,8 @@ do_fixup:
 		dst = pixman_image_create_bits(channel->pict_format,
 					       w, h, ptr, channel->bo->pitch);
 	else
-		dst = pixman_image_create_bits(picture->format, w, h, NULL, 0);
+		dst = pixman_image_create_bits((pixman_format_code_t)picture->format,
+					       w, h, NULL, 0);
 	if (!dst) {
 		kgem_bo_destroy(&sna->kgem, channel->bo);
 		return 0;
@@ -1855,7 +1856,7 @@ sna_render_picture_convert(struct sna *sna,
 		if (!sna_pixmap_move_to_cpu(pixmap, MOVE_READ))
 			return 0;
 
-		src = pixman_image_create_bits(picture->format,
+		src = pixman_image_create_bits((pixman_format_code_t)picture->format,
 					       pixmap->drawable.width,
 					       pixmap->drawable.height,
 					       pixmap->devPrivate.ptr,
diff --git a/src/sna/sna_trapezoids.c b/src/sna/sna_trapezoids.c
index 4ad61bf..40663bb 100644
--- a/src/sna/sna_trapezoids.c
+++ b/src/sna/sna_trapezoids.c
@@ -791,7 +791,8 @@ trap_upload(PicturePtr picture,
 		return true;
 
 	memset(scratch->devPrivate.ptr, 0, scratch->devKind*height);
-	image = pixman_image_create_bits(picture->format, width, height,
+	image = pixman_image_create_bits((pixman_format_code_t)picture->format,
+					 width, height,
 					 scratch->devPrivate.ptr,
 					 scratch->devKind);
 	if (image) {
diff --git a/src/uxa/uxa-accel.c b/src/uxa/uxa-accel.c
index cb465b8..757b276 100644
--- a/src/uxa/uxa-accel.c
+++ b/src/uxa/uxa-accel.c
@@ -942,8 +942,8 @@ uxa_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
 	uxa_screen_t *uxa_screen = uxa_get_screen(screen);
 
 	if (uxa_screen->info->flags & UXA_USE_GLAMOR) {
+		RegionPtr region = NULL;
 		int ok = 0;
-		RegionPtr region;
 
 		if (uxa_prepare_access(pDst, UXA_GLAMOR_ACCESS_RW)) {
 			if (uxa_prepare_access(pSrc, UXA_GLAMOR_ACCESS_RO)) {
diff --git a/src/uxa/uxa-render.c b/src/uxa/uxa-render.c
index 992a008..a138f16 100644
--- a/src/uxa/uxa-render.c
+++ b/src/uxa/uxa-render.c
@@ -926,7 +926,7 @@ uxa_acquire_source(ScreenPtr screen,
 		   INT16 * out_x, INT16 * out_y)
 {
 	return uxa_acquire_picture (screen, pict,
-				    PICT_a8r8g8b8,
+				    PIXMAN_a8r8g8b8,
 				    x, y,
 				    width, height,
 				    out_x, out_y);
@@ -940,7 +940,7 @@ uxa_acquire_mask(ScreenPtr screen,
 		 INT16 * out_x, INT16 * out_y)
 {
 	return uxa_acquire_picture (screen, pict,
-				    PICT_a8,
+				    PIXMAN_a8,
 				    x, y,
 				    width, height,
 				    out_x, out_y);

commit 6282fc9d0d3b2899be52ca4a43a3d9313e9049a6
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed May 28 10:42:58 2014 +0100

    sna/dri2: Fix the continuation mode for old style triple buffering
    
    Otherwise we end up sending too many SwapCompletes back to the client
    and confusing ourselves.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 8aef88d..ff1cf5e 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -238,11 +238,14 @@ sna_dri2_reuse_buffer(DrawablePtr draw, DRI2BufferPtr buffer)
 		struct sna_dri2_frame_event *info;
 
 		info = sna_dri2_window_get_chain((WindowPtr)draw);
+		DBG(("%s: draw->id=%lu, active? %d, current back? %d\n",
+		     __FUNCTION__, (long)draw->id, info!=NULL, info && info->back == buffer));
 		if (info && info->back == buffer) {
 			DBG(("%s: replacing back buffer\n", __FUNCTION__));
 			sna_dri2_get_back(to_sna_from_drawable(draw), info);
 		}
 
+		assert(kgem_bo_flink(&to_sna_from_drawable(draw)->kgem, get_private(buffer)->bo) == buffer->name);
 		assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[0].bo);
 		assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[1].bo);
 	}
@@ -1774,7 +1777,7 @@ sna_dri2_flip_continue(struct sna *sna, struct sna_dri2_frame_event *info)
 	DBG(("%s(mode=%d)\n", __FUNCTION__, info->mode));
 
 	if (info->mode > 0){
-		struct kgem_bo *bo =get_private(info->front)->bo;
+		struct kgem_bo *bo = get_private(info->front)->bo;
 
 		info->type = info->mode;
 
@@ -1862,7 +1865,7 @@ static void chain_flip(struct sna *sna)
 static void sna_dri2_flip_event(struct sna *sna,
 				struct sna_dri2_frame_event *flip)
 {
-	DBG(("%s(pipe=%d)\n", __FUNCTION__, flip->pipe));
+	DBG(("%s(pipe=%d, event=%d)\n", __FUNCTION__, flip->pipe, flip->type));
 
 	assert(!sna->mode.shadow_flip);
 
@@ -2094,7 +2097,11 @@ sna_dri2_schedule_flip(ClientPtr client, DrawablePtr draw, xf86CrtcPtr crtc,
 			} else {
 				DBG(("%s: chaining flip\n", __FUNCTION__));
 				type = FLIP_THROTTLE;
+#if XORG_CAN_TRIPLE_BUFFER
 				info->mode = -type;
+#else
+				info->mode = -FLIP_COMPLETE;
+#endif
 				goto out;
 			}
 		}

commit 916354164bcb149e1323a3219d85e7bba6e61e04
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue May 27 20:16:55 2014 +0100

    sna: Fix the depth/format on the temporary shadow Pictures
    
    When scaling the output, we re-render onto the scanout using a call to
    Composite, for which we create temporary Pictures. In most cases, the
    mismatching depth/format goes unnoticed, but along one particular
    fallback path, we use those to create a new Picture but the mismatching
    format results in a segfault.
    
    Reported-by: Matti Hämäläinen <ccr@tnsp.org>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79320
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 2891b74..3980650 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -5165,38 +5165,34 @@ sna_crtc_redisplay__fallback(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 	PictFormatPtr format;
 	PicturePtr src, dst;
 	PixmapPtr pixmap;
-	int error;
+	int depth, error;
 	void *ptr;
 
 	DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__));
 
+	error = sna_render_format_for_depth(sna->front->drawable.depth);
+	depth = PIXMAN_FORMAT_DEPTH(error);
+	format = PictureMatchFormat(screen, depth, error);
+	if (format == NULL) {
+		DBG(("%s: can't find format for depth=%d [%08x]\n",
+		     __FUNCTION__, depth, error));
+		return;
+	}
+
 	ptr = kgem_bo_map__gtt(&sna->kgem, bo);
 	if (ptr == NULL)
 		return;
 
-	pixmap = sna_pixmap_create_unattached(screen,
-					      0, 0, sna->front->drawable.depth);
+	pixmap = sna_pixmap_create_unattached(screen, 0, 0, depth);
 	if (pixmap == NullPixmap)
 		return;
 
 	if (!screen->ModifyPixmapHeader(pixmap,
-					crtc->mode.HDisplay,
-					crtc->mode.VDisplay,
-					sna->front->drawable.depth,
-					sna->front->drawable.bitsPerPixel,
+					crtc->mode.HDisplay, crtc->mode.VDisplay,
+					depth, sna->front->drawable.bitsPerPixel,
 					bo->pitch, ptr))
 		goto free_pixmap;
 
-	error = sna_render_format_for_depth(sna->front->drawable.depth);
-	format = PictureMatchFormat(screen,
-				    PIXMAN_FORMAT_DEPTH(error), error);
-	if (format == NULL) {
-		DBG(("%s: can't find format for depth=%d [%08x]\n",
-		     __FUNCTION__, sna->front->drawable.depth,
-		     (int)sna_render_format_for_depth(sna->front->drawable.depth)));
-		goto free_pixmap;
-	}
-
 	src = CreatePicture(None, &sna->front->drawable, format,
 			    0, NULL, serverClient, &error);
 	if (!src)
@@ -5257,36 +5253,32 @@ sna_crtc_redisplay__composite(xf86CrtcPtr crtc, RegionPtr region, struct kgem_bo
 	PicturePtr src, dst;
 	PixmapPtr pixmap;
 	BoxPtr b;
-	int n, error;
+	int n, depth, error;
 
 	DBG(("%s: compositing transformed damage boxes\n", __FUNCTION__));
 
-	pixmap = sna_pixmap_create_unattached(screen,
-					      0, 0, sna->front->drawable.depth);
+	error = sna_render_format_for_depth(sna->front->drawable.depth);
+	depth = PIXMAN_FORMAT_DEPTH(error);
+	format = PictureMatchFormat(screen, depth, error);
+	if (format == NULL) {
+		DBG(("%s: can't find format for depth=%d [%08x]\n",
+		     __FUNCTION__, depth, error));
+		return;
+	}
+
+	pixmap = sna_pixmap_create_unattached(screen, 0, 0, depth);
 	if (pixmap == NullPixmap)
 		return;
 
 	if (!screen->ModifyPixmapHeader(pixmap,
-					crtc->mode.HDisplay,
-					crtc->mode.VDisplay,
-					sna->front->drawable.depth,
-					sna->front->drawable.bitsPerPixel,
+					crtc->mode.HDisplay, crtc->mode.VDisplay,
+					depth, sna->front->drawable.bitsPerPixel,
 					bo->pitch, NULL))
 		goto free_pixmap;
 
 	if (!sna_pixmap_attach_to_bo(pixmap, bo))
 		goto free_pixmap;
 
-	error = sna_render_format_for_depth(sna->front->drawable.depth);
-	format = PictureMatchFormat(screen,
-				    PIXMAN_FORMAT_DEPTH(error), error);
-	if (format == NULL) {
-		DBG(("%s: can't find format for depth=%d [%08x]\n",
-		     __FUNCTION__, sna->front->drawable.depth,
-		     (int)sna_render_format_for_depth(sna->front->drawable.depth)));
-		goto free_pixmap;
-	}
-
 	src = CreatePicture(None, &sna->front->drawable, format,
 			    0, NULL, serverClient, &error);
 	if (!src)

commit d8360bd74f5b62a27c019c65ed9001cac8bf43ed
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue May 27 20:14:02 2014 +0100

    sna: Handle bad picture format/depth mismatches
    
    Scaling the output feed in an invalid picture->format/depth combination
    which causes the fallback downsampling function to explode. Whilst this
    is a bug in the higher layer, we can handle the error anyway.
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=79320
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna_render.c b/src/sna/sna_render.c
index d3cb6a0..fd73b09 100644
--- a/src/sna/sna_render.c
+++ b/src/sna/sna_render.c
@@ -789,6 +789,11 @@ fixup:
 	format = PictureMatchFormat(screen,
 				    pixmap->drawable.depth,
 				    picture->format);
+	if (format == NULL) {
+		DBG(("%s: invalid depth=%d, format=%08x\n",
+		     __FUNCTION__, pixmap->drawable.depth, picture->format));
+		goto fixup;
+	}
 
 	tmp_dst = CreatePicture(0, &tmp->drawable, format, 0, NULL,
 				serverClient, &error);

commit 93b319cf9a355e8400b864046cdb4cfb56b657a0
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri May 23 13:16:50 2014 +0100

    uxa: Silence the compiler over a couple of unused variables
    
    intel_driver.c: In function 'I830LeaveVT':
    intel_driver.c:1085:24: warning: unused variable 'intel' [-Wunused-variable]
      intel_screen_private *intel = intel_get_screen_private(scrn);
                            ^
    intel_driver.c: In function 'I830EnterVT':
    intel_driver.c:1102:24: warning: unused variable 'intel' [-Wunused-variable]
      intel_screen_private *intel = intel_get_screen_private(scrn);
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/uxa/intel_driver.c b/src/uxa/intel_driver.c
index 0a4fe2a..654038c 100644
--- a/src/uxa/intel_driver.c
+++ b/src/uxa/intel_driver.c
@@ -1048,7 +1048,6 @@ static void I830FreeScreen(FREE_SCREEN_ARGS_DECL)
 static void I830LeaveVT(VT_FUNC_ARGS_DECL)
 {
 	SCRN_INFO_PTR(arg);
-	intel_screen_private *intel = intel_get_screen_private(scrn);
 
 	xf86RotateFreeShadow(scrn);
 
@@ -1065,7 +1064,6 @@ static void I830LeaveVT(VT_FUNC_ARGS_DECL)
 static Bool I830EnterVT(VT_FUNC_ARGS_DECL)
 {
 	SCRN_INFO_PTR(arg);
-	intel_screen_private *intel = intel_get_screen_private(scrn);
 
 	if (intel_get_master(scrn)) {
 		xf86DrvMsg(scrn->scrnIndex, X_WARNING,

commit e6ee0679374f8fc80cb34693f80affe6ea676ddb
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri May 23 14:29:42 2014 +0100

    uxa: Silence compiler for warnings in Cursor API changes
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/uxa/intel_display.c b/src/uxa/intel_display.c
index 857aa24..46a009e 100644
--- a/src/uxa/intel_display.c
+++ b/src/uxa/intel_display.c
@@ -446,7 +446,7 @@ __intel_crtc_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image)
 	return ret;
 }
 
-#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0)
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2)
 static Bool
 intel_crtc_load_cursor_argb(xf86CrtcPtr crtc, CARD32 *image)
 {
@@ -656,7 +656,11 @@ static const xf86CrtcFuncsRec intel_crtc_funcs = {
 	.set_cursor_position = intel_crtc_set_cursor_position,
 	.show_cursor = intel_crtc_show_cursor,
 	.hide_cursor = intel_crtc_hide_cursor,
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2)
+	.load_cursor_argb_check = intel_crtc_load_cursor_argb,
+#else
 	.load_cursor_argb = intel_crtc_load_cursor_argb,
+#endif
 	.shadow_create = intel_crtc_shadow_create,
 	.shadow_allocate = intel_crtc_shadow_allocate,
 	.shadow_destroy = intel_crtc_shadow_destroy,

commit 4321e8decd7be9daaa49c6ab4e8bb9bd66faae31
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri May 23 14:29:42 2014 +0100

    sna: Silence compiler for warnings in Cursor API changes
    
    The API changed again in the RC, so update to keep the compiler quiet.
    At the same time, protect against the ARGB_CURSOR struct changes.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 8e876fe..2891b74 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -3447,6 +3447,15 @@ static struct sna_cursor *__sna_create_cursor(struct sna *sna, int size)
 	return c;
 }
 
+static uint32_t *get_cursor_argb(CursorPtr c)
+{
+#ifdef ARGB_CURSOR
+	return (uint32_t *)c->bits->argb;
+#else
+	return NULL;
+#endif
+}
+
 static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc)
 {
 	struct sna_cursor *cursor;
@@ -3475,7 +3484,7 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc)
 	       sna->cursor.ref->bits->width,
 	       sna->cursor.ref->bits->height,
 	       sna->cursor.serial,
-	       sna->cursor.ref->bits->argb!=NULL));
+	       get_cursor_argb(c) != NULL));
 
 	rotation = crtc->transform_in_use ? crtc->rotation : RR_Rotate_0;
 
@@ -3506,7 +3515,7 @@ static struct sna_cursor *__sna_get_cursor(struct sna *sna, xf86CrtcPtr crtc)
 	height = sna->cursor.ref->bits->height;
 	source = sna->cursor.ref->bits->source;
 	mask = sna->cursor.ref->bits->mask;
-	argb = (uint32_t *)sna->cursor.ref->bits->argb;
+	argb = get_cursor_argb(sna->cursor.ref);
 	pitch = BitmapBytePad(width);
 
 	image = cursor->image;
@@ -3686,7 +3695,7 @@ sna_set_cursor_colors(ScrnInfoPtr scrn, int _bg, int _fg)
 	if (sna->cursor.ref == NULL)
 		return;
 
-	if (sna->cursor.ref->bits->argb)
+	if (get_cursor_argb(sna->cursor.ref))
 		return;
 
 	sna->cursor.serial++;
@@ -3852,19 +3861,20 @@ disable:
 	sigio_unblock(sigio);
 }
 
-#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0)
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2)
 static Bool
-sna_load_cursor_argb(ScrnInfoPtr scrn, CursorPtr cursor)
+sna_load_cursor_argb2(ScrnInfoPtr scrn, CursorPtr cursor)
 {
 	return TRUE;
 }
 
 static Bool
-sna_load_cursor_image(ScrnInfoPtr scrn, unsigned char *src)
+sna_load_cursor_image2(ScrnInfoPtr scrn, unsigned char *src)
 {
 	return TRUE;
 }
-#else
+#endif
+
 static void
 sna_load_cursor_argb(ScrnInfoPtr scrn, CursorPtr cursor)
 {
@@ -3874,7 +3884,6 @@ static void
 sna_load_cursor_image(ScrnInfoPtr scrn, unsigned char *src)
 {
 }
-#endif
 
 static int __cursor_size(CursorPtr cursor)
 {
@@ -3935,7 +3944,7 @@ sna_use_hw_cursor(ScreenPtr screen, CursorPtr cursor)
 	__DBG(("%s(%dx%d): ARGB?=%d, serial->%d, size->%d\n", __FUNCTION__,
 	       cursor->bits->width,
 	       cursor->bits->height,
-	       cursor->bits->argb!=NULL,
+	       get_cursor_argb(cursor) != NULL,
 	       sna->cursor.serial,
 	       sna->cursor.size));
 
@@ -4031,6 +4040,12 @@ sna_cursors_init(ScreenPtr screen, struct sna *sna)
 	cursor_info->UseHWCursorARGB = sna_use_hw_cursor;
 	cursor_info->LoadCursorARGB = sna_load_cursor_argb;
 #endif
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,2)
+	cursor_info->LoadCursorImageCheck = sna_load_cursor_image2;
+#ifdef ARGB_CURSOR
+	cursor_info->LoadCursorARGBCheck = sna_load_cursor_argb2;
+#endif
+#endif
 
 	if (!xf86InitCursor(screen, cursor_info)) {
 		xf86DestroyCursorInfoRec(cursor_info);

commit 2a0dc7ed4961d5bda08bb583a7a6a2cc633b27e4
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon May 26 08:23:45 2014 +0100

    sna/dri2: Move scanout processing from frame event to global
    
    The scanout is a global property, track it as so. The primary benefit to
    this is it strengthens our assertions that we never hand out an active
    scanout for use as a back buffer.
    
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index f88690c..7a1b693 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -315,6 +315,10 @@ struct sna {
 
 #if HAVE_DRI2
 		void *flip_pending;
+		struct {
+			struct kgem_bo *bo;
+			uint32_t name;
+		} scanout[2];
 #endif
 	} dri2;
 
@@ -496,6 +500,7 @@ void sna_dri2_page_flip_handler(struct sna *sna, struct drm_event_vblank *event)
 void sna_dri2_vblank_handler(struct sna *sna, struct drm_event_vblank *event);
 void sna_dri2_pixmap_update_bo(struct sna *sna, PixmapPtr pixmap);
 void sna_dri2_destroy_window(WindowPtr win);
+void sna_dri2_reset_scanout(struct sna *sna);
 void sna_dri2_close(struct sna *sna, ScreenPtr pScreen);
 #else
 static inline bool sna_dri2_open(struct sna *sna, ScreenPtr pScreen) { return false; }
@@ -503,6 +508,7 @@ static inline void sna_dri2_page_flip_handler(struct sna *sna, struct drm_event_
 static inline void sna_dri2_vblank_handler(struct sna *sna, struct drm_event_vblank *event) { }
 static inline void sna_dri2_pixmap_update_bo(struct sna *sna, PixmapPtr pixmap) { }
 static inline void sna_dri2_destroy_window(WindowPtr win) { }
+static inline void sna_dri2_reset_scanout(struct sna *sna) { }
 static inline void sna_dri2_close(struct sna *sna, ScreenPtr pScreen) { }
 #endif
 
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index a81ce21..8e876fe 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4505,6 +4505,8 @@ sna_crtc_config_notify(ScreenPtr screen)
 
 	DBG(("%s\n", __FUNCTION__));
 
+	sna_dri2_reset_scanout(sna);
+
 	sna_mode_update(sna);
 	sna_cursors_reload(sna);
 }
diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c
index 829e5ba..8aef88d 100644
--- a/src/sna/sna_dri2.c
+++ b/src/sna/sna_dri2.c
@@ -112,11 +112,6 @@ struct sna_dri2_frame_event {
 
 	struct sna_dri2_frame_event *chain;
 
-	struct {
-		struct kgem_bo *bo;
-		uint32_t name;
-	} scanout[2];
-
 	struct list cache;
 
 	int mode;
@@ -130,15 +125,15 @@ sna_dri2_get_back(struct sna *sna, struct sna_dri2_frame_event *info)
 
 	DBG(("%s: scanout=(%d, %d), back=%d, cache?=%d\n",
 	     __FUNCTION__,
-	     info->scanout[0].bo ? info->scanout[0].bo->handle : 0,
-	     info->scanout[1].bo ? info->scanout[1].bo->handle : 0,
+	     sna->dri2.scanout[0].bo ? sna->dri2.scanout[0].bo->handle : 0,
+	     sna->dri2.scanout[1].bo ? sna->dri2.scanout[1].bo->handle : 0,
 	     get_private(info->back)->bo->handle,
 	     !list_is_empty(&info->cache)));
 
 	bo = get_private(info->back)->bo;
 	assert(bo->refcnt);
 	assert(bo->flush);
-	if (!(bo == info->scanout[0].bo || bo == info->scanout[1].bo)) {
+	if (!(bo == sna->dri2.scanout[0].bo || bo == sna->dri2.scanout[1].bo)) {
 		DBG(("%s: reuse unattached back\n", __FUNCTION__));
 		return;
 	}
@@ -173,15 +168,15 @@ sna_dri2_get_back(struct sna *sna, struct sna_dri2_frame_event *info)
 		}
 	}
 
-	assert(!(bo == info->scanout[0].bo || bo == info->scanout[1].bo));
+	assert(!(bo == sna->dri2.scanout[0].bo || bo == sna->dri2.scanout[1].bo));
 	assert(name);
 
 	unref(get_private(info->back)->bo);
 	get_private(info->back)->bo = bo;
 	info->back->name = name;
 
-	assert(get_private(info->back)->bo != info->scanout[0].bo);
-	assert(get_private(info->back)->bo != info->scanout[1].bo);
+	assert(get_private(info->back)->bo != sna->dri2.scanout[0].bo);
+	assert(get_private(info->back)->bo != sna->dri2.scanout[1].bo);
 
 	assert(bo->refcnt == 1);
 	assert(bo->flush);
@@ -247,6 +242,9 @@ sna_dri2_reuse_buffer(DrawablePtr draw, DRI2BufferPtr buffer)
 			DBG(("%s: replacing back buffer\n", __FUNCTION__));
 			sna_dri2_get_back(to_sna_from_drawable(draw), info);
 		}
+
+		assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[0].bo);
+		assert(get_private(buffer)->bo != to_sna_from_drawable(draw)->dri2.scanout[1].bo);
 	}
 }
 
@@ -1192,13 +1190,6 @@ sna_dri2_frame_event_info_free(struct sna *sna,
 	_sna_dri2_destroy_buffer(sna, info->front);
 	_sna_dri2_destroy_buffer(sna, info->back);
 
-	assert(info->scanout[1].bo == NULL);
-
-	if (info->scanout[0].bo) {
-		assert(info->scanout[0].bo->scanout);
-		kgem_bo_destroy(&sna->kgem, info->scanout[0].bo);
-	}
-
 	while (!list_is_empty(&info->cache)) {
 		struct dri_bo *c;
 
@@ -1254,6 +1245,25 @@ void sna_dri2_destroy_window(WindowPtr win)
 	free(priv);
 }
 
+static void
+update_scanout(struct sna *sna, struct sna_dri2_frame_event *info, struct kgem_bo *bo, int name)
+{
+	assert(sna->dri2.scanout[1].bo == NULL);
+	assert(sna->dri2.scanout[0].bo->scanout);
+	assert(sna->dri2.scanout[0].bo->refcnt);
+	sna->dri2.scanout[1] = sna->dri2.scanout[0];
+	sna->dri2.scanout[0].bo = ref(bo);
+	sna->dri2.scanout[0].name = name;
+	assert(sna->dri2.scanout[0].bo->scanout);
+
+	DBG(("%s: pending scanout handle=%d, active scanout handle=%d\n",
+	     __FUNCTION__, sna->dri2.scanout[0].bo->handle, sna->dri2.scanout[1].bo->handle));
+	assert(sna->dri2.scanout[0].bo->handle != sna->dri2.scanout[1].bo->handle);
+
+	assert(sna->dri2.flip_pending == NULL || sna->dri2.flip_pending == info);
+	sna->dri2.flip_pending = info;
+}
+
 static bool
 sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info)
 {
@@ -1264,29 +1274,22 @@ sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info)
 
 	assert(sna_pixmap_get_buffer(sna->front) == info->front);
 	assert(get_drawable_pixmap(info->draw)->drawable.height * bo->pitch <= kgem_bo_size(bo));
-	assert(info->scanout[0].bo);
-	assert(info->scanout[0].bo->scanout);
-	assert(info->scanout[1].bo == NULL);
+	assert(sna->dri2.scanout[0].bo);
+	assert(sna->dri2.scanout[0].bo->scanout);
+	assert(sna->dri2.scanout[1].bo == NULL);
 	assert(bo->refcnt);
 
 	info->count = sna_page_flip(sna, bo, info, info->pipe);
 	if (!info->count)
 		return false;
 
-	DBG(("%s: mark handle=%d as scanout, swap front (handle=%d, name=%d) and back (handle=%d, name=%d)\n",
+	update_scanout(sna, info, bo, info->back->name);
+
+	DBG(("%s: marked handle=%d as scanout, swap front (handle=%d, name=%d) and back (handle=%d, name=%d)\n",
 	     __FUNCTION__, bo->handle,
 	     get_private(info->front)->bo->handle, info->front->name,
 	     get_private(info->back)->bo->handle, info->back->name));
 
-	info->scanout[1] = info->scanout[0];
-	info->scanout[0].bo = ref(bo);
-	info->scanout[0].name = info->back->name;
-	assert(info->scanout[0].bo->scanout);
-
-	DBG(("%s: pending scanout handle=%d, active scanout handle=%d\n",
-	     __FUNCTION__, info->scanout[0].bo->handle, info->scanout[1].bo->handle));
-	assert(info->scanout[0].bo->handle != info->scanout[1].bo->handle);
-
 	tmp.bo = get_private(info->front)->bo;
 	tmp.name = info->front->name;
 
@@ -1298,8 +1301,6 @@ sna_dri2_page_flip(struct sna *sna, struct sna_dri2_frame_event *info)
 	info->back->name = tmp.name;
 	get_private(info->back)->bo = tmp.bo;
 
-	sna->dri2.flip_pending = info;
-
 	info->queued = true;
 	return true;
 }
@@ -1773,23 +1774,18 @@ sna_dri2_flip_continue(struct sna *sna, struct sna_dri2_frame_event *info)
 	DBG(("%s(mode=%d)\n", __FUNCTION__, info->mode));
 
 	if (info->mode > 0){
+		struct kgem_bo *bo =get_private(info->front)->bo;
+
 		info->type = info->mode;
 
-		if (get_private(info->front)->bo != sna_pixmap(sna->front)->gpu_bo)
+		if (bo != sna_pixmap(sna->front)->gpu_bo)
 			return false;
 
-		info->count = sna_page_flip(sna,
-					    get_private(info->front)->bo,
-					    info, info->pipe);
+		info->count = sna_page_flip(sna, bo, info, info->pipe);
 		if (!info->count)
 			return false;
 
-		assert(info->scanout[0].bo->scanout);
-		info->scanout[1] = info->scanout[0];
-		info->scanout[0].bo = ref(get_private(info->front)->bo);
-		info->scanout[0].name = info->front->name;
-		assert(info->scanout[0].bo->scanout);
-		sna->dri2.flip_pending = info;
+		update_scanout(sna, info, bo, info->front->name);
 	} else {
 		info->type = -info->mode;
 


Reply to: