[PATCH xf86-video-amdgpu] Use DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE/RELATIVE flags when available
Emil Velikov
emil.l.velikov at gmail.com
Tue Nov 22 17:01:52 UTC 2016
Hi Michel,
On 22 November 2016 at 07:58, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> (Ported from radeon commit 1106b2f773ad0611c729b27f4c192a26b43ef1e7)
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
> +static Bool drmmode_probe_page_flip_target(AMDGPUEntPtr pAMDGPUEnt)
> +{
> +#ifdef DRM_CAP_PAGE_FLIP_TARGET
> + uint64_t cap_value;
> +
> + return drmGetCap(pAMDGPUEnt->fd, DRM_CAP_PAGE_FLIP_TARGET,
> + &cap_value) == 0 && cap_value != 0;
> +#else
> + return FALSE;
> +#endif
Since the ABI is already set, it would be better to add a fallback
define and always use drmGetCap. The latter will (should?) return !=
0, thus things will work as expected.
Atm there's a hidden dependency on DRM_CAP_PAGE_FLIP_TARGET aware
libdrm(?). Without the above one will need to rebuild the DDX after
updating libdrm.
> +}
> +
> +static int
> +drmmode_page_flip(AMDGPUEntPtr pAMDGPUEnt, drmmode_crtc_private_ptr drmmode_crtc,
> + uint32_t flags, uintptr_t drm_queue_seq)
> +{
> + drmmode_ptr drmmode = drmmode_crtc->drmmode;
> +
> + flags |= DRM_MODE_PAGE_FLIP_EVENT;
> + return drmModePageFlip(pAMDGPUEnt->fd, drmmode_crtc->mode_crtc->crtc_id,
> + drmmode->fb_id, flags, (void*)drm_queue_seq);
> +}
> +
> +int
> +drmmode_page_flip_target_absolute(AMDGPUEntPtr pAMDGPUEnt,
> + drmmode_crtc_private_ptr drmmode_crtc,
> + uint32_t flags, uintptr_t drm_queue_seq,
> + uint32_t target_msc)
> +{
> +#ifdef DRM_MODE_PAGE_FLIP_TARGET
> + if (pAMDGPUEnt->has_page_flip_target) {
With the above in mind - here (and in *relative) you can drop the guards.
Emil
More information about the amd-gfx
mailing list