Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Apr 2015 15:20:38 +0000 (UTC)
From:      Koop Mast <kwm@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r384230 - in head/x11-drivers/xf86-video-intel: . files
Message-ID:  <201504181520.t3IFKcxv068038@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kwm
Date: Sat Apr 18 15:20:38 2015
New Revision: 384230
URL: https://svnweb.freebsd.org/changeset/ports/384230

Log:
  Add patches to allow xf86-video-intel to build with newer xorg-server
    versions that 1.14.
  
  Obtained from:	xorg devel repo

Added:
  head/x11-drivers/xf86-video-intel/files/patch-src_compat-api.h   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_fb_fbpict.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__composite.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__driver.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__trapezoids.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.h   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__overlay.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__sprite.c   (contents, props changed)
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__textured.c   (contents, props changed)
Modified:
  head/x11-drivers/xf86-video-intel/Makefile
  head/x11-drivers/xf86-video-intel/files/patch-src__sna__sna_accel.c
  head/x11-drivers/xf86-video-intel/files/patch-src_sna_kgem.c

Modified: head/x11-drivers/xf86-video-intel/Makefile
==============================================================================
--- head/x11-drivers/xf86-video-intel/Makefile	Sat Apr 18 15:14:57 2015	(r384229)
+++ head/x11-drivers/xf86-video-intel/Makefile	Sat Apr 18 15:20:38 2015	(r384230)
@@ -3,7 +3,7 @@
 
 PORTNAME=	xf86-video-intel
 PORTVERSION=	2.21.15
-PORTREVISION=	7
+PORTREVISION=	8
 CATEGORIES=	x11-drivers
 
 MAINTAINER=	x11@FreeBSD.org

Modified: head/x11-drivers/xf86-video-intel/files/patch-src__sna__sna_accel.c
==============================================================================
--- head/x11-drivers/xf86-video-intel/files/patch-src__sna__sna_accel.c	Sat Apr 18 15:14:57 2015	(r384229)
+++ head/x11-drivers/xf86-video-intel/files/patch-src__sna__sna_accel.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -1,6 +1,58 @@
---- src/sna/sna_accel.c.orig	2014-10-28 00:26:56.720761613 +0100
-+++ src/sna/sna_accel.c	2014-10-28 00:28:12.783756153 +0100
-@@ -14830,7 +14830,7 @@
+--- src/sna/sna_accel.c.orig	2013-08-20 20:26:26 UTC
++++ src/sna/sna_accel.c
+@@ -3797,6 +3797,7 @@ static bool must_check sna_gc_move_to_cp
+ 	sgc->priv = gc->pCompositeClip;
+ 	gc->pCompositeClip = region;
+ 
++#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0)
+ 	if (gc->clientClipType == CT_PIXMAP) {
+ 		PixmapPtr clip = gc->clientClip;
+ 		gc->clientClip = region_from_bitmap(gc->pScreen, clip);
+@@ -3804,7 +3805,9 @@ static bool must_check sna_gc_move_to_cp
+ 		gc->clientClipType = gc->clientClip ? CT_REGION : CT_NONE;
+ 		changes |= GCClipMask;
+ 	} else
++#else
+ 		changes &= ~GCClipMask;
++#endif
+ 
+ 	if (changes || drawable->serialNumber != sgc->serial) {
+ 		gc->serialNumber = sgc->serial;
+@@ -5562,6 +5565,15 @@ static inline bool box_equal(const BoxRe
+ 	return *(const uint64_t *)a == *(const uint64_t *)b;
+ }
+ 
++static inline bool has_clip(GCPtr gc)
++{
++#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0)
++	return gc->clientClipType != CT_NONE;
++#else
++	return gc->clientClip != NULL;
++#endif
++}
++
+ static RegionPtr
+ sna_do_copy(DrawablePtr src, DrawablePtr dst, GCPtr gc,
+ 	    int sx, int sy,
+@@ -5628,7 +5640,7 @@ sna_do_copy(DrawablePtr src, DrawablePtr
+ 
+ 	/* Compute source clip region */
+ 	if (src->type == DRAWABLE_PIXMAP) {
+-		if (src == dst && gc->clientClipType == CT_NONE) {
++		if (src == dst && !has_clip(gc)) {
+ 			DBG(("%s: pixmap -- using gc clip\n", __FUNCTION__));
+ 			clip = gc->pCompositeClip;
+ 		} else {
+@@ -14391,7 +14403,7 @@ sna_validate_gc(GCPtr gc, unsigned long 
+ 
+ 	if (changes & (GCClipMask|GCSubwindowMode) ||
+ 	    drawable->serialNumber != (gc->serialNumber & DRAWABLE_SERIAL_BITS) ||
+-	    (gc->clientClipType != CT_NONE && (changes & (GCClipXOrigin | GCClipYOrigin))))
++	    (has_clip(gc) && (changes & (GCClipXOrigin | GCClipYOrigin))))
+ 		miComputeCompositeClip(gc, drawable);
+ 
+ 	sna_gc(gc)->changes |= changes;
+@@ -14830,7 +14842,7 @@ static bool has_offload_slaves(struct sn
  {
  #if HAS_PIXMAP_SHARING
  	ScreenPtr screen = sna->scrn->pScreen;
@@ -9,7 +61,7 @@
  
  	xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
  		assert(dirty->src == sna->front);
-@@ -14987,7 +14987,7 @@
+@@ -14987,7 +14999,7 @@ static void sna_accel_post_damage(struct
  {
  #if HAS_PIXMAP_SHARING
  	ScreenPtr screen = sna->scrn->pScreen;
@@ -18,7 +70,7 @@
  	bool flush = false;
  
  	xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
-@@ -15216,7 +15216,7 @@
+@@ -15216,7 +15228,7 @@ migrate_dirty_tracking(PixmapPtr old_fro
  {
  #if HAS_PIXMAP_SHARING
  	ScreenPtr screen = old_front->drawable.pScreen;

Added: head/x11-drivers/xf86-video-intel/files/patch-src_compat-api.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_compat-api.h	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,43 @@
+--- src/compat-api.h.orig	2013-05-21 10:15:11 UTC
++++ src/compat-api.h
+@@ -158,4 +158,40 @@ static inline void FreePixmap(PixmapPtr 
+ 	if ((d)->pScreen->SourceValidate) (d)->pScreen->SourceValidate(d, x, y, w, h)
+ #endif
+ 
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0)
++#define DamageUnregister(d, dd) DamageUnregister(dd)
++#endif
++
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,16,99,1,0)
++
++#define XORG_XV_VERSION 2
++#define ddStopVideo_ARGS XvPortPtr port, DrawablePtr draw
++#define ddSetPortAttribute_ARGS XvPortPtr port, Atom attribute, INT32 value
++#define ddGetPortAttribute_ARGS XvPortPtr port, Atom attribute, INT32 *value
++#define ddQueryBestSize_ARGS XvPortPtr port, CARD8 motion, CARD16 vid_w, CARD16 vid_h, CARD16 drw_w, CARD16 drw_h, unsigned int *p_w, unsigned int *p_h
++#define ddPutImage_ARGS DrawablePtr draw, XvPortPtr port, GCPtr gc, INT16 src_x, INT16 src_y, CARD16 src_w, CARD16 src_h, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h, XvImagePtr format, unsigned char *buf, Bool sync, CARD16 width, CARD16 height
++#define ddQueryImageAttributes_ARGS XvPortPtr port, XvImagePtr format, unsigned short *w, unsigned short *h, int *pitches, int *offsets
++
++#else
++
++#define XORG_XV_VERSION 1
++#define ddStopVideo_ARGS ClientPtr client, XvPortPtr port, DrawablePtr draw
++#define ddSetPortAttribute_ARGS ClientPtr client, XvPortPtr port, Atom attribute, INT32 value
++#define ddGetPortAttribute_ARGS ClientPtr client, XvPortPtr port, Atom attribute, INT32 *value
++#define ddQueryBestSize_ARGS ClientPtr client, XvPortPtr port, CARD8 motion, CARD16 vid_w, CARD16 vid_h, CARD16 drw_w, CARD16 drw_h, unsigned int *p_w, unsigned int *p_h
++#define ddPutImage_ARGS ClientPtr client, DrawablePtr draw, XvPortPtr port, GCPtr gc, INT16 src_x, INT16 src_y, CARD16 src_w, CARD16 src_h, INT16 drw_x, INT16 drw_y, CARD16 drw_w, CARD16 drw_h, XvImagePtr format, unsigned char *buf, Bool sync, CARD16 width, CARD16 height
++#define ddQueryImageAttributes_ARGS ClientPtr client, XvPortPtr port, XvImagePtr format, unsigned short *w, unsigned short *h, int *pitches, int *offsets
++
++#endif
++
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,16,99,1,0)
++#include <mi.h>
++#define miHandleExposures(pSrcDrawable, pDstDrawable, \
++			  pGC, srcx, srcy, width, height, \
++			  dstx, dsty, plane) \
++	miHandleExposures(pSrcDrawable, pDstDrawable, \
++			  pGC, srcx, srcy, width, height, \
++			  dstx, dsty)
++#endif
++
+ #endif

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_fb_fbpict.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_fb_fbpict.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,28 @@
+--- src/sna/fb/fbpict.c.orig	2013-03-27 11:58:09 UTC
++++ src/sna/fb/fbpict.c
+@@ -156,6 +156,16 @@ create_conical_gradient_image(PictGradie
+ 						    gradient->nstops);
+ }
+ 
++static inline bool
++picture_has_clip(PicturePtr p)
++{
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,16,99,1,0)
++	return p->clientClip;
++#else
++	return p->clientClipType != CT_NONE;
++#endif
++}
++
+ static pixman_image_t *
+ create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
+ {
+@@ -180,7 +190,7 @@ create_bits_picture(PicturePtr pict, Boo
+ 	 * only set the clip region for pictures with drawables
+ 	 */
+ 	if (has_clip) {
+-		if (pict->clientClipType != CT_NONE)
++		if (picture_has_clip(pict))
+ 			pixman_image_set_has_client_clip(image, TRUE);
+ 
+ 		if (*xoff || *yoff)

Modified: head/x11-drivers/xf86-video-intel/files/patch-src_sna_kgem.c
==============================================================================
--- head/x11-drivers/xf86-video-intel/files/patch-src_sna_kgem.c	Sat Apr 18 15:14:57 2015	(r384229)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_kgem.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -1,5 +1,5 @@
---- src/sna/kgem.c.orig	2013-08-04 11:10:59.000000000 +0200
-+++ src/sna/kgem.c	2013-08-14 11:59:14.787060294 +0200
+--- src/sna/kgem.c.orig	2013-08-20 20:26:26 UTC
++++ src/sna/kgem.c
 @@ -25,6 +25,7 @@
   *
   */
@@ -8,7 +8,7 @@
  #ifdef HAVE_CONFIG_H
  #include "config.h"
  #endif
-@@ -1890,7 +1891,8 @@
+@@ -1873,7 +1874,8 @@ static void kgem_bo_move_to_snoop(struct
  static struct kgem_bo *
  search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
  {
@@ -18,7 +18,7 @@
  
  	DBG(("%s: num_pages=%d, flags=%x\n", __FUNCTION__, num_pages, flags));
  
-@@ -2104,7 +2106,8 @@
+@@ -2087,7 +2089,8 @@ static bool kgem_retire__buffers(struct 
  
  static bool kgem_retire__flushing(struct kgem *kgem)
  {
@@ -28,7 +28,7 @@
  	bool retired = false;
  
  	list_for_each_entry_safe(bo, next, &kgem->flushing, request) {
-@@ -2309,7 +2312,8 @@
+@@ -2292,7 +2295,8 @@ bool __kgem_ring_is_idle(struct kgem *kg
  static void kgem_commit(struct kgem *kgem)
  {
  	struct kgem_request *rq = kgem->next_request;
@@ -38,7 +38,7 @@
  
  	list_for_each_entry_safe(bo, next, &rq->buffers, request) {
  		assert(next->request.prev == &bo->request);
-@@ -2390,7 +2394,8 @@
+@@ -2373,7 +2377,8 @@ static void kgem_close_inactive(struct k
  
  static void kgem_finish_buffers(struct kgem *kgem)
  {
@@ -48,7 +48,7 @@
  
  	list_for_each_entry_safe(bo, next, &kgem->batch_buffers, base.list) {
  		DBG(("%s: buffer handle=%d, used=%d, exec?=%d, write=%d, mmapped=%s\n",
-@@ -3252,7 +3257,8 @@
+@@ -3254,7 +3259,8 @@ void kgem_cleanup_cache(struct kgem *kge
  static struct kgem_bo *
  search_linear_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags)
  {
@@ -58,7 +58,7 @@
  	bool use_active = (flags & CREATE_INACTIVE) == 0;
  	struct list *cache;
  
-@@ -3855,7 +3861,7 @@
+@@ -3867,7 +3873,7 @@ struct kgem_bo *kgem_create_2d(struct kg
  			       uint32_t flags)
  {
  	struct list *cache;
@@ -67,7 +67,7 @@
  	uint32_t pitch, tiled_height, size;
  	uint32_t handle;
  	int i, bucket, retry;
-@@ -5302,7 +5308,7 @@
+@@ -5337,7 +5343,7 @@ void kgem_bo_sync__gtt(struct kgem *kgem
  void kgem_clear_dirty(struct kgem *kgem)
  {
  	struct list * const buffers = &kgem->next_request->buffers;
@@ -76,7 +76,7 @@
  
  	list_for_each_entry(bo, buffers, request) {
  		if (!bo->gpu_dirty)
-@@ -5578,7 +5584,7 @@
+@@ -5613,7 +5619,7 @@ struct kgem_bo *kgem_create_buffer(struc
  				   uint32_t size, uint32_t flags,
  				   void **ret)
  {

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__composite.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__composite.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,43 @@
+--- src/sna/sna_composite.c.orig	2013-08-14 11:59:36 UTC
++++ src/sna/sna_composite.c
+@@ -122,11 +122,21 @@ clip_to_dst(pixman_region16_t *region,
+ }
+ 
+ static inline bool
++picture_has_clip(PicturePtr p)
++{
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,16,99,1,0)
++	return p->clientClip;
++#else
++	return p->clientClipType != CT_NONE;
++#endif
++}
++
++static inline bool
+ clip_to_src(RegionPtr region, PicturePtr p, int dx, int	 dy)
+ {
+ 	bool result;
+ 
+-	if (p->clientClipType == CT_NONE)
++	if (!picture_has_clip(p))
+ 		return true;
+ 
+ 	pixman_region_translate(p->clientClip,
+@@ -220,7 +230,7 @@ sna_compute_composite_region(RegionPtr r
+ 		       __FUNCTION__,
+ 		       src->pDrawable ? src->pDrawable->width : 0,
+ 		       src->pDrawable ? src->pDrawable->height : 0,
+-		       src->clientClipType,
++		       picture_has_clip(src),
+ 		       region->extents.x1, region->extents.y1,
+ 		       region->extents.x2, region->extents.y2));
+ 
+@@ -287,7 +297,7 @@ trim_extents(BoxPtr extents, const Pictu
+ static void
+ _trim_source_extents(BoxPtr extents, const PicturePtr p, int dx, int dy)
+ {
+-	if (p->clientClipType != CT_NONE)
++	if (picture_has_clip(p))
+ 		trim_extents(extents, p, dx, dy);
+ }
+ 

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__driver.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__driver.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,10 @@
+--- src/sna/sna_driver.c.orig	2015-03-05 09:44:44 UTC
++++ src/sna/sna_driver.c
+@@ -769,6 +769,7 @@ static Bool sna_late_close_screen(CLOSE_
+ 	DBG(("%s\n", __FUNCTION__));
+ 
+ 	sna_accel_close(sna);
++	sna_video_close(sna);
+ 
+ 	depths = screen->allowedDepths;
+ 	for (d = 0; d < screen->numDepths; d++)

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__trapezoids.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__trapezoids.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,111 @@
+From 48a33fc379b17eed195875222ad773c911d9dff1 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 2 Sep 2014 19:08:36 +0100
+Subject: sna/trapezoids: Use the corrected trapezoid origin for aligned boxes
+
+The rule for the origin of the CompositeTrapezoids routine is the
+upper-left corner of the first trapezoid. Care must be taken in case the
+trapezoid edge is upside down to consider the upper vertex.
+
+Reported-by: "Jasper St. Pierre" <jstpierre@mecheye.net>
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+
+
+--- src/sna/sna_trapezoids.c.orig	2013-08-20 22:26:26.000000000 +0200
++++ src/sna/sna_trapezoids.c	2015-04-12 16:40:02.382938000 +0200
+@@ -2690,13 +2690,16 @@
+ 	BoxRec stack_boxes[64], *boxes;
+ 	pixman_region16_t region, clip;
+ 	struct sna_composite_op tmp;
++	int16_t dst_x, dst_y;
+ 	bool ret = true;
+ 	int dx, dy, n, num_boxes;
+ 
+ 	if (NO_ALIGNED_BOXES)
+ 		return false;
+ 
+-	DBG(("%s\n", __FUNCTION__));
++	DBG(("%s: pixmap=%ld, nboxes=%d, dx=(%d, %d)\n", __FUNCTION__,
++	    get_drawable_pixmap(dst->pDrawable)->drawable.serialNumber,
++	    ntrap, dst->pDrawable->x, dst->pDrawable->y));
+ 
+ 	boxes = stack_boxes;
+ 	if (ntrap > (int)ARRAY_SIZE(stack_boxes)) {
+@@ -2738,19 +2741,20 @@
+ 	if (num_boxes == 0)
+ 		goto free_boxes;
+ 
+-	DBG(("%s: extents (%d, %d), (%d, %d) offset of (%d, %d)\n",
++	trapezoid_origin(&traps[0].left, &dst_x, &dst_y);
++
++	DBG(("%s: extents (%d, %d), (%d, %d) offset of (%d, %d), origin (%d, %d)\n",
+ 	     __FUNCTION__,
+ 	     region.extents.x1, region.extents.y1,
+ 	     region.extents.x2, region.extents.y2,
+ 	     region.extents.x1 - boxes[0].x1,
+-	     region.extents.y1 - boxes[0].y1));
+-
+-	src_x += region.extents.x1 - boxes[0].x1;
+-	src_y += region.extents.y1 - boxes[0].y1;
++	     region.extents.y1 - boxes[0].y1,
++	     dst_x, dst_y));
+ 
+ 	if (!sna_compute_composite_region(&clip,
+ 					  src, NULL, dst,
+-					  src_x,  src_y,
++					  src_x + region.extents.x1 - dst_x - dx,
++					  src_y + region.extents.y1 - dst_y - dy,
+ 					  0, 0,
+ 					  region.extents.x1 - dx, region.extents.y1 - dy,
+ 					  region.extents.x2 - region.extents.x1,
+@@ -2760,9 +2764,18 @@
+ 		goto done;
+ 	}
+ 
++	DBG(("%s: clipped extents (%d, %d), (%d, %d);  now offset by (%d, %d), orgin (%d, %d)\n",
++	    __FUNCTION__,
++	     clip.extents.x1, clip.extents.y1,
++	     clip.extents.x2, clip.extents.y2,
++	     clip.extents.x1 - boxes[0].x1,
++	     clip.extents.y1 - boxes[0].y1,
++	     dst_x, dst_y));
++
+ 	if (force_fallback ||
+ 	    !sna->render.composite(sna, op, src, NULL, dst,
+-				   src_x,  src_y,
++				   src_x + clip.extents.x1 - dst_x,
++				   src_y + clip.extents.y1 - dst_y,
+ 				   0, 0,
+ 				   clip.extents.x1,  clip.extents.y1,
+ 				   clip.extents.x2 - clip.extents.x1,
+@@ -2796,6 +2809,8 @@
+ 		}
+ 
+ 		DBG(("%s: fbComposite()\n", __FUNCTION__));
++		src_x -= dst_x - dx;
++		src_y -= dst_y - dy;
+ 		if (maskFormat) {
+ 			pixman_region_init_rects(&region, boxes, num_boxes);
+ 			RegionIntersect(&region, &region, &clip);
+@@ -2804,8 +2819,8 @@
+ 			count = REGION_NUM_RECTS(&region);
+ 			for (i = 0; i < count; i++) {
+ 				fbComposite(op, src, NULL, dst,
+-					    src_x + b[i].x1 - boxes[0].x1,
+-					    src_y + b[i].y1 - boxes[0].y1,
++					    src_x + b[i].x1,
++					    src_y + b[i].y1,
+ 					    0, 0,
+ 					    b[i].x1, b[i].y1,
+ 					    b[i].x2 - b[i].x1, b[i].y2 - b[i].y1);
+@@ -2819,8 +2834,8 @@
+ 				count = REGION_NUM_RECTS(&region);
+ 				for (i = 0; i < count; i++) {
+ 					fbComposite(op, src, NULL, dst,
+-						    src_x + b[i].x1 - boxes[0].x1,
+-						    src_y + b[i].y1 - boxes[0].y1,
++						    src_x + b[i].x1,
++						    src_y + b[i].y1,
+ 						    0, 0,
+ 						    b[i].x1, b[i].y1,
+ 						    b[i].x2 - b[i].x1, b[i].y2 - b[i].y1);

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,82 @@
+--- src/sna/sna_video.c.orig	2015-03-05 09:45:32 UTC
++++ src/sna/sna_video.c
+@@ -68,6 +68,7 @@
+ #else
+ static inline void sna_video_xvmc_setup(struct sna *sna, ScreenPtr ptr)
+ {
++	DBG(("%s: XvMC not compiled in\n"));
+ }
+ #endif
+ 
+@@ -620,6 +621,7 @@ sna_xv_fixup_formats(ScreenPtr screen, X
+ 	return count;
+ }
+ 
++#if XORG_XV_VERSION < 2
+ static int
+ sna_xv_query_adaptors(ScreenPtr screen,
+ 		      XvAdaptorPtr *adaptors,
+@@ -636,20 +638,10 @@ static Bool
+ sna_xv_close_screen(CLOSE_SCREEN_ARGS_DECL)
+ {
+ 	struct sna *sna = to_sna_from_screen(screen);
+-	int i;
+-
+-	for (i = 0; i < sna->xv.num_adaptors; i++) {
+-		free(sna->xv.adaptors[i].pPorts->devPriv.ptr);
+-		free(sna->xv.adaptors[i].pPorts);
+-		free(sna->xv.adaptors[i].pEncodings);
+-	}
+-	free(sna->xv.adaptors);
+-
+-	sna->xv.adaptors = NULL;
+-	sna->xv.num_adaptors = 0;
+-
++	sna_video_close(sna);
+ 	return TRUE;
+ }
++#endif
+ 
+ void sna_video_init(struct sna *sna, ScreenPtr screen)
+ {
+@@ -671,8 +663,10 @@ void sna_video_init(struct sna *sna, Scr
+ 		return;
+ 
+ 	xv = to_xv(screen);
++#if XORG_XV_VERSION < 2
+ 	xv->ddCloseScreen = sna_xv_close_screen;
+ 	xv->ddQueryAdaptors = sna_xv_query_adaptors;
++#endif
+ 
+ 	sna_video_textured_setup(sna, screen);
+ 	sna_video_sprite_setup(sna, screen);
+@@ -698,7 +692,28 @@ void sna_video_destroy_window(WindowPtr 
+ 	XvPortPtr port;
+ 
+ 	port = sna_window_get_port(win);
+-	if (port)
++	if (port) {
++#if XORG_XV_VERSION < 2
+ 		port->pAdaptor->ddStopVideo(NULL, port, &win->drawable);
++#else
++		port->pAdaptor->ddStopVideo(port, &win->drawable);
++#endif
++	}
+ 	assert(sna_window_get_port(win) == NULL);
+ }
++
++void sna_video_close(struct sna *sna)
++{
++	int i;
++
++	for (i = 0; i < sna->xv.num_adaptors; i++) {
++		free(sna->xv.adaptors[i].pPorts->devPriv.ptr);
++		free(sna->xv.adaptors[i].pPorts);
++		free(sna->xv.adaptors[i].pEncodings);
++	}
++	free(sna->xv.adaptors);
++
++	sna->xv.adaptors = NULL;
++	sna->xv.num_adaptors = 0;
++}
++

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video.h	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,10 @@
+--- src/sna/sna_video.h.orig	2015-03-05 09:53:01 UTC
++++ src/sna/sna_video.h
+@@ -129,6 +129,7 @@ void sna_video_overlay_setup(struct sna 
+ void sna_video_sprite_setup(struct sna *sna, ScreenPtr screen);
+ void sna_video_textured_setup(struct sna *sna, ScreenPtr screen);
+ void sna_video_destroy_window(WindowPtr win);
++void sna_video_close(struct sna *sna);
+ 
+ XvAdaptorPtr sna_xv_adaptor_alloc(struct sna *sna);
+ int sna_xv_fixup_formats(ScreenPtr screen,

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__overlay.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__overlay.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,101 @@
+--- src/sna/sna_video_overlay.c.orig	2015-03-05 09:54:32 UTC
++++ src/sna/sna_video_overlay.c
+@@ -121,9 +121,7 @@ static bool sna_video_overlay_update_att
+ 	return drmIoctl(video->sna->kgem.fd, DRM_IOCTL_I915_OVERLAY_ATTRS, &attrs) == 0;
+ }
+ 
+-static int sna_video_overlay_stop(ClientPtr client,
+-				  XvPortPtr port,
+-				  DrawablePtr draw)
++static int sna_video_overlay_stop(ddStopVideo_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -148,10 +146,7 @@ static int sna_video_overlay_stop(Client
+ }
+ 
+ static int
+-sna_video_overlay_set_attribute(ClientPtr client,
+-				XvPortPtr port,
+-				Atom attribute,
+-				INT32 value)
++sna_video_overlay_set_attribute(ddSetPortAttribute_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -270,12 +265,7 @@ sna_video_overlay_get_attribute(ClientPt
+ }
+ 
+ static int
+-sna_video_overlay_best_size(ClientPtr client,
+-			    XvPortPtr port,
+-			    CARD8 motion,
+-			    CARD16 vid_w, CARD16 vid_h,
+-			    CARD16 drw_w, CARD16 drw_h,
+-			    unsigned int *p_w, unsigned int *p_h)
++sna_video_overlay_best_size(ddQueryBestSize_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -464,18 +454,7 @@ sna_video_overlay_show(struct sna *sna,
+ }
+ 
+ static int
+-sna_video_overlay_put_image(ClientPtr client,
+-			    DrawablePtr draw,
+-			    XvPortPtr port,
+-			    GCPtr gc,
+-			    INT16 src_x, INT16 src_y,
+-			    CARD16 src_w, CARD16 src_h,
+-			    INT16 drw_x, INT16 drw_y,
+-			    CARD16 drw_w, CARD16 drw_h,
+-			    XvImagePtr format,
+-			    unsigned char *buf,
+-			    Bool sync,
+-			    CARD16 width, CARD16 height)
++sna_video_overlay_put_image(ddPutImage_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -604,18 +583,16 @@ invisible:
+ 	/*
+ 	 * If the video isn't visible on any CRTC, turn it off
+ 	 */
++#if XORG_XV_VERSION < 2
+ 	sna_video_overlay_stop(client, port, draw);
++#else
++	sna_video_overlay_stop(port, draw);
++#endif
+ 	return Success;
+ }
+ 
+ static int
+-sna_video_overlay_query(ClientPtr client,
+-			XvPortPtr port,
+-			XvImagePtr format,
+-			unsigned short *w,
+-			unsigned short *h,
+-			int *pitches,
+-			int *offsets)
++sna_video_overlay_query(ddQueryImageAttributes_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna_video_frame frame;
+@@ -771,8 +748,10 @@ void sna_video_overlay_setup(struct sna 
+ 	adaptor->pAttributes = (XvAttributeRec *)Attributes;
+ 	adaptor->nImages = ARRAY_SIZE(Images);
+ 	adaptor->pImages = (XvImageRec *)Images;
++#if XORG_XV_VERSION < 2
+ 	adaptor->ddAllocatePort = sna_xv_alloc_port;
+ 	adaptor->ddFreePort = sna_xv_free_port;
++#endif
+ 	adaptor->ddPutVideo = NULL;
+ 	adaptor->ddPutStill = NULL;
+ 	adaptor->ddGetVideo = NULL;
+@@ -843,4 +822,6 @@ void sna_video_overlay_setup(struct sna 
+ 	}
+ 
+ 	sna_video_overlay_update_attrs(video);
++
++	DBG(("%s: '%s' initialized %d ports\n", __FUNCTION__, adaptor->name, adaptor->nPorts));
+ }

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__sprite.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__sprite.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,114 @@
+--- src/sna/sna_video_sprite.c.orig	2015-03-05 10:02:08 UTC
++++ src/sna/sna_video_sprite.c
+@@ -56,9 +56,7 @@ static const XvAttributeRec attribs[] = 
+ 	{ XvSettable | XvGettable, 0, 0xffffff, (char *)"XV_COLORKEY" },
+ };
+ 
+-static int sna_video_sprite_stop(ClientPtr client,
+-				 XvPortPtr port,
+-				 DrawablePtr draw)
++static int sna_video_sprite_stop(ddStopVideo_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct drm_mode_set_plane s;
+@@ -82,10 +80,7 @@ static int sna_video_sprite_stop(ClientP
+ 	return Success;
+ }
+ 
+-static int sna_video_sprite_set_attr(ClientPtr client,
+-				     XvPortPtr port,
+-				     Atom attribute,
+-				     INT32 value)
++static int sna_video_sprite_set_attr(ddSetPortAttribute_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 
+@@ -104,10 +99,7 @@ static int sna_video_sprite_set_attr(Cli
+ 	return Success;
+ }
+ 
+-static int sna_video_sprite_get_attr(ClientPtr client,
+-				     XvPortPtr port,
+-				     Atom attribute,
+-				     INT32 *value)
++static int sna_video_sprite_get_attr(ddGetPortAttribute_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 
+@@ -121,13 +113,7 @@ static int sna_video_sprite_get_attr(Cli
+ 	return Success;
+ }
+ 
+-static int sna_video_sprite_best_size(ClientPtr client,
+-				      XvPortPtr port,
+-				      CARD8 motion,
+-				      CARD16 vid_w, CARD16 vid_h,
+-				      CARD16 drw_w, CARD16 drw_h,
+-				      unsigned int *p_w,
+-				      unsigned int *p_h)
++static int sna_video_sprite_best_size(ddQueryBestSize_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -310,18 +296,7 @@ sna_video_sprite_show(struct sna *sna,
+ 	return true;
+ }
+ 
+-static int sna_video_sprite_put_image(ClientPtr client,
+-				      DrawablePtr draw,
+-				      XvPortPtr port,
+-				      GCPtr gc,
+-				      INT16 src_x, INT16 src_y,
+-				      CARD16 src_w, CARD16 src_h,
+-				      INT16 drw_x, INT16 drw_y,
+-				      CARD16 drw_w, CARD16 drw_h,
+-				      XvImagePtr format,
+-				      unsigned char *buf,
+-				      Bool sync,
+-				      CARD16 width, CARD16 height)
++static int sna_video_sprite_put_image(ddPutImage_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -430,16 +405,14 @@ static int sna_video_sprite_put_image(Cl
+ 
+ invisible:
+ 	/* If the video isn't visible on any CRTC, turn it off */
++#if XORG_XV_VERSION < 2
+ 	return sna_video_sprite_stop(client, port, draw);
++#else
++	return sna_video_sprite_stop(port, draw);
++#endif
+ }
+ 
+-static int sna_video_sprite_query(ClientPtr client,
+-				  XvPortPtr port,
+-				  XvImagePtr format,
+-				  unsigned short *w,
+-				  unsigned short *h,
+-				  int *pitches,
+-				  int *offsets)
++static int sna_video_sprite_query(ddQueryImageAttributes_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna_video_frame frame;
+@@ -548,8 +521,10 @@ void sna_video_sprite_setup(struct sna *
+ 	if (sna->kgem.gen == 071)
+ 		adaptor->nImages = 4;
+ 
++#if XORG_XV_VERSION < 2
+ 	adaptor->ddAllocatePort = sna_xv_alloc_port;
+ 	adaptor->ddFreePort = sna_xv_free_port;
++#endif
+ 	adaptor->ddPutVideo = NULL;
+ 	adaptor->ddPutStill = NULL;
+ 	adaptor->ddGetVideo = NULL;
+@@ -593,6 +568,8 @@ void sna_video_sprite_setup(struct sna *
+ 
+ 	xvColorKey = MAKE_ATOM("XV_COLORKEY");
+ 	xvAlwaysOnTop = MAKE_ATOM("XV_ALWAYS_ON_TOP");
++
++	DBG(("%s: '%s' initialized %d ports\n", __FUNCTION__, adaptor->name, adaptor->nPorts));
+ }
+ #else
+ void sna_video_sprite_setup(struct sna *sna, ScreenPtr screen)

Added: head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__textured.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/x11-drivers/xf86-video-intel/files/patch-src_sna_sna__video__textured.c	Sat Apr 18 15:20:38 2015	(r384230)
@@ -0,0 +1,105 @@
+--- src/sna/sna_video_textured.c.orig	2015-03-05 10:08:42 UTC
++++ src/sna/sna_video_textured.c
+@@ -56,9 +56,7 @@ static const XvImageRec Images[] = {
+ 	XVMC_YUV,
+ };
+ 
+-static int sna_video_textured_stop(ClientPtr client,
+-				   XvPortPtr port,
+-				   DrawablePtr draw)
++static int sna_video_textured_stop(ddStopVideo_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 
+@@ -71,10 +69,7 @@ static int sna_video_textured_stop(Clien
+ }
+ 
+ static int
+-sna_video_textured_set_attribute(ClientPtr client,
+-				 XvPortPtr port,
+-				 Atom attribute,
+-				 INT32 value)
++sna_video_textured_set_attribute(ddSetPortAttribute_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 
+@@ -100,10 +95,7 @@ sna_video_textured_set_attribute(ClientP
+ }
+ 
+ static int
+-sna_video_textured_get_attribute(ClientPtr client,
+-				 XvPortPtr port,
+-				 Atom attribute,
+-				 INT32 *value)
++sna_video_textured_get_attribute(ddGetPortAttribute_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 
+@@ -120,13 +112,7 @@ sna_video_textured_get_attribute(ClientP
+ }
+ 
+ static int
+-sna_video_textured_best_size(ClientPtr client,
+-			     XvPortPtr port,
+-			     CARD8 motion,
+-			     CARD16 vid_w, CARD16 vid_h,
+-			     CARD16 drw_w, CARD16 drw_h,
+-			     unsigned int *p_w,
+-			     unsigned int *p_h)
++sna_video_textured_best_size(ddQueryBestSize_ARGS)
+ {
+ 	if (vid_w > (drw_w << 1))
+ 		drw_w = vid_w >> 1;
+@@ -153,18 +139,7 @@ sna_video_textured_best_size(ClientPtr c
+  * compositing.  It's a new argument to the function in the 1.1 server.
+  */
+ static int
+-sna_video_textured_put_image(ClientPtr client,
+-			     DrawablePtr draw,
+-			     XvPortPtr port,
+-			     GCPtr gc,
+-			     INT16 src_x, INT16 src_y,
+-			     CARD16 src_w, CARD16 src_h,
+-			     INT16 drw_x, INT16 drw_y,
+-			     CARD16 drw_w, CARD16 drw_h,
+-			     XvImagePtr format,
+-			     unsigned char *buf,
+-			     Bool sync,
+-			     CARD16 width, CARD16 height)
++sna_video_textured_put_image(ddPutImage_ARGS)
+ {
+ 	struct sna_video *video = port->devPriv.ptr;
+ 	struct sna *sna = video->sna;
+@@ -269,13 +244,7 @@ sna_video_textured_put_image(ClientPtr c
+ }
+ 
+ static int
+-sna_video_textured_query(ClientPtr client,
+-			 XvPortPtr port,
+-			 XvImagePtr format,
+-			 unsigned short *w,
+-			 unsigned short *h,
+-			 int *pitches,
+-			 int *offsets)
++sna_video_textured_query(ddQueryImageAttributes_ARGS)
+ {
+ 	int size, tmp;
+ 
+@@ -384,8 +353,10 @@ void sna_video_textured_setup(struct sna
+ 	adaptor->pAttributes = (XvAttributeRec *)Attributes;
+ 	adaptor->nImages = ARRAY_SIZE(Images);
+ 	adaptor->pImages = (XvImageRec *)Images;
++#if XORG_XV_VERSION < 2
+ 	adaptor->ddAllocatePort = sna_xv_alloc_port;
+ 	adaptor->ddFreePort = sna_xv_free_port;
++#endif
+ 	adaptor->ddPutVideo = NULL;
+ 	adaptor->ddPutStill = NULL;
+ 	adaptor->ddGetVideo = NULL;
+@@ -426,4 +397,6 @@ void sna_video_textured_setup(struct sna
+ 	xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
+ 	xvContrast = MAKE_ATOM("XV_CONTRAST");
+ 	xvSyncToVblank = MAKE_ATOM("XV_SYNC_TO_VBLANK");
++
++	DBG(("%s: '%s' initialized %d ports\n", __FUNCTION__, adaptor->name, adaptor->nPorts));
+ }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504181520.t3IFKcxv068038>