Commit Graph

218 Commits

Author SHA1 Message Date
Michel Dänzer
b10ecdbd89 Use drmmode_crtc_scanout_* helpers for RandR 1.4 scanout pixmaps
This should allow using multiple CRTCs via RandR 1.4 even with xserver
< 1.17. It also simplifies the code a little, and paves the way for
following changes.

(Ported from radeon commits 4cfa4615f79f64062e5e771cd45dd7048f48b4f6
 and a92c27484703abc7c410b6ae0e4b8d1efbbb8e6f)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-09-09 19:02:28 +09:00
Michel Dänzer
9565981f75 Wait for pending flips to complete before turning off an output or CRTC
At least with older kernels, the flip may never complete otherwise,
which can result in us hanging in drmmode_set_mode_major.

Fixes: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-ati/+bug/1577170

(Ported from radeon commits 9090309e057dc703d1a5bffd88e6cae14108cfc3,
 e520ce0ec0adf91ddce5c932d4b3f9477fd49304,
 a36fdaff40d5b4795a1400c348a80eee94892212 and
 4bd2d01552f18153afa03a8947b22eebf3d67c6b)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-09-09 19:02:19 +09:00
Michel Dänzer
c7d27c94cb Keep track of damage event related flushes per-client
This further reduces the compositing slowdown due to flushing overhead,
by only flushing when the X server actually sends XDamageNotify events
to a client, and there hasn't been a flush yet in the meantime.

(Ported from radeon commit 121a6de72da5fcf9a32408eff36b2235f3dfbcfe)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-09-09 19:02:11 +09:00
Michel Dänzer
58773d1945 Use EventCallback to avoid flushing every time in the FlushCallback
We only need to flush for XDamageNotify events.

Significantly reduces compositing slowdown due to flushing overhead, in
particular with glamor.

(Ported from radeon commit 9a1afbf61fbb2827c86bd86d295fa0848980d60b)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-09-09 19:02:02 +09:00
Michel Dänzer
d166d04f69 Add explicit AMDGPU_DRM_QUEUE_ERROR define
Should make the amdgpu_drm_queue_alloc error handling clearer, and gets
rid of a compile warning about it returning NULL.

(Ported from radeon commit a37af701768b12d86868a831a79f1e02ee4968cf)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-09-07 18:03:05 +09:00
Michel Dänzer
6a1ba044c2 Only list each unique chipset family once in the log file
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-08-30 16:54:16 +09:00
Michel Dänzer
7d050d15d4 Add missing Kaveri PCI ID (1318)
Found by comparing src/pcidb/ati_pciids.csv with xf86-video-ati.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-08-30 16:53:45 +09:00
Michel Dänzer
aa54926609 Add Mullins PCI IDs
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97472
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-08-29 15:52:48 +09:00
Qiang Yu
73c8dc000a DRI2: Fix amdgpu_dri2_exchange_buffers width/height copy'n'paste error
Signed-off-by: Qiang Yu <Qiang.Yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
2016-08-23 11:48:09 +09:00
Michel Dänzer
5a4d3267ac Remove unused lut_r/g/b arrays from drmmode_crtc_private_rec
Fixes: 1091f28e1f ("Remove drmmode_load_palette")
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-08-23 11:47:12 +09:00
Marek Olšák
c436452069 Fix cursor size for SI
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Acked-by: Edward O'Callaghan <funfunctor@folklore1984.net>
2016-08-22 15:06:55 +02:00
Ronie Salgado
2eb5d77b84 Add SI PCI IDs
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
2016-08-22 15:06:53 +02:00
Michel Dänzer
abd1a7901c DRI2: Add interpolated_vblanks in amdgpu_dri2_get_crtc_msc
We need that in amdgpu_dri2_drawable_crtc as well for priv->vblank_delta
to work as intended.

amdgpu_dri2_get_msc was already doing this.

Fixes hangs in some cases when using VDPAU via DRI2 and moving the
window between CRTCs.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-07-22 19:12:27 +09:00
Qiang Yu
978242977e Fix amdgpu_mode_hotplug crash on multi GPU platform.
On multi GPU platform, some screen is created by other GPU DDX.

Signed-off-by: Qiang Yu <Qiang.Yu@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
2016-07-20 15:50:13 +09:00
Keith Packard
fdd1209e26 Use NotifyFd for drm fd
NotifyFd is available after API 22, and must be used after API 23.

Signed-off-by: Keith Packard <keithp@keithp.com>
2016-07-19 09:16:32 -07:00
Adam Jackson
17c0cf4974 Adapt Block/WakeupHandler signature for ABI 23
Signed-off-by: Adam Jackson <ajax@redhat.com>
2016-07-19 10:23:26 -04:00
Michel Dänzer
b5e2b964b7 Only use RandR APIs if RandR is enabled
Fixes crash with Xinerama enabled, which disables RandR.

Fixes: https://bugs.debian.org/827984

(Ported from radeon commit 3be841d0ae7d505cef325993205b12d15e98dba9)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-07-12 16:04:43 +09:00
Michel Dänzer
84496ebc89 Add .editorconfig file
Basically a conversion from .dir-locals.el. EditorConfig supports many
more editors and IDEs.

(Ported from radeon commit aa07b365d7b0610411e118f105e49daff5f5a5cf)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-07-12 16:03:51 +09:00
Michel Dänzer
a576430526 Clear damage in amdgpu_scanout_update if it doesn't intersect the CRTC
There's no need to test that same damage again.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-28 15:38:21 +09:00
Michel Dänzer
ede7f2bcae Remove w/h parameters from amdgpu_scanout_extents_intersect
We can use the dimensions of the CRTC's mode instead.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-28 15:37:48 +09:00
Michel Dänzer
bf000ea7ef Make the dedicated scanout mechanism work with arbitrary transforms v2
This makes TearFree work with arbitrary transforms, and makes transforms
work better even without TearFree, with xserver >= 1.12.

v2: Preserve clamping of transformed damage extents to CRTC boundaries.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-24 15:55:51 +09:00
Michel Dänzer
d96dabc71b Destroy all dedicated scanout buffers during CloseScreen
Fixes leaking active scanout buffers across a server reset, which also
fixes server reset with glamor and active scanout buffers.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-24 15:54:14 +09:00
Michel Dänzer
1091f28e1f Remove drmmode_load_palette
Not used by any supported version of xserver.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:25:41 +09:00
Michel Dänzer
4d506c23c9 present: Separate checks for flips vs unflips v2
All unflip checks apply to flips as well, but not vice versa.

v2: Add comment above amdgpu_present_check_unflip (Alex)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:13:23 +09:00
Michel Dänzer
decabd574f dri2: Don't allow flipping when using a dedicated scanout buffer
Fixes issues when mixing rotation and page flipping with current xserver
Git master.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:12:20 +09:00
Michel Dänzer
3ed28ce7cd present: Don't allow flipping when using a dedicated scanout buffer
Fixes issues when mixing rotation and page flipping with current xserver
Git master.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:11:36 +09:00
Michel Dänzer
9c3324715f Make sure drmmode_crtc->scanout[] are destroyed when not needed
We failed to do this when going back to scanning out directly from the
screen pixmap.

As a bonus, since we now destroy drmmode_crtc->scanout[] after setting
the new scanout buffer, we may avoid the CRTC turning off intermittently
in this case.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:10:33 +09:00
Michel Dänzer
3bce0519a4 Simplify drmmode_set_mode_major error handling
Initialize ret = FALSE and only set it to TRUE when we've succeeded.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:09:54 +09:00
Hans de Goede
a3ca150070 Only add main fb if necessary
If we're doing reverse-prime; or doing rotation the main fb is not used,
and there is no reason to add it in this case.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
(Ported from xserver commit 4313122dea0df9affc280ee698e929489061ccc6)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 16:08:51 +09:00
Hans de Goede
9ca1c24235 Remove unnecessary fb addition from drmmode_xf86crtc_resize
drmmode_set_mode_major() is the only user of drmmode->fb_id and will
create it if necessary.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
(Ported from xserver commit 877453212166fdc912e0d687cdecee11aba563b5)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 10:58:11 +09:00
Michel Dänzer
0d42082108 Call amdgpu_glamor_create_screen_resources after ModifyPixmapHeader
Otherwise, glamor doesn't pick up the new screen pixmap size and
continues using the old size, leaving garbage in some areas after
enlarging the screen.

Fixes regression from commit c315c00e44
("Propagate failure from amdgpu_set_pixmap_bo").

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-23 10:54:28 +09:00
Michel Dänzer
e7e71eabbb Adapt to XF86_CRTC_VERSION 7
Now the HW cursor can be used with TearFree rotation.

This also allows always using the separate scanout pixmap mechanism for
rotation, so that should be much smoother even without TearFree enabled.

(Ported from radeon commit 7835558acdce318130ba4a09ef936fd675e3197d)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-21 10:43:29 +09:00
Michel Dänzer
7f7f9825ca Free priv in amdgpu_set_pixmap_bo also if priv->bo == NULL
Fixes memory leak when destroying pixmaps with priv->bo == NULL.

