Timo Aaltonen pushed to branch debian-unstable at X Strike Force / driver / xserver-xorg-video-intel
Commits:
-
67f15b36
by Chris Wilson at 2020-08-20T09:30:19+01:00
-
4e8ae05f
by Chris Wilson at 2020-11-16T15:11:19+00:00
-
ad5540f6
by Chris Wilson at 2020-11-16T15:23:28+00:00
-
9236c582
by Chris Wilson at 2020-11-26T20:19:48+00:00
-
a511f22c
by Chris Wilson at 2020-12-15T17:00:20+00:00
-
ab906aa0
by Chris Wilson at 2021-01-10T00:23:28+00:00
-
31486f40
by Chris Wilson at 2021-01-15T20:59:05+00:00
-
bf41b9a8
by Timo Aaltonen at 2022-02-03T16:23:33+02:00
-
68700cd7
by Timo Aaltonen at 2022-02-03T16:24:26+02:00
-
d27240c3
by Timo Aaltonen at 2022-02-03T16:49:07+02:00
-
d9cc7b1e
by Timo Aaltonen at 2022-02-03T16:49:53+02:00
-
64cccc1b
by Timo Aaltonen at 2022-02-09T12:38:36+02:00
-
c9e7af22
by Timo Aaltonen at 2022-02-09T12:50:15+02:00
-
ee7e65dd
by Timo Aaltonen at 2022-02-09T12:51:28+02:00
-
dbcac90e
by Timo Aaltonen at 2022-02-09T12:51:57+02:00
13 changed files:
- debian/README.source
- debian/changelog
- debian/control
- debian/rules
- debian/watch
- src/compat-api.h
- src/sna/gen7_render.c
- src/sna/kgem.c
- src/sna/kgem.h
- src/sna/sna_accel.c
- src/sna/sna_composite.c
- src/sna/sna_driver.c
- src/uxa/intel_driver.c
Changes:
... | ... | @@ -25,9 +25,9 @@ Guide To The X Strike Force Packages |
25 | 25 |
------------------------------------
|
26 | 26 |
|
27 | 27 |
The X Strike Force team maintains X packages in git repositories on
|
28 |
-git.debian.org in the pkg-xorg subdirectory. Most upstream packages
|
|
28 |
+salsa.debian.org in the xorg-team subdirectory. Most upstream packages
|
|
29 | 29 |
are actually maintained in git repositories as well, so they often
|
30 |
-just need to be pulled into git.debian.org in a "upstream-*" branch.
|
|
30 |
+just need to be pulled into salsa.debian.org in a "upstream-*" branch.
|
|
31 | 31 |
Otherwise, the upstream sources are manually installed in the Debian
|
32 | 32 |
git repository.
|
33 | 33 |
|
1 |
+xserver-xorg-video-intel (2:2.99.917+git20210115-1) unstable; urgency=medium
|
|
2 |
+ |
|
3 |
+ * New upstream snapshot.
|
|
4 |
+ * Build against xserver 21.1.
|
|
5 |
+ * rules: Disable building with lto.
|
|
6 |
+ * control: Bump debhelper-compat to 13, policy to 4.6.0.
|
|
7 |
+ * Update README.source for salsa.
|
|
8 |
+ * watch: Update upstream git url.
|
|
9 |
+ |
|
10 |
+ -- Timo Aaltonen <tjaalton@debian.org> Wed, 09 Feb 2022 12:51:46 +0200
|
|
11 |
+ |
|
1 | 12 |
xserver-xorg-video-intel (2:2.99.917+git20200714-2) unstable; urgency=medium
|
2 | 13 |
|
3 | 14 |
[ Timo Aaltonen ]
|
... | ... | @@ -8,9 +8,9 @@ Uploaders: |
8 | 8 |
maximilian attems <maks@debian.org>,
|
9 | 9 |
Vincent Cheng <vcheng@debian.org>,
|
10 | 10 |
Build-Depends:
|
11 |
- debhelper-compat (= 12),
|
|
11 |
+ debhelper-compat (= 13),
|
|
12 | 12 |
pkg-config,
|
13 |
- xserver-xorg-dev (>= 2:1.11.99.901),
|
|
13 |
+ xserver-xorg-dev (>= 2:21.1),
|
|
14 | 14 |
x11proto-dev,
|
15 | 15 |
libx11-dev,
|
16 | 16 |
libdrm-dev (>= 2.4.23),
|
... | ... | @@ -42,7 +42,7 @@ Build-Depends: |
42 | 42 |
# tests, benchmarks:
|
43 | 43 |
# libcairo2-dev,
|
44 | 44 |
# libpng12-dev,
|
45 |
-Standards-Version: 4.5.0
|
|
45 |
+Standards-Version: 4.6.0
|
|
46 | 46 |
Vcs-Git: https://salsa.debian.org/xorg-team/driver/xserver-xorg-video-intel.git
|
47 | 47 |
Vcs-Browser: https://salsa.debian.org/xorg-team/driver/xserver-xorg-video-intel
|
48 | 48 |
Homepage: https://www.x.org/
|
... | ... | @@ -6,6 +6,8 @@ BUILDER := $(shell dpkg-parsechangelog | awk -F': ' '/^Maintainer: / {pri |
6 | 6 |
|
7 | 7 |
DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
|
8 | 8 |
|
9 |
+export DEB_BUILD_MAINT_OPTIONS = optimize=-lto
|
|
10 |
+ |
|
9 | 11 |
ifeq ($(DEB_HOST_ARCH_OS), linux)
|
10 | 12 |
valgrind = --enable-valgrind
|
11 | 13 |
else
|
1 |
-#git=git://anongit.freedesktop.org/xorg/driver/xf86-video-intel
|
|
1 |
+#git=https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel
|
|
2 | 2 |
version=3
|
3 | 3 |
https://xorg.freedesktop.org/releases/individual/driver/ xf86-video-intel-(.*)\.tar\.gz
|
... | ... | @@ -260,4 +260,12 @@ static inline void FreePixmap(PixmapPtr pixmap) |
260 | 260 |
#define RemoveNotifyFd(fd) RemoveGeneralSocket(fd)
|
261 | 261 |
#endif
|
262 | 262 |
|
263 |
+#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(25, 2)
|
|
264 |
+#define PixmapDirtyDst(d) ((d)->secondary_dst)
|
|
265 |
+#define PixmapDirtyPrimary(d) (PixmapDirtyDst(d)->primary_pixmap)
|
|
266 |
+#else
|
|
267 |
+#define PixmapDirtyDst(d) ((d)->slave_dst)
|
|
268 |
+#define PixmapDirtyPrimary(d) (PixmapDirtyDst(d)->master_pixmap)
|
|
269 |
+#endif
|
|
270 |
+ |
|
263 | 271 |
#endif
|
... | ... | @@ -2957,42 +2957,10 @@ prefer_blt_copy(struct sna *sna, |
2957 | 2957 |
struct kgem_bo *dst_bo,
|
2958 | 2958 |
unsigned flags)
|
2959 | 2959 |
{
|
2960 |
- if (sna->kgem.mode == KGEM_BLT)
|
|
2961 |
- return true;
|
|
2962 |
- |
|
2963 |
- assert((flags & COPY_SYNC) == 0);
|
|
2964 |
- |
|
2965 |
- if (untiled_tlb_miss(src_bo) ||
|
|
2966 |
- untiled_tlb_miss(dst_bo))
|
|
2967 |
- return true;
|
|
2968 |
- |
|
2969 |
- if (flags & COPY_DRI && !sna->kgem.has_semaphores)
|
|
2970 |
- return false;
|
|
2971 |
- |
|
2972 |
- if (force_blt_ring(sna, dst_bo, src_bo))
|
|
2973 |
- return true;
|
|
2974 |
- |
|
2975 |
- if ((flags & COPY_SMALL ||
|
|
2976 |
- (sna->render_state.gt < 3 && src_bo == dst_bo)) &&
|
|
2977 |
- can_switch_to_blt(sna, dst_bo, flags))
|
|
2978 |
- return true;
|
|
2979 |
- |
|
2980 |
- if (kgem_bo_is_render(dst_bo) ||
|
|
2981 |
- kgem_bo_is_render(src_bo))
|
|
2982 |
- return false;
|
|
2983 |
- |
|
2984 |
- if (flags & COPY_LAST &&
|
|
2985 |
- sna->render_state.gt < 3 &&
|
|
2986 |
- can_switch_to_blt(sna, dst_bo, flags))
|
|
2987 |
- return true;
|
|
2988 |
- |
|
2989 |
- if (prefer_render_ring(sna, dst_bo))
|
|
2990 |
- return false;
|
|
2991 |
- |
|
2992 |
- if (!prefer_blt_ring(sna, dst_bo, flags))
|
|
2960 |
+ if (sna->kgem.ring != KGEM_BLT)
|
|
2993 | 2961 |
return false;
|
2994 | 2962 |
|
2995 |
- return prefer_blt_bo(sna, src_bo, dst_bo);
|
|
2963 |
+ return true; /* avoid clear-residuals context overhead */
|
|
2996 | 2964 |
}
|
2997 | 2965 |
|
2998 | 2966 |
static bool
|
... | ... | @@ -520,7 +520,7 @@ static bool gem_set_caching(int fd, uint32_t handle, int caching) |
520 | 520 |
return do_ioctl(fd, LOCAL_IOCTL_I915_GEM_SET_CACHING, &arg) == 0;
|
521 | 521 |
}
|
522 | 522 |
|
523 |
-static uint32_t gem_userptr(int fd, void *ptr, int size, int read_only)
|
|
523 |
+static uint32_t gem_userptr(int fd, void *ptr, size_t size, int read_only)
|
|
524 | 524 |
{
|
525 | 525 |
struct local_i915_gem_userptr arg;
|
526 | 526 |
|
... | ... | @@ -1944,6 +1944,19 @@ static uint64_t get_gtt_size(int fd) |
1944 | 1944 |
return aperture.aper_size;
|
1945 | 1945 |
}
|
1946 | 1946 |
|
1947 |
+static int get_gtt_type(int fd)
|
|
1948 |
+{
|
|
1949 |
+ struct drm_i915_getparam p;
|
|
1950 |
+ int val = 0;
|
|
1951 |
+ |
|
1952 |
+ memset(&p, 0, sizeof(p));
|
|
1953 |
+ p.param = I915_PARAM_HAS_ALIASING_PPGTT;
|
|
1954 |
+ p.value = &val;
|
|
1955 |
+ |
|
1956 |
+ drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &p);
|
|
1957 |
+ return val;
|
|
1958 |
+}
|
|
1959 |
+ |
|
1947 | 1960 |
void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen)
|
1948 | 1961 |
{
|
1949 | 1962 |
size_t totalram;
|
... | ... | @@ -2108,6 +2121,8 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, unsigned gen) |
2108 | 2121 |
!DBG_NO_CPU && (kgem->has_llc | kgem->has_userptr | kgem->has_caching),
|
2109 | 2122 |
kgem->has_llc, kgem->has_caching, kgem->has_userptr));
|
2110 | 2123 |
|
2124 |
+ kgem->has_full_ppgtt = get_gtt_type(fd) > 1;
|
|
2125 |
+ |
|
2111 | 2126 |
gtt_size = get_gtt_size(fd);
|
2112 | 2127 |
kgem->aperture_total = gtt_size;
|
2113 | 2128 |
kgem->aperture_high = gtt_size * 3/4;
|
... | ... | @@ -7016,6 +7031,30 @@ uint32_t kgem_bo_flink(struct kgem *kgem, struct kgem_bo *bo) |
7016 | 7031 |
return flink.name;
|
7017 | 7032 |
}
|
7018 | 7033 |
|
7034 |
+static bool probe(struct kgem *kgem, uint32_t handle)
|
|
7035 |
+{
|
|
7036 |
+ struct drm_i915_gem_set_domain arg = {
|
|
7037 |
+ .handle = handle,
|
|
7038 |
+ .read_domains = I915_GEM_DOMAIN_CPU,
|
|
7039 |
+ };
|
|
7040 |
+ |
|
7041 |
+ return do_ioctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &arg) == 0;
|
|
7042 |
+}
|
|
7043 |
+ |
|
7044 |
+static uint32_t probe_userptr(struct kgem *kgem,
|
|
7045 |
+ void *ptr, size_t size, int read_only)
|
|
7046 |
+{
|
|
7047 |
+ uint32_t handle;
|
|
7048 |
+ |
|
7049 |
+ handle = gem_userptr(kgem->fd, ptr, size, read_only);
|
|
7050 |
+ if (handle && !probe(kgem, handle)) {
|
|
7051 |
+ gem_close(kgem->fd, handle);
|
|
7052 |
+ handle = 0;
|
|
7053 |
+ }
|
|
7054 |
+ |
|
7055 |
+ return handle;
|
|
7056 |
+}
|
|
7057 |
+ |
|
7019 | 7058 |
struct kgem_bo *kgem_create_map(struct kgem *kgem,
|
7020 | 7059 |
void *ptr, uint32_t size,
|
7021 | 7060 |
bool read_only)
|
... | ... | @@ -7038,30 +7077,16 @@ struct kgem_bo *kgem_create_map(struct kgem *kgem, |
7038 | 7077 |
last_page &= ~(uintptr_t)(PAGE_SIZE-1);
|
7039 | 7078 |
assert(last_page > first_page);
|
7040 | 7079 |
|
7041 |
- handle = gem_userptr(kgem->fd,
|
|
7042 |
- (void *)first_page, last_page-first_page,
|
|
7043 |
- read_only);
|
|
7080 |
+ handle = probe_userptr(kgem,
|
|
7081 |
+ (void *)first_page, last_page-first_page,
|
|
7082 |
+ read_only);
|
|
7083 |
+ if (handle == 0 && read_only && kgem->has_wc_mmap)
|
|
7084 |
+ handle = probe_userptr(kgem,
|
|
7085 |
+ (void *)first_page, last_page-first_page,
|
|
7086 |
+ false);
|
|
7044 | 7087 |
if (handle == 0) {
|
7045 |
- if (read_only && kgem->has_wc_mmap) {
|
|
7046 |
- struct drm_i915_gem_set_domain set_domain;
|
|
7047 |
- |
|
7048 |
- handle = gem_userptr(kgem->fd,
|
|
7049 |
- (void *)first_page, last_page-first_page,
|
|
7050 |
- false);
|
|
7051 |
- |
|
7052 |
- VG_CLEAR(set_domain);
|
|
7053 |
- set_domain.handle = handle;
|
|
7054 |
- set_domain.read_domains = I915_GEM_DOMAIN_GTT;
|
|
7055 |
- set_domain.write_domain = 0;
|
|
7056 |
- if (do_ioctl(kgem->fd, DRM_IOCTL_I915_GEM_SET_DOMAIN, &set_domain)) {
|
|
7057 |
- gem_close(kgem->fd, handle);
|
|
7058 |
- handle = 0;
|
|
7059 |
- }
|
|
7060 |
- }
|
|
7061 |
- if (handle == 0) {
|
|
7062 |
- DBG(("%s: import failed, errno=%d\n", __FUNCTION__, errno));
|
|
7063 |
- return NULL;
|
|
7064 |
- }
|
|
7088 |
+ DBG(("%s: import failed, errno=%d\n", __FUNCTION__, errno));
|
|
7089 |
+ return NULL;
|
|
7065 | 7090 |
}
|
7066 | 7091 |
|
7067 | 7092 |
bo = __kgem_bo_alloc(handle, (last_page - first_page) / PAGE_SIZE);
|
... | ... | @@ -191,6 +191,7 @@ struct kgem { |
191 | 191 |
uint32_t has_pinned_batches :1;
|
192 | 192 |
uint32_t has_caching :1;
|
193 | 193 |
uint32_t has_coherent_mmap_gtt :1;
|
194 |
+ uint32_t has_full_ppgtt :1;
|
|
194 | 195 |
uint32_t has_llc :1;
|
195 | 196 |
uint32_t has_wt :1;
|
196 | 197 |
uint32_t has_no_reloc :1;
|
... | ... | @@ -17696,7 +17696,7 @@ static void sna_accel_post_damage(struct sna *sna) |
17696 | 17696 |
#else
|
17697 | 17697 |
src = dirty->src;
|
17698 | 17698 |
#endif
|
17699 |
- dst = dirty->slave_dst->master_pixmap;
|
|
17699 |
+ dst = PixmapDirtyPrimary(dirty);
|
|
17700 | 17700 |
|
17701 | 17701 |
region.extents.x1 = dirty->x;
|
17702 | 17702 |
region.extents.x2 = dirty->x + dst->drawable.width;
|
... | ... | @@ -17723,7 +17723,7 @@ static void sna_accel_post_damage(struct sna *sna) |
17723 | 17723 |
dy += dirty->dst_y;
|
17724 | 17724 |
#endif
|
17725 | 17725 |
RegionTranslate(®ion, dx, dy);
|
17726 |
- DamageRegionAppend(&dirty->slave_dst->drawable, ®ion);
|
|
17726 |
+ DamageRegionAppend(&PixmapDirtyDst(dirty)->drawable, ®ion);
|
|
17727 | 17727 |
|
17728 | 17728 |
DBG(("%s: slave: ((%d, %d), (%d, %d))x%d\n", __FUNCTION__,
|
17729 | 17729 |
region.extents.x1, region.extents.y1,
|
... | ... | @@ -17800,7 +17800,7 @@ fallback: |
17800 | 17800 |
kgem_bo_sync__gtt(&sna->kgem, __sna_pixmap_get_bo(dst));
|
17801 | 17801 |
}
|
17802 | 17802 |
|
17803 |
- DamageRegionProcessPending(&dirty->slave_dst->drawable);
|
|
17803 |
+ DamageRegionProcessPending(&PixmapDirtyDst(dirty)->drawable);
|
|
17804 | 17804 |
skip:
|
17805 | 17805 |
RegionUninit(®ion);
|
17806 | 17806 |
DamageEmpty(dirty->damage);
|
... | ... | @@ -649,15 +649,15 @@ sna_composite(CARD8 op, |
649 | 649 |
CARD16 width, CARD16 height)
|
650 | 650 |
{
|
651 | 651 |
PixmapPtr pixmap = get_drawable_pixmap(dst->pDrawable);
|
652 |
- struct sna *sna = to_sna_from_pixmap(pixmap);
|
|
653 | 652 |
struct sna_pixmap *priv;
|
654 | 653 |
struct sna_composite_op tmp;
|
655 | 654 |
RegionRec region;
|
655 |
+ struct sna *sna;
|
|
656 | 656 |
int dx, dy;
|
657 | 657 |
|
658 | 658 |
DBG(("%s(pixmap=%ld, op=%d, src="" %d), mask=%ld+(%d, %d), dst=%ld+(%d, %d)+(%d, %d), size=(%d, %d)\n",
|
659 | 659 |
__FUNCTION__,
|
660 |
- pixmap->drawable.serialNumber, op,
|
|
660 |
+ pixmap ? pixmap->drawable.serialNumber : 0, op,
|
|
661 | 661 |
get_picture_id(src), src_x, src_y,
|
662 | 662 |
get_picture_id(mask), mask_x, mask_y,
|
663 | 663 |
get_picture_id(dst), dst_x, dst_y,
|
... | ... | @@ -672,8 +672,7 @@ sna_composite(CARD8 op, |
672 | 672 |
if (op == PictOpClear) {
|
673 | 673 |
DBG(("%s: discarding source and mask for clear\n", __FUNCTION__));
|
674 | 674 |
mask = NULL;
|
675 |
- if (sna->clear)
|
|
676 |
- src = sna->clear;
|
|
675 |
+ src = NULL;
|
|
677 | 676 |
}
|
678 | 677 |
|
679 | 678 |
if (!sna_compute_composite_region(®ion,
|
... | ... | @@ -694,11 +693,6 @@ sna_composite(CARD8 op, |
694 | 693 |
if (NO_COMPOSITE)
|
695 | 694 |
goto fallback;
|
696 | 695 |
|
697 |
- if (wedged(sna)) {
|
|
698 |
- DBG(("%s: fallback -- wedged\n", __FUNCTION__));
|
|
699 |
- goto fallback;
|
|
700 |
- }
|
|
701 |
- |
|
702 | 696 |
if (!can_render_to_picture(dst)) {
|
703 | 697 |
DBG(("%s: fallback due to unhandled picture\n", __FUNCTION__));
|
704 | 698 |
goto fallback;
|
... | ... | @@ -711,6 +705,15 @@ sna_composite(CARD8 op, |
711 | 705 |
goto fallback;
|
712 | 706 |
}
|
713 | 707 |
|
708 |
+ sna = to_sna_from_pixmap(pixmap);
|
|
709 |
+ if (wedged(sna)) {
|
|
710 |
+ DBG(("%s: fallback -- wedged\n", __FUNCTION__));
|
|
711 |
+ goto fallback;
|
|
712 |
+ }
|
|
713 |
+ |
|
714 |
+ if (op == PictOpClear)
|
|
715 |
+ src = sna->clear;
|
|
716 |
+ |
|
714 | 717 |
if (use_cpu(pixmap, priv, op, width, height) &&
|
715 | 718 |
!picture_is_gpu(sna, src, PREFER_GPU_RENDER) &&
|
716 | 719 |
!picture_is_gpu(sna, mask, PREFER_GPU_RENDER)) {
|
... | ... | @@ -459,7 +459,18 @@ static bool enable_tear_free(struct sna *sna) |
459 | 459 |
if (sna->flags & SNA_LINEAR_FB)
|
460 | 460 |
return false;
|
461 | 461 |
|
462 |
- /* Under certain conditions, we should enable TearFree by default,
|
|
462 |
+ /*
|
|
463 |
+ * On recent HW, where the display surfaces are in a seperate GTT
|
|
464 |
+ * to userspace, there is much less contention on global resources
|
|
465 |
+ * and also we can assume there is much more memory bandwidth
|
|
466 |
+ * available (i.e. gen8+). This HW should rarely be under such
|
|
467 |
+ * constaints as to need to disable TearFree, so enable by default.
|
|
468 |
+ */
|
|
469 |
+ if (sna->kgem.has_full_ppgtt)
|
|
470 |
+ return true;
|
|
471 |
+ |
|
472 |
+ /*
|
|
473 |
+ * Under certain conditions, we should enable TearFree by default,
|
|
463 | 474 |
* for example when the hardware requires pageflipping to run within
|
464 | 475 |
* its power/performance budget.
|
465 | 476 |
*/
|
... | ... | @@ -624,30 +624,30 @@ redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) |
624 | 624 |
RegionRec pixregion;
|
625 | 625 |
int was_blocked;
|
626 | 626 |
|
627 |
- PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap);
|
|
627 |
+ PixmapRegionInit(&pixregion, PixmapDirtyPrimary(dirty));
|
|
628 | 628 |
RegionTranslate(&pixregion, dirty->x, dirty->y);
|
629 | 629 |
RegionIntersect(&pixregion, &pixregion, DamageRegion(dirty->damage));
|
630 | 630 |
RegionTranslate(&pixregion, -dirty->x, -dirty->y);
|
631 | 631 |
was_blocked = RegionNil(&pixregion);
|
632 |
- DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion);
|
|
632 |
+ DamageRegionAppend(&PixmapDirtyDst(dirty)->drawable, &pixregion);
|
|
633 | 633 |
RegionUninit(&pixregion);
|
634 | 634 |
if (was_blocked)
|
635 | 635 |
return;
|
636 | 636 |
|
637 |
- PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap);
|
|
637 |
+ PixmapRegionInit(&pixregion, PixmapDirtyPrimary(dirty));
|
|
638 | 638 |
PixmapSyncDirtyHelper(dirty, &pixregion);
|
639 | 639 |
RegionUninit(&pixregion);
|
640 | 640 |
|
641 | 641 |
intel_flush(intel);
|
642 | 642 |
if (!intel->has_prime_vmap_flush) {
|
643 |
- drm_intel_bo *bo = intel_uxa_get_pixmap_bo(dirty->slave_dst->master_pixmap);
|
|
643 |
+ drm_intel_bo *bo = intel_uxa_get_pixmap_bo(PixmapDirtyPrimary(dirty));
|
|
644 | 644 |
was_blocked = xf86BlockSIGIO();
|
645 | 645 |
drm_intel_bo_map(bo, FALSE);
|
646 | 646 |
drm_intel_bo_unmap(bo);
|
647 | 647 |
xf86UnblockSIGIO(was_blocked);
|
648 | 648 |
}
|
649 | 649 |
|
650 |
- DamageRegionProcessPending(&dirty->slave_dst->drawable);
|
|
650 |
+ DamageRegionProcessPending(&PixmapDirtyDst(dirty)->drawable);
|
|
651 | 651 |
return;
|
652 | 652 |
}
|
653 | 653 |
|