Update to xf86-video-amdgpu 23.0.0. Tested by op@ and jsg@
parent
8af6982775
commit
f20d5d564b
|
@ -1,3 +1,170 @@
|
|||
commit 7025aefcdf9673665588cf291c5d71beb39cce89
|
||||
Author: Shashank Sharma <shashank.sharma@amd.com>
|
||||
Date: Wed Feb 22 18:00:23 2023 +0100
|
||||
|
||||
Bump version for the 23.0.0 release
|
||||
|
||||
This release includes some bug fixes.
|
||||
|
||||
Signed-off-by: Shashank Sharma <shashank.sharma@amd.com>
|
||||
|
||||
commit 6ee320917093ad0f7d68e516d3224d3c04ca13ee
|
||||
Author: Shashank Sharma <shashank.sharma@amd.com>
|
||||
Date: Mon Nov 28 13:08:36 2022 +0100
|
||||
|
||||
config: Add hotplug driver name
|
||||
|
||||
This patch adds the PCI-hotplug handler driver name in the
|
||||
DDX config file with respect to Xorg commit:82bf391c
|
||||
|
||||
Cc: Alexander Deucher <alexander.deucher@amd.com>
|
||||
Signed-off-by: Shashank Sharma <shashank.sharma@amd.com>
|
||||
|
||||
commit 2ec854d48e0e44fc60c3955663f700cbefea3553
|
||||
Author: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Date: Fri Nov 11 02:18:07 2022 +0100
|
||||
|
||||
Fix primary output handling in amdgpu_crtc_covering_box().
|
||||
|
||||
Commit e39a3ee07c9dea73b0452b71b1ef633b6cd6f389
|
||||
tries to reintroduce the RandR primary output as a tie breaker
|
||||
in amdgpu_crtc_covering_box(), but that function wrongly
|
||||
assigns a void* devPrivate, which is actually a xf86CrtcPtr,
|
||||
to the RRCrtcPtr primary_crtc, a pointer target type mismatch!
|
||||
|
||||
This causes a later pointer comparison of primary_crtc with
|
||||
RRCrtcPtr crtc to always fail, so that the user selected
|
||||
primary output can not ever successfully act as a tie-breaker
|
||||
when multiple candidate crtcs cover the same box area,
|
||||
defeating the whole purpose of that commit! Not sure how
|
||||
this failure could have ever evaded any basic testing.
|
||||
|
||||
Fix this trivially by assigning the right variable.
|
||||
|
||||
Successfully tested on a multi-display setup, verifying
|
||||
that the primary output now works as tie breaker as
|
||||
intended.
|
||||
|
||||
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
|
||||
Fixes: e39a3ee07c9d ("Prefer crtc of primary output for synchronization when screen has to crtcs with the same coverage")
|
||||
|
||||
commit 9c959fac3af28d191105f63236096ad456dca614
|
||||
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
|
||||
Date: Thu Sep 29 16:42:09 2022 +0200
|
||||
|
||||
Use DRM_CAP_CURSOR_WIDTH/HEIGHT if possible
|
||||
|
||||
There's no need to hardcode the cursor size if the kernel can
|
||||
report the value it wants.
|
||||
|
||||
commit 4e011b91fa3ef58b85327d3429889efd934b3531
|
||||
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Date: Tue Aug 2 15:03:19 2022 -0700
|
||||
|
||||
gitlab CI: enable gitlab's builtin static analysis
|
||||
|
||||
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
|
||||
commit dc81177ef342bf8c2aa5a6fd6687c7a09b4f9709
|
||||
Author: tiancyin <tianci.yin@amd.com>
|
||||
Date: Wed Aug 10 16:46:15 2022 +0800
|
||||
|
||||
Fix screen corruption on secondary GPU
|
||||
|
||||
[why]
|
||||
On RHEL9+, xorg-server.pc shows that the Xorg no longer depends on dri,
|
||||
and dri.pc provides "/opt/amdgpu/include" path for pkg-config, this
|
||||
cause pkg-config no longer output "-I/opt/amdgpu/include", consequently
|
||||
the configure can't find gbm.h and HAVE_GBM_BO_USE_LINEAR is not
|
||||
declared, that cause the corruption.
|
||||
|
||||
[how]
|
||||
Since the gbm.pc also provides the "/opt/amdgpu/include" path, in module
|
||||
dependence checking, GBM_CFLAGS get this path, so just explicitly add
|
||||
GBM_CFLAGS into CPPFLAGS can fix this issue.
|
||||
|
||||
Signed-off-by: tiancyin <tianci.yin@amd.com>
|
||||
|
||||
commit a3a012b649eb9b3066abefe163a72854514792fa
|
||||
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
|
||||
Date: Mon Aug 8 10:49:11 2022 +0800
|
||||
|
||||
Initialize present extension for GPU screen
|
||||
|
||||
Some laptops have the external outputs routed to dGPU, when the external
|
||||
output over dGPU is the only display in reverse prime mode, we need
|
||||
present extension so fake CRTC won't be used.
|
||||
|
||||
commit f3f57a58342c286808220bdbe6dc6bb7098763b9
|
||||
Author: Lukasz Spintzyk <lukasz.spintzyk@displaylink.com>
|
||||
Date: Fri Jun 11 14:54:35 2021 +0200
|
||||
|
||||
Do not consider disabled crtc anymore when looking for xf86crtc covering drawable.
|
||||
|
||||
This is commit is removing obsolete switch done in
|
||||
|
||||
xf86-video-ati at sha 61d0aec40e2521488c2fe43e7a6823e5c87d94d7: video: add option to include disabled CRTCs in best CRTC search
|
||||
This is not required anymore as with commit done in
|
||||
xorg-server at sha 5c5c1b77982a9af7279a90bc3c2be48adaa9c778: present: Add Present extension
|
||||
That in case of lack of crtc is using fake_crtc with render 1Hz frequency
|
||||
|
||||
When consider_disabled is removed then amdgpu_pick_best_crtc is doing the same what rr_crtc_covering_box is doing
|
||||
so it can be reimplemented to reuse that function.
|
||||
|
||||
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
|
||||
Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
|
||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
|
||||
commit e39a3ee07c9dea73b0452b71b1ef633b6cd6f389
|
||||
Author: Lukasz Spintzyk <lukasz.spintzyk@displaylink.com>
|
||||
Date: Mon Jun 21 11:41:40 2021 +0200
|
||||
|
||||
Prefer crtc of primary output for synchronization when screen has to crtcs with the same coverage
|
||||
|
||||
This is adjusting randr_crtc_covering_drawable to cover scenario fixed in
|
||||
9151f3b1c2ebcc34e63195888ba696f2183ba5e2
|
||||
|
||||
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
|
||||
Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
|
||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
|
||||
commit 92fb43b8e96bbda77e03b7313ccbba75a304a1b1
|
||||
Author: Lukasz Spintzyk <lukasz.spintzyk@displaylink.com>
|
||||
Date: Fri Jun 11 08:52:58 2021 +0200
|
||||
|
||||
Use randr_crtc_covering_drawable used in modesetting
|
||||
|
||||
Use implementation from modesetting driver that is fixing issue:
|
||||
https://gitlab.freedesktop.org/xorg/xserver/-/issues/1028
|
||||
|
||||
Instead of returning primary crtc as fallback we can now find and return crtc that belongs to secondary outputs.
|
||||
|
||||
v2:
|
||||
restore original naming scheme for amdgpu_crtc_is_enabled, amdgpu_box_intersect, amdgpu_box_area functions
|
||||
|
||||
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
|
||||
Signed-off-by: Emilia Majewska <emilia.majewska@synaptics.com>
|
||||
Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
|
||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
|
||||
commit 57740ae2357ca7b973f78be31327365aaa60ed41
|
||||
Author: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
|
||||
Date: Tue Jun 22 07:36:42 2021 +0200
|
||||
|
||||
amdgpu: fixup driver for new X server ABI
|
||||
|
||||
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
|
||||
Signed-off-by: Shashank Sharma <contactshashanksharma@gmail.com>
|
||||
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
|
||||
commit 89b3eb9fffe2ead4257eee6d65accbac135aedc9
|
||||
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
Date: Sat Feb 19 12:07:46 2022 -0800
|
||||
|
||||
Update URLs to reflect gitlab migration
|
||||
|
||||
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
|
||||
|
||||
commit 533bd30ceaa373788b3d0bfd4d486f0f1c624d0c
|
||||
Author: Shashank Sharma <shashank.sharma@amd.com>
|
||||
Date: Tue Feb 22 16:25:01 2022 +0100
|
||||
|
|
|
@ -4,15 +4,11 @@ xf86-video-amdgpu - Xorg driver for AMD Radeon GPUs using the amdgpu kernel driv
|
|||
Questions regarding this software should be directed at the
|
||||
[amd-gfx mailing list](https://lists.freedesktop.org/mailman/listinfo/amd-gfx).
|
||||
|
||||
Please
|
||||
[submit bug reports](https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu)
|
||||
to the Xorg bugzilla.
|
||||
|
||||
The
|
||||
[main development code repository](https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu)
|
||||
can be found at FreeDesktop Gitlab.
|
||||
|
||||
Please use merge requests for patch submission.
|
||||
Please submit bug reports there and use merge requests for patch submission.
|
||||
|
||||
See the X.org wiki for
|
||||
[further patch submission instructions](https://www.x.org/wiki/Development/Documentation/SubmittingPatches)
|
||||
|
|
|
@ -2,4 +2,5 @@ Section "OutputClass"
|
|||
Identifier "AMDgpu"
|
||||
MatchDriver "amdgpu"
|
||||
Driver "amdgpu"
|
||||
EndSection
|
||||
Option "HotplugDriver" "amdgpu"
|
||||
EndSection
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for xf86-video-amdgpu 22.0.0.
|
||||
# Generated by GNU Autoconf 2.69 for xf86-video-amdgpu 23.0.0.
|
||||
#
|
||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu>.
|
||||
# Report bugs to <https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues>.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
|
||||
|
@ -275,7 +275,7 @@ fi
|
|||
$as_echo "$0: be upgraded to zsh 4.3.4 or later."
|
||||
else
|
||||
$as_echo "$0: Please tell bug-autoconf@gnu.org and
|
||||
$0: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu
|
||||
$0: https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues
|
||||
$0: about your system, including any error possibly output
|
||||
$0: before this message. Then install a modern shell, or
|
||||
$0: manually run the script under such a shell if you do
|
||||
|
@ -591,9 +591,9 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='xf86-video-amdgpu'
|
||||
PACKAGE_TARNAME='xf86-video-amdgpu'
|
||||
PACKAGE_VERSION='22.0.0'
|
||||
PACKAGE_STRING='xf86-video-amdgpu 22.0.0'
|
||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu'
|
||||
PACKAGE_VERSION='23.0.0'
|
||||
PACKAGE_STRING='xf86-video-amdgpu 23.0.0'
|
||||
PACKAGE_BUGREPORT='https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues'
|
||||
PACKAGE_URL=''
|
||||
|
||||
ac_unique_file="Makefile.am"
|
||||
|
@ -1405,7 +1405,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures xf86-video-amdgpu 22.0.0 to adapt to many kinds of systems.
|
||||
\`configure' configures xf86-video-amdgpu 23.0.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1477,7 +1477,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of xf86-video-amdgpu 22.0.0:";;
|
||||
short | recursive ) echo "Configuration of xf86-video-amdgpu 23.0.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1571,7 +1571,7 @@ Some influential environment variables:
|
|||
Use these variables to override the choices made by `configure' or to help
|
||||
it to find libraries and programs with nonstandard names/locations.
|
||||
|
||||
Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu>.
|
||||
Report bugs to <https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues>.
|
||||
_ACEOF
|
||||
ac_status=$?
|
||||
fi
|
||||
|
@ -1634,7 +1634,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
xf86-video-amdgpu configure 22.0.0
|
||||
xf86-video-amdgpu configure 23.0.0
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2025,9 +2025,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
|
|||
$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
|
||||
$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
|
||||
( $as_echo "## ---------------------------------------------------------------------------------------------- ##
|
||||
## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu ##
|
||||
## ---------------------------------------------------------------------------------------------- ##"
|
||||
( $as_echo "## ------------------------------------------------------------------------------------ ##
|
||||
## Report this to https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues ##
|
||||
## ------------------------------------------------------------------------------------ ##"
|
||||
) | sed "s/^/$as_me: WARNING: /" >&2
|
||||
;;
|
||||
esac
|
||||
|
@ -2049,7 +2049,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by xf86-video-amdgpu $as_me 22.0.0, which was
|
||||
It was created by xf86-video-amdgpu $as_me 23.0.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2881,7 +2881,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='xf86-video-amdgpu'
|
||||
VERSION='22.0.0'
|
||||
VERSION='23.0.0'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -18882,7 +18882,7 @@ fi
|
|||
|
||||
|
||||
SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $XORG_CFLAGS $GBM_CFLAGS"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include GLAMOR support" >&5
|
||||
$as_echo_n "checking whether to include GLAMOR support... " >&6; }
|
||||
|
@ -20024,7 +20024,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by xf86-video-amdgpu $as_me 22.0.0, which was
|
||||
This file was extended by xf86-video-amdgpu $as_me 23.0.0, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -20084,13 +20084,13 @@ $config_headers
|
|||
Configuration commands:
|
||||
$config_commands
|
||||
|
||||
Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu>."
|
||||
Report bugs to <https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues>."
|
||||
|
||||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
xf86-video-amdgpu config.status 22.0.0
|
||||
xf86-video-amdgpu config.status 23.0.0
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
# Initialize Autoconf
|
||||
AC_PREREQ([2.60])
|
||||
AC_INIT([xf86-video-amdgpu],
|
||||
[22.0.0],
|
||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu],
|
||||
[23.0.0],
|
||||
[https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues],
|
||||
[xf86-video-amdgpu])
|
||||
|
||||
AC_CONFIG_SRCDIR([Makefile.am])
|
||||
|
@ -110,7 +110,7 @@ fi
|
|||
AM_CONDITIONAL(LIBUDEV, test x$LIBUDEV = xyes)
|
||||
|
||||
SAVE_CPPFLAGS="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $XORG_CFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $XORG_CFLAGS $GBM_CFLAGS"
|
||||
|
||||
AC_MSG_CHECKING([whether to include GLAMOR support])
|
||||
AC_ARG_ENABLE(glamor,
|
||||
|
|
|
@ -140,7 +140,7 @@ https://www.x.org/wiki/radeon
|
|||
.IP " 2." 4
|
||||
Overview about amdgpu development code:
|
||||
.RS 4
|
||||
https://cgit.freedesktop.org/xorg/driver/xf86-video-amdgpu/
|
||||
https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu
|
||||
.RE
|
||||
.IP " 3." 4
|
||||
Mailing list:
|
||||
|
@ -153,14 +153,14 @@ IRC channel:
|
|||
#radeon on irc.freenode.net
|
||||
.RE
|
||||
.IP " 5." 4
|
||||
Query the bugtracker for amdgpu bugs:
|
||||
The bugtracker for amdgpu bugs:
|
||||
.RS 4
|
||||
https://bugs.freedesktop.org/query.cgi?product=xorg&component=Driver/AMDgpu
|
||||
https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues
|
||||
.RE
|
||||
.IP " 6." 4
|
||||
Submit bugs & patches:
|
||||
Submit merge requests:
|
||||
.RS 4
|
||||
https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu
|
||||
https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/merge_requests
|
||||
.RE
|
||||
|
||||
.SH AUTHORS
|
||||
|
|
|
@ -417,8 +417,7 @@ static
|
|||
xf86CrtcPtr amdgpu_dri2_drawable_crtc(DrawablePtr pDraw)
|
||||
{
|
||||
ScreenPtr pScreen = pDraw->pScreen;
|
||||
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
|
||||
xf86CrtcPtr crtc = amdgpu_pick_best_crtc(pScrn, TRUE,
|
||||
xf86CrtcPtr crtc = amdgpu_pick_best_crtc(pScreen,
|
||||
pDraw->x, pDraw->x + pDraw->width,
|
||||
pDraw->y, pDraw->y + pDraw->height);
|
||||
|
||||
|
|
|
@ -372,9 +372,9 @@ extern void amdgpu_sync_close(ScreenPtr screen);
|
|||
/* amdgpu_video.c */
|
||||
extern void AMDGPUInitVideo(ScreenPtr pScreen);
|
||||
extern void AMDGPUResetVideo(ScrnInfoPtr pScrn);
|
||||
extern xf86CrtcPtr amdgpu_pick_best_crtc(ScrnInfoPtr pScrn,
|
||||
Bool consider_disabled,
|
||||
extern xf86CrtcPtr amdgpu_pick_best_crtc(ScreenPtr pScreen,
|
||||
int x1, int x2, int y1, int y2);
|
||||
extern RRCrtcPtr amdgpu_randr_crtc_covering_drawable(DrawablePtr pDraw);
|
||||
|
||||
extern AMDGPUEntPtr AMDGPUEntPriv(ScrnInfoPtr pScrn);
|
||||
|
||||
|
|
|
@ -1503,6 +1503,25 @@ static Bool AMDGPUCreateWindow_oneshot(WindowPtr pWin)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void amdgpu_determine_cursor_size(int fd, AMDGPUInfoPtr info)
|
||||
{
|
||||
uint64_t value;
|
||||
|
||||
if (drmGetCap(fd, DRM_CAP_CURSOR_WIDTH, &value) == 0)
|
||||
info->cursor_w = value;
|
||||
else if (info->family < AMDGPU_FAMILY_CI)
|
||||
info->cursor_w = CURSOR_WIDTH;
|
||||
else
|
||||
info->cursor_w = CURSOR_WIDTH_CIK;
|
||||
|
||||
if (drmGetCap(fd, DRM_CAP_CURSOR_HEIGHT, &value) == 0)
|
||||
info->cursor_h = value;
|
||||
else if (info->family < AMDGPU_FAMILY_CI)
|
||||
info->cursor_h = CURSOR_HEIGHT;
|
||||
else
|
||||
info->cursor_h = CURSOR_HEIGHT_CIK;
|
||||
}
|
||||
|
||||
/* When the root window is mapped, set the initial modes */
|
||||
void AMDGPUWindowExposures_oneshot(WindowPtr pWin, RegionPtr pRegion
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0)
|
||||
|
@ -1686,13 +1705,7 @@ Bool AMDGPUPreInit_KMS(ScrnInfoPtr pScrn, int flags)
|
|||
else
|
||||
pAMDGPUEnt->HasCRTC2 = TRUE;
|
||||
|
||||
if (info->family < AMDGPU_FAMILY_CI) {
|
||||
info->cursor_w = CURSOR_WIDTH;
|
||||
info->cursor_h = CURSOR_HEIGHT;
|
||||
} else {
|
||||
info->cursor_w = CURSOR_WIDTH_CIK;
|
||||
info->cursor_h = CURSOR_HEIGHT_CIK;
|
||||
}
|
||||
amdgpu_determine_cursor_size(pAMDGPUEnt->fd, info);
|
||||
|
||||
amdgpu_query_heap_size(pAMDGPUEnt->pDev, AMDGPU_GEM_DOMAIN_GTT,
|
||||
&heap_size, &max_allocation);
|
||||
|
@ -2048,36 +2061,34 @@ Bool AMDGPUScreenInit_KMS(ScreenPtr pScreen, int argc, char **argv)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!pScreen->isGPU) {
|
||||
if (xorgGetVersion() >= XORG_VERSION_NUMERIC(1,18,3,0,0))
|
||||
value = info->use_glamor;
|
||||
else
|
||||
value = FALSE;
|
||||
from = X_DEFAULT;
|
||||
if (xorgGetVersion() >= XORG_VERSION_NUMERIC(1,18,3,0,0))
|
||||
value = info->use_glamor;
|
||||
else
|
||||
value = FALSE;
|
||||
from = X_DEFAULT;
|
||||
|
||||
if (info->use_glamor) {
|
||||
if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
|
||||
from = X_CONFIG;
|
||||
if (info->use_glamor) {
|
||||
if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
|
||||
from = X_CONFIG;
|
||||
|
||||
if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
|
||||
(driLevel == 2 || driLevel == 3)) {
|
||||
from = X_CONFIG;
|
||||
value = driLevel == 3;
|
||||
}
|
||||
if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
|
||||
(driLevel == 2 || driLevel == 3)) {
|
||||
from = X_CONFIG;
|
||||
value = driLevel == 3;
|
||||
}
|
||||
|
||||
if (value) {
|
||||
value = amdgpu_sync_init(pScreen) &&
|
||||
amdgpu_present_screen_init(pScreen) &&
|
||||
amdgpu_dri3_screen_init(pScreen);
|
||||
|
||||
if (!value)
|
||||
from = X_WARNING;
|
||||
}
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, from, "DRI3 %sabled\n", value ? "en" : "dis");
|
||||
}
|
||||
|
||||
if (value) {
|
||||
value = amdgpu_sync_init(pScreen) &&
|
||||
amdgpu_present_screen_init(pScreen) &&
|
||||
amdgpu_dri3_screen_init(pScreen);
|
||||
|
||||
if (!value)
|
||||
from = X_WARNING;
|
||||
}
|
||||
|
||||
xf86DrvMsg(pScrn->scrnIndex, from, "DRI3 %sabled\n", value ? "en" : "dis");
|
||||
|
||||
pScrn->vtSema = TRUE;
|
||||
xf86SetBackingStore(pScreen);
|
||||
|
||||
|
|
|
@ -58,21 +58,7 @@ struct amdgpu_present_vblank_event {
|
|||
static RRCrtcPtr
|
||||
amdgpu_present_get_crtc(WindowPtr window)
|
||||
{
|
||||
ScreenPtr screen = window->drawable.pScreen;
|
||||
ScrnInfoPtr pScrn = xf86ScreenToScrn(screen);
|
||||
xf86CrtcPtr crtc;
|
||||
RRCrtcPtr randr_crtc = NULL;
|
||||
|
||||
crtc = amdgpu_pick_best_crtc(pScrn, FALSE,
|
||||
window->drawable.x,
|
||||
window->drawable.x + window->drawable.width,
|
||||
window->drawable.y,
|
||||
window->drawable.y + window->drawable.height);
|
||||
|
||||
if (crtc)
|
||||
randr_crtc = crtc->randr_crtc;
|
||||
|
||||
return randr_crtc;
|
||||
return amdgpu_randr_crtc_covering_drawable(&window->drawable);
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
@ -39,89 +39,180 @@ static void amdgpu_box_intersect(BoxPtr dest, BoxPtr a, BoxPtr b)
|
|||
{
|
||||
dest->x1 = a->x1 > b->x1 ? a->x1 : b->x1;
|
||||
dest->x2 = a->x2 < b->x2 ? a->x2 : b->x2;
|
||||
if (dest->x1 >= dest->x2) {
|
||||
dest->x1 = dest->x2 = dest->y1 = dest->y2 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
dest->y1 = a->y1 > b->y1 ? a->y1 : b->y1;
|
||||
dest->y2 = a->y2 < b->y2 ? a->y2 : b->y2;
|
||||
|
||||
if (dest->x1 >= dest->x2 || dest->y1 >= dest->y2)
|
||||
if (dest->y1 >= dest->y2)
|
||||
dest->x1 = dest->x2 = dest->y1 = dest->y2 = 0;
|
||||
}
|
||||
|
||||
static void amdgpu_crtc_box(xf86CrtcPtr crtc, BoxPtr crtc_box)
|
||||
{
|
||||
if (crtc->enabled) {
|
||||
crtc_box->x1 = crtc->x;
|
||||
crtc_box->x2 =
|
||||
crtc->x + xf86ModeWidth(&crtc->mode, crtc->rotation);
|
||||
crtc_box->y1 = crtc->y;
|
||||
crtc_box->y2 =
|
||||
crtc->y + xf86ModeHeight(&crtc->mode, crtc->rotation);
|
||||
} else
|
||||
crtc_box->x1 = crtc_box->x2 = crtc_box->y1 = crtc_box->y2 = 0;
|
||||
}
|
||||
|
||||
static int amdgpu_box_area(BoxPtr box)
|
||||
{
|
||||
return (int)(box->x2 - box->x1) * (int)(box->y2 - box->y1);
|
||||
}
|
||||
|
||||
Bool amdgpu_crtc_is_enabled(xf86CrtcPtr crtc)
|
||||
Bool
|
||||
amdgpu_crtc_is_enabled(xf86CrtcPtr crtc)
|
||||
{
|
||||
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
|
||||
return drmmode_crtc->dpms_mode == DPMSModeOn;
|
||||
|
||||
return crtc->enabled && drmmode_crtc->dpms_mode == DPMSModeOn;
|
||||
}
|
||||
|
||||
static void amdgpu_crtc_box(RRCrtcPtr crtc, BoxPtr crtc_box)
|
||||
{
|
||||
if (crtc->mode) {
|
||||
crtc_box->x1 = crtc->x;
|
||||
crtc_box->y1 = crtc->y;
|
||||
switch (crtc->rotation) {
|
||||
case RR_Rotate_0:
|
||||
case RR_Rotate_180:
|
||||
default:
|
||||
crtc_box->x2 = crtc->x + crtc->mode->mode.width;
|
||||
crtc_box->y2 = crtc->y + crtc->mode->mode.height;
|
||||
break;
|
||||
case RR_Rotate_90:
|
||||
case RR_Rotate_270:
|
||||
crtc_box->x2 = crtc->x + crtc->mode->mode.height;
|
||||
crtc_box->y2 = crtc->y + crtc->mode->mode.width;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
crtc_box->x1 = crtc_box->x2 = crtc_box->y1 = crtc_box->y2 = 0;
|
||||
}
|
||||
|
||||
static Bool amdgpu_crtc_on(RRCrtcPtr crtc, Bool crtc_is_xf86_hint)
|
||||
{
|
||||
if (!crtc) {
|
||||
return FALSE;
|
||||
}
|
||||
if (crtc_is_xf86_hint && crtc->devPrivate) {
|
||||
return amdgpu_crtc_is_enabled(crtc->devPrivate);
|
||||
} else {
|
||||
return !!crtc->mode;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the crtc covering 'box'. If two crtcs cover a portion of
|
||||
* 'box', then prefer the crtc with greater coverage.
|
||||
*/
|
||||
static RRCrtcPtr
|
||||
amdgpu_crtc_covering_box(ScreenPtr pScreen, BoxPtr box, Bool screen_is_xf86_hint)
|
||||
{
|
||||
rrScrPrivPtr pScrPriv;
|
||||
RRCrtcPtr crtc, best_crtc, primary_crtc;
|
||||
int coverage, best_coverage;
|
||||
int c;
|
||||
BoxRec crtc_box, cover_box;
|
||||
RROutputPtr primary_output;
|
||||
|
||||
best_crtc = NULL;
|
||||
best_coverage = 0;
|
||||
primary_crtc = NULL;
|
||||
primary_output = NULL;
|
||||
|
||||
if (!dixPrivateKeyRegistered(rrPrivKey))
|
||||
return NULL;
|
||||
|
||||
pScrPriv = rrGetScrPriv(pScreen);
|
||||
|
||||
if (!pScrPriv)
|
||||
return NULL;
|
||||
|
||||
primary_output = RRFirstOutput(pScreen);
|
||||
if (primary_output && primary_output->crtc)
|
||||
primary_crtc = primary_output->crtc;
|
||||
|
||||
for (c = 0; c < pScrPriv->numCrtcs; c++) {
|
||||
crtc = pScrPriv->crtcs[c];
|
||||
|
||||
/* If the CRTC is off, treat it as not covering */
|
||||
if (!amdgpu_crtc_on(crtc, screen_is_xf86_hint))
|
||||
continue;
|
||||
|
||||
amdgpu_crtc_box(crtc, &crtc_box);
|
||||
amdgpu_box_intersect(&cover_box, &crtc_box, box);
|
||||
coverage = amdgpu_box_area(&cover_box);
|
||||
if (coverage > best_coverage ||
|
||||
(crtc == primary_crtc && coverage == best_coverage)) {
|
||||
best_crtc = crtc;
|
||||
best_coverage = coverage;
|
||||
}
|
||||
}
|
||||
|
||||
return best_crtc;
|
||||
}
|
||||
|
||||
#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0)
|
||||
static RRCrtcPtr
|
||||
amdgpu_crtc_covering_box_on_secondary(ScreenPtr pScreen, BoxPtr box)
|
||||
{
|
||||
if (!pScreen->isGPU) {
|
||||
ScreenPtr secondary;
|
||||
RRCrtcPtr crtc = NULL;
|
||||
|
||||
xorg_list_for_each_entry(secondary, &pScreen->secondary_list, secondary_head) {
|
||||
if (!secondary->is_output_secondary)
|
||||
continue;
|
||||
|
||||
crtc = amdgpu_crtc_covering_box(secondary, box, FALSE);
|
||||
if (crtc)
|
||||
return crtc;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
RRCrtcPtr
|
||||
amdgpu_randr_crtc_covering_drawable(DrawablePtr pDraw)
|
||||
{
|
||||
ScreenPtr pScreen = pDraw->pScreen;
|
||||
RRCrtcPtr crtc = NULL;
|
||||
BoxRec box;
|
||||
|
||||
box.x1 = pDraw->x;
|
||||
box.y1 = pDraw->y;
|
||||
box.x2 = box.x1 + pDraw->width;
|
||||
box.y2 = box.y1 + pDraw->height;
|
||||
|
||||
crtc = amdgpu_crtc_covering_box(pScreen, &box, TRUE);
|
||||
#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(23, 0)
|
||||
if (!crtc) {
|
||||
crtc = amdgpu_crtc_covering_box_on_secondary(pScreen, &box);
|
||||
}
|
||||
#endif
|
||||
return crtc;
|
||||
}
|
||||
|
||||
xf86CrtcPtr
|
||||
amdgpu_pick_best_crtc(ScrnInfoPtr pScrn, Bool consider_disabled,
|
||||
amdgpu_pick_best_crtc(ScreenPtr pScreen,
|
||||
int x1, int x2, int y1, int y2)
|
||||
{
|
||||
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||
int coverage, best_coverage, c, cd;
|
||||
BoxRec box, crtc_box, cover_box;
|
||||
RROutputPtr primary_output = NULL;
|
||||
xf86CrtcPtr best_crtc = NULL, primary_crtc = NULL;
|
||||
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
|
||||
|
||||
if (!pScrn->vtSema)
|
||||
return NULL;
|
||||
|
||||
RRCrtcPtr crtc = NULL;
|
||||
BoxRec box;
|
||||
|
||||
box.x1 = x1;
|
||||
box.x2 = x2;
|
||||
box.y1 = y1;
|
||||
box.y2 = y2;
|
||||
best_coverage = 0;
|
||||
|
||||
/* Prefer the CRTC of the primary output */
|
||||
if (dixPrivateKeyRegistered(rrPrivKey))
|
||||
{
|
||||
primary_output = RRFirstOutput(pScrn->pScreen);
|
||||
crtc = amdgpu_crtc_covering_box(pScreen, &box, TRUE);
|
||||
if (crtc) {
|
||||
return crtc->devPrivate;
|
||||
}
|
||||
if (primary_output && primary_output->crtc)
|
||||
primary_crtc = primary_output->crtc->devPrivate;
|
||||
|
||||
/* first consider only enabled CRTCs
|
||||
* then on second pass consider disabled ones
|
||||
*/
|
||||
for (cd = 0; cd < (consider_disabled ? 2 : 1); cd++) {
|
||||
for (c = 0; c < xf86_config->num_crtc; c++) {
|
||||
xf86CrtcPtr crtc = xf86_config->crtc[c];
|
||||
|
||||
if (!cd && !amdgpu_crtc_is_enabled(crtc))
|
||||
continue;
|
||||
|
||||
amdgpu_crtc_box(crtc, &crtc_box);
|
||||
amdgpu_box_intersect(&cover_box, &crtc_box, &box);
|
||||
coverage = amdgpu_box_area(&cover_box);
|
||||
if (coverage > best_coverage ||
|
||||
(coverage == best_coverage &&
|
||||
crtc == primary_crtc)) {
|
||||
best_crtc = crtc;
|
||||
best_coverage = coverage;
|
||||
}
|
||||
}
|
||||
if (best_crtc)
|
||||
break;
|
||||
}
|
||||
|
||||
return best_crtc;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void AMDGPUInitVideo(ScreenPtr pScreen)
|
||||
|
|
|
@ -42,6 +42,9 @@
|
|||
#define current_primary current_master
|
||||
#define primary_pixmap master_pixmap
|
||||
#define secondary_dst slave_dst
|
||||
#define secondary_list slave_list
|
||||
#define secondary_head slave_head
|
||||
#define is_output_secondary is_output_slave
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue