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

[Git][xorg-team/driver/xserver-xorg-video-intel][debian-unstable] 15 commits: sna/gen7: Prefer blitter for plain copies on Haswell



Title: GitLab

Timo Aaltonen pushed to branch debian-unstable at X Strike Force / driver / xserver-xorg-video-intel

Commits:

13 changed files:

Changes:

  • debian/README.source
    ... ... @@ -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
     
    

  • debian/changelog
    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 ]
    

  • debian/control
    ... ... @@ -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/
    

  • debian/rules
    ... ... @@ -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
    

  • debian/watch
    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

  • src/compat-api.h
    ... ... @@ -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

  • src/sna/gen7_render.c
    ... ... @@ -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
    

  • src/sna/kgem.c
    ... ... @@ -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);
    

  • src/sna/kgem.h
    ... ... @@ -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;
    

  • src/sna/sna_accel.c
    ... ... @@ -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(&region, dx, dy);
    
    17726
    -		DamageRegionAppend(&dirty->slave_dst->drawable, &region);
    
    17726
    +		DamageRegionAppend(&PixmapDirtyDst(dirty)->drawable, &region);
    
    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(&region);
    
    17806 17806
     		DamageEmpty(dirty->damage);
    

  • src/sna/sna_composite.c
    ... ... @@ -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(&region,
    
    ... ... @@ -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)) {
    

  • src/sna/sna_driver.c
    ... ... @@ -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
     	 */
    

  • src/uxa/intel_driver.c
    ... ... @@ -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
     
    


  • Reply to: