- Update to release 22.0.0

* Fix link failure with gcc 10
  * Fix spelling/wording issues
  * gitlab CI: enable commit & merge request checks
  * gitlab CI: enable gitlab's builtin static analysis
  * radeon_glamor_wrappers.c: Convert from ISO-8859-1 to UTF-8
  * Don't crash X server if GPU acceleration is not available
  * ati: cleanup terminology to use primary/secondary
  * Don't set SourceValidate pointer to NULL
  * Handle NULL fb_ptr in pixmap_get_fb
  * Guard local variable priv only used with glamor
  * Guard local variable info only used with glamor
  * Add GitLab CI pipeline
  * Only include dri.h with older versions of xserver
  * Fix return value check of drmIoctl()
- supersedes the following patches
  * U_ati-cleanup-terminology-to-use-primary-secondary.patch
  * u_fno-common.patch
  * u_kscreen-rotation-fix.patch

OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-ati?expand=0&rev=96
This commit is contained in:
Stefan Dirsch 2023-04-25 19:18:50 +00:00 committed by Git OBS Bridge
parent 231a068baa
commit ac2cebf3c1
10 changed files with 513 additions and 414 deletions

View File

@ -1,369 +0,0 @@
From 8da3e4561ef82bb78c9a17b8cd8bf139b9cfd680 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Mon, 13 Jul 2020 09:11:28 +1000
Subject: [PATCH xf86-video-ati] ati: cleanup terminology to use
primary/secondary
The X server changed some API/ABIs here.
Based on amdgpu patch by Michel
---
man/radeon.man | 2 +-
src/compat-api.h | 6 ++++
src/drmmode_display.c | 4 +--
src/evergreen_state.h | 2 +-
src/r600_state.h | 2 +-
src/radeon.h | 10 +++---
src/radeon_exa.c | 2 +-
src/radeon_glamor.c | 2 +-
src/radeon_kms.c | 74 +++++++++++++++++++++----------------------
9 files changed, 55 insertions(+), 49 deletions(-)
diff --git a/man/radeon.man b/man/radeon.man
index dcebf537..247dcdb7 100644
--- a/man/radeon.man
+++ b/man/radeon.man
@@ -290,7 +290,7 @@ on. If this option is set, the default value of the property is 'on' or 'off'
accordingly. If this option isn't set, the default value of the property is
.B auto,
which means that TearFree is on for rotated outputs, outputs with RandR
-transforms applied and for RandR 1.4 slave outputs, otherwise off.
+transforms applied and for RandR 1.4 secondary outputs, otherwise off.
.TP
.BI "Option \*qAccelMethod\*q \*q" "string" \*q
Chooses between available acceleration architectures. Valid values are
diff --git a/src/compat-api.h b/src/compat-api.h
index f4e7524f..def6d3e4 100644
--- a/src/compat-api.h
+++ b/src/compat-api.h
@@ -34,4 +34,10 @@
#define BLOCKHANDLER_ARGS pScreen, pTimeout, pReadmask
#endif
+#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2)
+#define current_primary current_master
+#define primary_pixmap master_pixmap
+#define secondary_dst slave_dst
+#endif
+
#endif
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 72f96a0c..3099a729 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -720,7 +720,7 @@ drmmode_crtc_prime_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list,
ent) {
if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) {
- dirty->slave_dst =
+ dirty->secondary_dst =
drmmode_crtc->scanout[scanout_id].pixmap;
break;
}
@@ -1356,7 +1356,7 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
xorg_list_for_each_entry(dirty, &screen->pixmap_dirty_list, ent) {
if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) {
- PixmapStopDirtyTracking(dirty->src, dirty->slave_dst);
+ PixmapStopDirtyTracking(dirty->src, dirty->secondary_dst);
break;
}
}
diff --git a/src/evergreen_state.h b/src/evergreen_state.h
index 7e54e1c7..34ba87b6 100644
--- a/src/evergreen_state.h
+++ b/src/evergreen_state.h
@@ -350,7 +350,7 @@ extern void *RADEONEXACreatePixmap2(ScreenPtr pScreen, int width, int height,
int *new_pitch);
extern void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv);
extern Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix);
-extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **handle_p);
+extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr secondary, void **handle_p);
extern Bool RADEONEXASetSharedPixmapBacking(PixmapPtr ppix, void *handle);
#endif
diff --git a/src/r600_state.h b/src/r600_state.h
index 34345996..567c3ca2 100644
--- a/src/r600_state.h
+++ b/src/r600_state.h
@@ -321,6 +321,6 @@ extern void *RADEONEXACreatePixmap2(ScreenPtr pScreen, int width, int height,
int *new_pitch);
extern void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv);
extern Bool RADEONEXAPixmapIsOffscreen(PixmapPtr pPix);
-extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **handle_p);
+extern Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr secondary, void **handle_p);
extern Bool RADEONEXASetSharedPixmapBacking(PixmapPtr ppix, void *handle);
#endif
diff --git a/src/radeon.h b/src/radeon.h
index e4a2ba66..68d7756a 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -182,18 +182,18 @@ typedef enum {
static inline ScreenPtr
-radeon_master_screen(ScreenPtr screen)
+radeon_primary_screen(ScreenPtr screen)
{
- if (screen->current_master)
- return screen->current_master;
+ if (screen->current_primary)
+ return screen->current_primary;
return screen;
}
static inline ScreenPtr
-radeon_dirty_master(PixmapDirtyUpdatePtr dirty)
+radeon_dirty_primary(PixmapDirtyUpdatePtr dirty)
{
- return radeon_master_screen(dirty->slave_dst->drawable.pScreen);
+ return radeon_primary_screen(dirty->secondary_dst->drawable.pScreen);
}
static inline DrawablePtr
diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 268155ed..320ff992 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -282,7 +282,7 @@ void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv)
free(driverPriv);
}
-Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr slave, void **fd_handle)
+Bool RADEONEXASharePixmapBacking(PixmapPtr ppix, ScreenPtr seconndary, void **fd_handle)
{
struct radeon_exa_pixmap_priv *driver_priv = exaGetPixmapDriverPrivate(ppix);
diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
index f1098381..ccf99941 100644
--- a/src/radeon_glamor.c
+++ b/src/radeon_glamor.c
@@ -366,7 +366,7 @@ radeon_glamor_set_pixmap_bo(DrawablePtr drawable, PixmapPtr pixmap)
static Bool
-radeon_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr slave,
+radeon_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr secondary,
void **handle_p)
{
ScreenPtr screen = pixmap->drawable.pScreen;
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index b3db7c41..62962d61 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -559,8 +559,8 @@ dirty_region(PixmapDirtyUpdatePtr dirty)
if (dirty->rotation != RR_Rotate_0) {
dstregion = transform_region(damageregion,
&dirty->f_inverse,
- dirty->slave_dst->drawable.width,
- dirty->slave_dst->drawable.height);
+ dirty->secondary_dst->drawable.width,
+ dirty->secondary_dst->drawable.height);
} else
#endif
{
@@ -568,7 +568,7 @@ dirty_region(PixmapDirtyUpdatePtr dirty)
dstregion = RegionDuplicate(damageregion);
RegionTranslate(dstregion, -dirty->x, -dirty->y);
- PixmapRegionInit(&pixregion, dirty->slave_dst);
+ PixmapRegionInit(&pixregion, dirty->secondary_dst);
RegionIntersect(dstregion, dstregion, &pixregion);
RegionUninit(&pixregion);
}
@@ -585,8 +585,8 @@ redisplay_dirty(PixmapDirtyUpdatePtr dirty, RegionPtr region)
if (RegionNil(region))
goto out;
- if (dirty->slave_dst->master_pixmap)
- DamageRegionAppend(&dirty->slave_dst->drawable, region);
+ if (dirty->secondary_dst->primary_pixmap)
+ DamageRegionAppend(&dirty->secondary_dst->drawable, region);
#ifdef HAS_DIRTYTRACKING_ROTATION
PixmapSyncDirtyHelper(dirty);
@@ -595,8 +595,8 @@ redisplay_dirty(PixmapDirtyUpdatePtr dirty, RegionPtr region)
#endif
radeon_cs_flush_indirect(src_scrn);
- if (dirty->slave_dst->master_pixmap)
- DamageRegionProcessPending(&dirty->slave_dst->drawable);
+ if (dirty->secondary_dst->primary_pixmap)
+ DamageRegionProcessPending(&dirty->secondary_dst->drawable);
out:
DamageEmpty(dirty->damage);
@@ -613,12 +613,12 @@ radeon_prime_scanout_update_abort(xf86CrtcPtr crtc, void *event_data)
void
radeon_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr master_screen = radeon_dirty_master(dirty);
+ ScreenPtr primary_screen = radeon_dirty_primary(dirty);
PixmapDirtyUpdatePtr ent;
RegionPtr region;
- xorg_list_for_each_entry(ent, &master_screen->pixmap_dirty_list, ent) {
- if (!radeon_dirty_src_equals(dirty, ent->slave_dst))
+ xorg_list_for_each_entry(ent, &primary_screen->pixmap_dirty_list, ent) {
+ if (!radeon_dirty_src_equals(dirty, ent->secondary_dst))
continue;
region = dirty_region(ent);
@@ -631,45 +631,45 @@ radeon_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty)
#if HAS_SYNC_SHARED_PIXMAP
static Bool
-master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
+primary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr master_screen = radeon_dirty_master(dirty);
+ ScreenPtr primary_screen = radeon_dirty_primary(dirty);
- return !!master_screen->SyncSharedPixmap;
+ return !!primary_screen->SyncSharedPixmap;
}
static Bool
-slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
+secondary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr slave_screen = dirty->slave_dst->drawable.pScreen;
+ ScreenPtr secondary_screen = dirty->secondary_dst->drawable.pScreen;
- return !!slave_screen->SyncSharedPixmap;
+ return !!secondary_screen->SyncSharedPixmap;
}
static void
call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr master_screen = radeon_dirty_master(dirty);
+ ScreenPtr primary_screen = radeon_dirty_primary(dirty);
- master_screen->SyncSharedPixmap(dirty);
+ primary_screen->SyncSharedPixmap(dirty);
}
#else /* !HAS_SYNC_SHARED_PIXMAP */
static Bool
-master_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
+primary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
{
- ScrnInfoPtr master_scrn = xf86ScreenToScrn(radeon_dirty_master(dirty));
+ ScrnInfoPtr primary_scrn = xf86ScreenToScrn(radeon_dirty_primary(dirty));
- return master_scrn->driverName == scrn->driverName;
+ return primary_scrn->driverName == scrn->driverName;
}
static Bool
-slave_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
+secondary_has_sync_shared_pixmap(ScrnInfoPtr scrn, PixmapDirtyUpdatePtr dirty)
{
- ScrnInfoPtr slave_scrn = xf86ScreenToScrn(dirty->slave_dst->drawable.pScreen);
+ ScrnInfoPtr secondary_scrn = xf86ScreenToScrn(dirty->secondary_dst->drawable.pScreen);
- return slave_scrn->driverName == scrn->driverName;
+ return secondary_scrn->driverName == scrn->driverName;
}
static void
@@ -684,12 +684,12 @@ call_sync_shared_pixmap(PixmapDirtyUpdatePtr dirty)
static xf86CrtcPtr
radeon_prime_dirty_to_crtc(PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr screen = dirty->slave_dst->drawable.pScreen;
+ ScreenPtr screen = dirty->secondary_dst->drawable.pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
int c;
- /* Find the CRTC which is scanning out from this slave pixmap */
+ /* Find the CRTC which is scanning out from this secondary pixmap */
for (c = 0; c < xf86_config->num_crtc; c++) {
xf86CrtcPtr xf86_crtc = xf86_config->crtc[c];
drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
@@ -714,7 +714,7 @@ radeon_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id)
if (radeon_dirty_src_equals(dirty, drmmode_crtc->prime_scanout_pixmap)) {
RegionPtr region;
- if (master_has_sync_shared_pixmap(scrn, dirty))
+ if (primary_has_sync_shared_pixmap(scrn, dirty))
call_sync_shared_pixmap(dirty);
region = dirty_region(dirty);
@@ -727,7 +727,7 @@ radeon_prime_scanout_do_update(xf86CrtcPtr crtc, unsigned scanout_id)
radeon_cs_flush_indirect(scrn);
RegionCopy(&drmmode_crtc->scanout_last_region, region);
RegionTranslate(region, -crtc->x, -crtc->y);
- dirty->slave_dst = drmmode_crtc->scanout[scanout_id].pixmap;
+ dirty->secondary_dst = drmmode_crtc->scanout[scanout_id].pixmap;
}
redisplay_dirty(dirty, region);
@@ -754,7 +754,7 @@ radeon_prime_scanout_update_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t u
static void
radeon_prime_scanout_update(PixmapDirtyUpdatePtr dirty)
{
- ScreenPtr screen = dirty->slave_dst->drawable.pScreen;
+ ScreenPtr screen = dirty->secondary_dst->drawable.pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
xf86CrtcPtr xf86_crtc = radeon_prime_dirty_to_crtc(dirty);
@@ -818,7 +818,7 @@ radeon_prime_scanout_update(PixmapDirtyUpdatePtr dirty)
static void
radeon_prime_scanout_flip(PixmapDirtyUpdatePtr ent)
{
- ScreenPtr screen = ent->slave_dst->drawable.pScreen;
+ ScreenPtr screen = ent->secondary_dst->drawable.pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
xf86CrtcPtr crtc = radeon_prime_dirty_to_crtc(ent);
@@ -893,11 +893,11 @@ radeon_dirty_update(ScrnInfoPtr scrn)
if (screen->isGPU) {
PixmapDirtyUpdatePtr region_ent = ent;
- if (master_has_sync_shared_pixmap(scrn, ent)) {
- ScreenPtr master_screen = radeon_dirty_master(ent);
+ if (primary_has_sync_shared_pixmap(scrn, ent)) {
+ ScreenPtr primary_screen = radeon_dirty_primary(ent);
- xorg_list_for_each_entry(region_ent, &master_screen->pixmap_dirty_list, ent) {
- if (radeon_dirty_src_equals(ent, region_ent->slave_dst))
+ xorg_list_for_each_entry(region_ent, &primary_screen->pixmap_dirty_list, ent) {
+ if (radeon_dirty_src_equals(ent, region_ent->secondary_dst))
break;
}
}
@@ -921,7 +921,7 @@ radeon_dirty_update(ScrnInfoPtr scrn)
RegionDestroy(region);
} else {
- if (slave_has_sync_shared_pixmap(scrn, ent))
+ if (secondary_has_sync_shared_pixmap(scrn, ent))
continue;
region = dirty_region(ent);
@@ -1216,7 +1216,7 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
(*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
pScreen->BlockHandler = RADEONBlockHandler_KMS;
- if (!xf86ScreenToScrn(radeon_master_screen(pScreen))->vtSema)
+ if (!xf86ScreenToScrn(radeon_primary_screen(pScreen))->vtSema)
return;
if (!pScreen->isGPU)
@@ -2584,7 +2584,7 @@ CARD32 cleanup_black_fb(OsTimerPtr timer, CARD32 now, pointer data)
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
int c;
- if (xf86ScreenToScrn(radeon_master_screen(screen))->vtSema)
+ if (xf86ScreenToScrn(radeon_primary_screen(screen))->vtSema)
return 0;
/* Unreference the all-black FB created by RADEONLeaveVT_KMS. After
--
2.26.2

View File

@ -1,11 +0,0 @@
--- xf86-video-ati-19.1.0.old/src/drmmode_display.h 2020-01-09 23:19:29.783677517 +0000
+++ xf86-video-ati-19.1.0/src/drmmode_display.h 2020-01-09 23:20:10.268450223 +0000
@@ -262,7 +262,7 @@ Bool drmmode_wait_vblank(xf86CrtcPtr crt
uint64_t *ust, uint32_t *result_seq);
-miPointerSpriteFuncRec drmmode_sprite_funcs;
+extern miPointerSpriteFuncRec drmmode_sprite_funcs;
#endif

View File

@ -1,24 +0,0 @@
diff -Pdpru xf86-video-ati-19.1.0.orig/src/radeon_kms.c xf86-video-ati-19.1.0/src/radeon_kms.c
--- xf86-video-ati-19.1.0.orig/src/radeon_kms.c 2019-10-15 19:16:29.000000000 +0300
+++ xf86-video-ati-19.1.0/src/radeon_kms.c 2022-02-03 08:50:51.890820918 +0300
@@ -931,6 +931,11 @@ radeon_dirty_update(ScrnInfoPtr scrn)
}
}
+static void
+radeonSourceValidate(DrawablePtr draw, int x, int y, int w, int h,
+ unsigned int subWindowMode)
+{
+}
Bool
radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
@@ -993,7 +998,7 @@ radeon_scanout_do_update(xf86CrtcPtr xf8
SetPicturePictFilter(src, xf86_crtc->filter, xf86_crtc->params,
xf86_crtc->nparams);
- pScreen->SourceValidate = NULL;
+ pScreen->SourceValidate = radeonSourceValidate;
CompositePicture(PictOpSrc,
src, NULL, dst,
extents.x1, extents.y1, 0, 0, extents.x1,

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:659f5a1629eea5f5334d9b39b18e6807a63aa1efa33c1236d9cc53acbb223c49
size 904558

Binary file not shown.

BIN
xf86-video-ati-22.0.0.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

View File

@ -1,3 +1,26 @@
-------------------------------------------------------------------
Tue Apr 25 18:57:34 UTC 2023 - Stefan Dirsch <sndirsch@suse.com>
- Update to release 22.0.0
* Fix link failure with gcc 10
* Fix spelling/wording issues
* gitlab CI: enable commit & merge request checks
* gitlab CI: enable gitlab's builtin static analysis
* radeon_glamor_wrappers.c: Convert from ISO-8859-1 to UTF-8
* Don't crash X server if GPU acceleration is not available
* ati: cleanup terminology to use primary/secondary
* Don't set SourceValidate pointer to NULL
* Handle NULL fb_ptr in pixmap_get_fb
* Guard local variable priv only used with glamor
* Guard local variable info only used with glamor
* Add GitLab CI pipeline
* Only include dri.h with older versions of xserver
* Fix return value check of drmIoctl()
- supersedes the following patches
* U_ati-cleanup-terminology-to-use-primary-secondary.patch
* u_fno-common.patch
* u_kscreen-rotation-fix.patch
-------------------------------------------------------------------
Sat May 14 20:57:24 UTC 2022 - Stefan Dirsch <sndirsch@suse.com>

View File

@ -152,3 +152,486 @@ EFqBr45q27IAB2VHUEcAAQGWxwCfZR+TZ3r/engK7LP81fsqkvZ1DxYAn1QPkkRq
SF+h953w9Ko4zuM47csI
=kqV+
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: 3BB6 39E5 6F86 1FA2 E865 0569 0FDD 682D 974C A72A
Comment: Matt Turner <mattst88@freedesktop.org>
Comment: Matt Turner <mattst88@gentoo.org>
Comment: Matt Turner <mattst88@gmail.com>
Comment: Matt Turner <msturner@google.com>
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
BwIDBNQE4USOt6mOaT7Om2ini9q3W2bAMnAnKFef4fnj/PpIXn3pxtfFetkyMCbO
7anzbtLKOGSorcuVNK6Dj9OCIE/CwZYEKAEIAEAWIQQ7tjnlb4YfouhlBWkP3Wgt
l0ynKgUCYCsf7iIdAVN1cGVyc2VkZWQgYnkgMHhFRDJFRDE5Rjg1QjM2ODJDAAoJ
EA/daC2XTKcq5D8QAIanccXkEdQ/ULOigVg99hnZ28kiHWCTWXfHqhfOc2gvRuWB
Xtu5UR/HfA7BtM2Q4PW2Liy5uyfOiavttUiI7g9YR8Sw3dHDHpRtlMLVutzNevfi
ewJf2WjwxRA5qarpBYvE7yZFWLm3mwJKChHR1qIR52yB3zS3uZuiZ0NFGN/ls8kJ
pYkVJhM5Ov35GoLRyKhffDJlTY77+4G+vWCoSW1SlMv3XkZ5Tsv64DizrnmkPonj
aYzgenD6tWNDyZJVxHSD9+dCMaMQ7KF7gGIjwnBxqr7PRbS/CXKWuALivj3d9G9I
ElIjiZ80skJ213uniVETpRFwolvuY+xa3gxYemyjOZwIBrDOj4j6wCT9RcoBuauV
yobaCTspxXVaCh8+bygXxva01KOxreoVRxmYRWOGlyP+JSLBy0qNg7AlQfqiWtc8
bQj7837/bHcx73iIX1JDisdqPj49aiqmKoo/mcBFdv76zNlZV5I+XNkpJAEAfhFM
XJg+tW2hxFcatVtZ7tzQ+lacwRXPF8rWR+SCz6+33yNg2YJrJ6xXc39Ll2intqgH
tmp94ZcCHb2ZWSSzN0SvgsUBz7hUwjyBLjANh9DUp3eNAgMACa4CTEIOiRrRccrZ
P0nueV9zsjzqZdYsc+zGCoJaGYTKG/3rLD560L2K1nBwvxifOw5zKqNqV0xnwsJU
BBgBCAAmFiEEO7Y55W+GH6LoZQVpD91oLZdMpyoFAmApvpsCGwIFCQOH/WwA4gkQ
D91oLZdMpyrAFiAEGRMIAH0WIQRVO5ofcovqVfhjXwf0XCQx74taZgUCYCm+m18U
gAAAAAAuAChpc3N1ZXItZnByQG5vdGF0aW9ucy5vcGVucGdwLmZpZnRoaG9yc2Vt
YW4ubmV0NTUzQjlBMUY3MjhCRUE1NUY4NjM1RjA3RjQ1QzI0MzFFRjhCNUE2NgAK
CRD0XCQx74taZn2qAP4sOg0ceNS23ns2fkxE2foeGT5zHnD0iq5BbBAr+JNw7AEA
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
OPVJxUDz/Xvm6CWBhR9rhQdLTxRlyMWofCQ82Q==
=Xii2
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,7 +1,7 @@
#
# spec file for package xf86-video-ati
#
# Copyright (c) 2022 SUSE LLC
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -18,18 +18,15 @@
%define xserver_glamor 1
Name: xf86-video-ati
Version: 19.1.0
Version: 22.0.0
Release: 0
Summary: ATI video driver for the Xorg X server
License: MIT
Group: System/X11/Servers/XF86_4
URL: https://xorg.freedesktop.org/
Source0: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.bz2
Source1: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.bz2.sig
Source0: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.xz
Source1: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.xz.sig
Source2: %{name}.keyring
Patch0: u_fno-common.patch
Patch1: U_ati-cleanup-terminology-to-use-primary-secondary.patch
Patch2: u_kscreen-rotation-fix.patch
BuildRequires: autoconf >= 2.60
BuildRequires: automake
BuildRequires: libtool