Reported-by: Qiang Yu <qiang.yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-16 15:21:26 +09:00
Michel Dänzer
397aedafee glamor: Fix leak of pixmap private when replacing BO
Reported-by: Qiang Yu <qiang.yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-16 15:20:56 +09:00
Michel Dänzer
5b4a8a7a6e Use amdgpu_set_pixmap_bo in amdgpu_set_shared_pixmap_backing
Fixes leaking any existing pixmap private.

While we're at it, also fix leaking the GBM BO if
amdgpu_glamor_create_textured_pixmap fails.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-16 15:20:13 +09:00
Michel Dänzer
c315c00e44 Propagate failure from amdgpu_set_pixmap_bo
Preparation for the following fixes.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-16 15:20:04 +09:00
Michel Dänzer
74602c4221 glamor: Make amdgpu_glamor_create_textured_pixmap take amdgpu_buffer*
Preparation for the following fixes.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-06-15 18:09:57 +09:00
Michel Dänzer
0007c2f018 glamor: Reallocate linear pixmap BO if necessary for DRI2 PRIME
Fixes corruption when using DRI2 PRIME render offloading with the master
screen using this driver.

Reported-by: Qiang Yu <qiang.yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com>
2016-06-14 18:26:09 +09:00
Michel Dänzer
5518bf5d79 Move DRI2's local fixup_glamor helper to amdgpu_glamor_set_pixmap_bo v2
So it can be used outside of the DRI2 code.

v2: Keep pixmap refcnt increment in amdgpu_dri2_create_buffer2 (Qiang Yu)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com> (v1)
2016-06-14 18:25:16 +09:00
Michel Dänzer
641f4647b7 Consolidate get_drawable_pixmap helper
There were two static helpers for the same purpose. Consolidate them
into a single inline helper which can be used anywhere.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com>
2016-06-14 18:24:49 +09:00
Michel Dänzer
8e40f190e4 Add amdgpu_pixmap_get_tiling_info
Retrieves the tiling information about a pixmap BO from the kernel
driver.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com>
2016-06-14 18:24:16 +09:00
Michel Dänzer
e7eeb6ad11 Remove amdgpu_share_pixmap_backing
Not used anymore.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com>
2016-06-14 18:23:49 +09:00
Michel Dänzer
b36c77695b glamor: Fix amdgpu_glamor_share_pixmap_backing for priv->bo == NULL
Fixes crash when running a compositor and DRI_PRIME client via DRI2.

Reported-by: Qiang Yu <qiang.yu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Tested-by: Qiang Yu <qiang.yu@amd.com>
2016-06-08 15:38:57 +09:00
Alex Deucher
60ced5026e add missing bonaire pci id
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-17 16:59:41 -04:00
Flora Cui
8e89448ee0 Add more Polaris 11 PCI IDs
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-17 16:49:21 -04:00
Flora Cui
a59b23d642 Add more Polaris 10 PCI IDs
Signed-off-by: Flora Cui <Flora.Cui@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-17 16:48:55 -04:00
Michel Dänzer
14606e127f Handle Zaphod mode correctly in amdgpu_mode_hotplug
We need to scan both screens of the entity for existing connectors, and
enumerate DVI & HDMI connectors consistently regardless of which screen
they're assigned to.

Fixes crash when hot-(un)plugging connectors in Zaphod mode.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93415
(Ported from radeon commit c801f9f10a5d72d935faf21e72f7e7808fb4f05f)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-13 11:37:30 +09:00
Michel Dänzer
861da1d5c2 Enable DRI3 by default when building for Xorg >= 1.18.3
Seems to work well enough in general now.

(Ported from radeon commit 1181b9c582f10b6c523e4b2988e2ce87ecf3d367)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-12 16:34:30 +09:00
Michel Dänzer
86f9918388 present: Support async flips
The xserver Present code only calls radeon_present_flip with
sync_flip=FALSE if radeon_present_screen_init sets
PresentCapabilityAsync, and the latter only sets it if the kernel driver
advertises support for async flips.

(Ported from radeon commit 1ca677309720e2f6c953c9e76f5b34c22a4416c6)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-12 16:29:23 +09:00
Michel Dänzer
744ac5faff Add support for async flips to radeon_do_pageflip
Will be used by the next change. No functional change here.

(Ported from radeon commit 90a915c62d012e99193833aecc93974e68880c60)

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
2016-05-12 16:28:49 +09:00