Age | Commit message (Collapse) | Author | Files | Lines |
|
This should be functionally equivalent to what drmModeSetCursor(2) do
behind the scenes, but allows for new tricks in following changes.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Not needed or even useful for anything.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
GBM doesn't really buy us anything for the cursor BOs. This simplifies
the code and following changes.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Specifically, after both the page flip and vblank ioctls failed, but
then the vblank ioctl started working again. This can happen
intermittently e.g. when hotplugging a DP display. Previously, TearFree
would stay disabled in that case until a modeset was triggered somehow.
Bugzilla: https://bugs.freedesktop.org/103791
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
drmmode_crtc_scanout_update does the equivalent of a scanout update,
so no need to do it again. This might also avoid issues if there's a
pending scanout update at this point.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Otherwise the damaged screen contents may never be displayed in that
case.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
This removes the dependency on an externally generated docker image, and
should make it easier to update the docker image or make other changes
related to it.
v2:
* If the image doesn't exist, try pulling it from the main repo's
registry.
* Use debian:testing-slim as the base, might result in a slightly
smaller image.
v3:
* Prevent installation of packages which are only recommended, for an
even smaller image.
* Add recommendation to remove new image from source repository in
favour of the main repository's.
Acked-by: Alex Deucher <alexander.deucher@amd.com> # v2
|
|
This patch adds support for setting the CRTC variable refresh property
for suitable windows flipping via the Present extension.
The "VariableRefresh" Option is added to AMDGPU in this patch. This
option defaults to false, and must be set to "true" in an X conf
file for variable refresh support in the driver.
In order for a window to be suitable for variable refresh it must have
the _VARIABLE_REFRESH property with a 32-bit CARDINAL value of 1.
Then the window must pass the checks required to be suitable for
Present extension flips - it must cover the entire X screen and no
other window may already be flipping.
With these conditions met every CRTC for the X screen will have their
variable refresh property set to true.
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
|
|
A significant amount of time can pass between the X call into
check_flip for a window and when amdgpu_present_flip actually occurs.
To ensure that flipping is still possible there was an additional check
performed on screen->root in amdgpu_present_flip - but what should
be checked instead is the window itself. This only really worked before
because X ensures that the window has the same dimensions as the screen
to allow for present extension flipping.
This patch tracks the flip window between calls to check_flip and flip
and uses that window instead of screen->root.
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
|
|
The un-premultiplied R/G/B values would overflow the gamma LUT, so just
pass through the data unchanged, and leave it up to the HW how to
interpret such weird premultiplied alpha pixels.
Bugzilla: https://bugs.freedesktop.org/108355
|
|
It was still possible for nested xorg_list_for_each_entry_safe loops
to occur over the drm_vblank_signalled list, which could mess up that
list. Moving deferred events to a separate list allows processing the
drm_vblank_signalled list without xorg_list_for_each_entry_safe.
v2:
* Refactor drm_handle_vblank_signalled helper function, less code
duplication => better readability (Alex Deucher)
Bugzilla: https://bugs.freedesktop.org/108600
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
When an async flip is performed, and TearFree is enabled on the CRTC
used for timing, we schedule a vblank event for completing the page
flip. The DRM event queuing code treated this event like a vblank event,
but it needs to be treated like a page flip event.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
At this point, we've already established that e->handler is NULL, no
need to check again in drm_queue_handle_one. This also makes it clearer
what's happening.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
The stricter detection broke the cursor in some games. Apparently those
use cursor data with premultiplied alpha, but with some pixels having
r/g/b values larger than the alpha value (which corresponds to original
r/g/b values > 1.0), triggering the workaround.
Relax the detection to match what's in the X server since 1.18.4, but
keep the workaround for older versions.
Bugzilla: https://bugs.freedesktop.org/108650
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Otherwise it isn't included in the generated tarballs.
Suggested-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
X server >= 1.18 already had code for this, but it only caught cases
where some pixels have 0 for alpha and non-0 for a non-alpha component.
Turns out some apps (e.g. the Civilization VI game) use
non-premultiplied cursor data which doesn't have such pixels, but can
still result in visual artifacts.
This uses the method suggested by Kamil in
https://bugs.freedesktop.org/92309#c19: check for pixels where any
colour component value is larger than the alpha value, which isn't
possible with premultiplied alpha.
There can still be non-premultiplied data which won't be caught by this,
but that should result in slightly incorrect colours and/or blending at
the worst, not wildly incorrect colours such as shown in the bug report
below.
v2:
* Disable the check with current xserver Git master, which already does
the same check now.
Bugzilla: https://bugs.freedesktop.org/108355
Suggested-by: Kamil Páral <kamil.paral@gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Corresponding to up to six CRTCs being available in the hardware.
v2:
* Move instance overflow check from PreInit to the probe hooks, in
order to further minimize wasted effort.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com> # v1
|
|
This matches CreateScreenResources_KMS.
Fixes crash when resizing the screen (e.g. using xrandr) with depth <
24.
Bugzilla: https://bugs.freedesktop.org/104914
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Builds the driver against all supported versions of xserver, with both
gcc and clang for xserver >= 1.18 (older versions cause warnings with
clang). Compiler warnings are treated as errors.
The xserver 1.15 build uses standalone glamor, the xserver 1.13 & 1.14
builds use --disable-glamor.
With the latest xserver version, make install and make distcheck are
tested as well.
|
|
We were still relying on the glamor.h header being picked up implicitly.
|
|
Avoids compiler warning with xserver < 1.16:
../../src/amdgpu_kms.c: In function ‘AMDGPUPreInitChipType_KMS’:
../../src/amdgpu_kms.c:1203:17: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
pScrn->chipset = amdgpu_get_marketing_name(pAMDGPUEnt->pDev);
^
|
|
We were always calling the latter, but not always the former, which
could result in handling deferred DRM events prematurely.
Acked-by: Slava Abramov <slava.abramov@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
We have to wait for a pending scanout flip or abort a pending scanout
update, otherwise the corresponding event handler will likely crash
after drmmode_crtc_scanout_free cleaned up the data structures.
Fixes crash after VT switch while dedicated scanout pixmaps are enabled
for any CRTC.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
And update it a little for the current Gitlab infrastructure.
|
|
|
|
|
|
We would crash due to dereferencing the NULL mode_res->crtc pointer.
Bugzilla: https://bugs.freedesktop.org/107913
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
No need to process any events in that case.
v2:
* Re-check drmmode_crtc->flip_pending after processing each event
|
|
The crtc->gamma_lut values aren't initialized yet at this point, and
the property values are pushed again from drmmode_setup_colormap
anyway.
Fixes intermittent flicker due to random gamma LUT values during server
startup.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
drm_wait_pending_flip can get called from drm_handle_event, in which
case xorg_list_for_each_entry_safe can end up processing the same entry
in both. To avoid this, just process the first list entry until the list
is empty.
|
|
We left entries without a handler hook in the list, so the list could
keep taking longer to process and use up more memory.
|
|
(Ported from radeon commit de88ea2755611bdcb18d91d8234d2ab5be8ff2e9)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
It means to stop using the shared pixmap backing.
(Ported from radeon commit 1799680f7bd84e0618f34f4c7486799521ddaf83)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Older versions of autoconf only supported the former.
(Cherry picked from radeon commit cba8fe4d64819aaa8ba516aa68dbe6d2aa153046)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Although normally it only warns about it, under some circumstances,
aclocal can error out if this directory doesn't exist.
Reported-by: John Lumby <johnlumby@hotmail.com>
(Cherry picked from radeon commit 7b01c10137aba24c8f61dd9b2a19ea257ad24371)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
We were always using the handle of the client provided FB, which
prevented RandR transforms from working, and could result in a black
screen.
Fixes: 9b6782c821e0 "Store FB for each CRTC in drmmode_flipdata_rec"
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Not needed anymore with the more robust mechanisms for preventing nested
drmHandleEvent calls introduced in the previous changes.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
This is to avoid submitting more flips while we are waiting for pending
ones to complete.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Instead of processing DRM events directly from drmHandleEvent's
callbacks, there are three phases:
1. drmHandleEvent is called, and signalled events are re-queued to
_signalled lists from its callbacks.
2. Signalled page flip completion events are processed.
3. Signalled vblank events are processed.
This should make sure that we never call drmHandleEvent from one of its
callbacks, which would usually result in blocking forever.
|
|
Replacing the drmmode_crtc_wait_pending_event macro.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
And make amdgpu_drm_queue_handler not directly accessible outside of
amdgpu_drm_queue.c.
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Instead of the Xorg version. This should allow glamor backported from
xserver >= 1.20 to work with older Xorg versions.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Inspired by the modesetting driver.
(Ported from radeon commit db28d35ce9fd07a2a4703f3df0633d4c8291ff9b)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
We were only storing the FB provided by the client, but on CRTCs with
TearFree enabled, we use a separate FB. This could cause
drmmode_flip_handler to fail to clear drmmode_crtc->flip_pending, which
could result in a hang when waiting for the pending flip to complete. We
were trying to avoid that by always clearing drmmode_crtc->flip_pending
when TearFree is enabled, but that wasn't reliable, because
drmmode_crtc->tear_free can already be FALSE at this point when
disabling TearFree.
Now that we're keeping track of each CRTC's flip FB separately,
drmmode_flip_handler can reliably clear flip_pending, and we no longer
need the TearFree hack.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Not doing this resulted in falling back to software for DRI3 client
presentation operations with ShadowPrimary.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Instead of strncpy with the string length. Avoids new warnings with GCC
8:
../../src/drmmode_display.c: In function ‘drmmode_output_create_resources’:
../../src/drmmode_display.c:2240:2: warning: ‘strncpy’ output truncated before terminating nul copying 8 bytes from a string of the same length [-Wstringop-truncation]
strncpy(tearfree_prop->name, "TearFree", 8);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../src/drmmode_display.c:2244:2: warning: ‘strncpy’ output truncated before terminating nul copying 3 bytes from a string of the same length [-Wstringop-truncation]
strncpy(tearfree_prop->enums[0].name, "off", 3);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../src/drmmode_display.c:2245:2: warning: ‘strncpy’ output truncated before terminating nul copying 2 bytes from a string of the same length [-Wstringop-truncation]
strncpy(tearfree_prop->enums[1].name, "on", 2);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../src/drmmode_display.c:2247:2: warning: ‘strncpy’ output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
strncpy(tearfree_prop->enums[2].name, "auto", 4);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Reviewed-by: Slava Abramov <slava.abramov@amd.com>
|
|
The RandR screen private is already freed when our CloseScreen runs, so
this can't do anything useful. This cleanup has to be done by the X
server itself.
|
|
We always destroy the fbcon pixmap in drmmode_copy_fb anyway.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
|