mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-28 01:06:17 +00:00
Add patches to allow xf86-video-intel to build with newer xorg-server
versions that 1.14. Obtained from: xorg devel repo
This commit is contained in:
parent
2f31f6488f
commit
ea9c920027
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=384230
@ -3,7 +3,7 @@
|
||||
|
||||
PORTNAME= xf86-video-intel
|
||||
PORTVERSION= 2.21.15
|
||||
PORTREVISION= 7
|
||||
PORTREVISION= 8
|
||||
CATEGORIES= x11-drivers
|
||||
|
||||
MAINTAINER= x11@FreeBSD.org
|
||||
|
@ -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;
|
||||
|
43
x11-drivers/xf86-video-intel/files/patch-src_compat-api.h
Normal file
43
x11-drivers/xf86-video-intel/files/patch-src_compat-api.h
Normal file
@ -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
|
28
x11-drivers/xf86-video-intel/files/patch-src_sna_fb_fbpict.c
Normal file
28
x11-drivers/xf86-video-intel/files/patch-src_sna_fb_fbpict.c
Normal file
@ -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)
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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++)
|
@ -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(®ion, boxes, num_boxes);
|
||||
RegionIntersect(®ion, ®ion, &clip);
|
||||
@@ -2804,8 +2819,8 @@
|
||||
count = REGION_NUM_RECTS(®ion);
|
||||
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(®ion);
|
||||
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);
|
@ -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;
|
||||
+}
|
||||
+
|
@ -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,
|
@ -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));
|
||||
}
|
@ -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)
|
@ -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));
|
||||
}
|
Loading…
Reference in New Issue
Block a user