Skip to content
Commits on Source (36)
image: docker:latest
services:
- docker:dind
before_script:
- echo FROM nwnk/xserver-travis-rawhide:v5 > Dockerfile
- echo ADD . /root >> Dockerfile
- echo WORKDIR /root >> Dockerfile
- docker build -t withgit .
job:
script:
- docker run --volume $HOME/.ccache:/root/.ccache withgit ./test/scripts/build-travis-deps.sh
......@@ -26,9 +26,9 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
AC_INIT([xorg-server], 1.19.99.905, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
RELEASE_DATE="2018-04-24"
RELEASE_NAME="Chicken Paprikash"
AC_INIT([xorg-server], 1.20.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
RELEASE_DATE="2018-05-10"
RELEASE_NAME="Avocado Toast"
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
......
xorg-server (2:1.19.99.905-1) UNRELEASED; urgency=medium
xorg-server (2:1.20.0-1) experimental; urgency=medium
[ Timo Aaltonen ]
* New upstream release candidate. (Closes: #868843)
-- Timo Aaltonen <tjaalton@debian.org> Fri, 13 Apr 2018 12:12:05 +0300
[ Emilio Pozuelo Monfort ]
* New upstream stable release.
* Update Vcs-* for salsa.
-- Emilio Pozuelo Monfort <pochu@debian.org> Sat, 19 May 2018 15:04:00 +0200
xorg-server (2:1.19.99.901-1) experimental; urgency=medium
......
......@@ -82,8 +82,8 @@ Build-Depends:
# systemd-daemon
libsystemd-dev [linux-any],
Standards-Version: 3.9.8
Vcs-Git: https://anonscm.debian.org/git/pkg-xorg/xserver/xorg-server.git
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-xorg/xserver/xorg-server.git
Vcs-Git: https://salsa.debian.org/xorg-team/xserver/xorg-server.git
Vcs-Browser: https://salsa.debian.org/xorg-team/xserver/xorg-server
Homepage: https://www.x.org/
Package: xserver-xorg-core
......
......@@ -2015,6 +2015,11 @@ _remove_fs_handlers(FontPathElementPtr fpe, FontBlockHandlerProcPtr block_handle
RemoveFontWakeup(fpe);
}
static uint32_t wrap_time_in_millis(void)
{
return GetTimeInMillis();
}
static const xfont2_client_funcs_rec xfont2_client_funcs = {
.version = XFONT2_CLIENT_FUNCS_VERSION,
.client_auth_generation = _client_auth_generation,
......@@ -2025,7 +2030,7 @@ static const xfont2_client_funcs_rec xfont2_client_funcs = {
.get_client_resolutions = get_client_resolutions,
.get_default_point_size = get_default_point_size,
.get_new_font_client_id = get_new_font_client_id,
.get_time_in_millis = GetTimeInMillis,
.get_time_in_millis = wrap_time_in_millis,
.init_fs_handlers = _init_fs_handlers,
.register_fpe_funcs = register_fpe_funcs,
.remove_fs_handlers = _remove_fs_handlers,
......
......@@ -66,23 +66,23 @@ typedef int (*dri3_fd_from_pixmap_proc) (ScreenPtr screen,
typedef int (*dri3_fds_from_pixmap_proc) (ScreenPtr screen,
PixmapPtr pixmap,
int *fds,
CARD32 *strides,
CARD32 *offsets,
CARD64 *modifier);
uint32_t *strides,
uint32_t *offsets,
uint64_t *modifier);
typedef int (*dri3_get_formats_proc) (ScreenPtr screen,
CARD32 *num_formats,
CARD32 **formats);
typedef int (*dri3_get_modifiers_proc) (ScreenPtr screen,
CARD32 format,
CARD32 *num_modifiers,
CARD64 **modifiers);
uint32_t format,
uint32_t *num_modifiers,
uint64_t **modifiers);
typedef int (*dri3_get_drawable_modifiers_proc) (DrawablePtr draw,
CARD32 format,
CARD32 *num_modifiers,
CARD64 **modifiers);
uint32_t format,
uint32_t *num_modifiers,
uint64_t **modifiers);
typedef struct dri3_screen_info {
uint32_t version;
......
......@@ -90,8 +90,8 @@ dri3_fd_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size);
int
dri3_fds_from_pixmap(PixmapPtr pixmap, int *fds,
CARD32 *strides, CARD32 *offsets,
CARD64 *modifier);
uint32_t *strides, uint32_t *offsets,
uint64_t *modifier);
int
dri3_get_supported_modifiers(ScreenPtr screen, DrawablePtr drawable,
......
......@@ -32,6 +32,20 @@
#include <protocol-versions.h>
#include <drm_fourcc.h>
static Bool
dri3_screen_can_one_point_two(ScreenPtr screen)
{
dri3_screen_priv_ptr dri3 = dri3_screen_priv(screen);
if (dri3 && dri3->info && dri3->info->version >= 2 &&
dri3->info->pixmap_from_fds && dri3->info->fds_from_pixmap &&
dri3->info->get_formats && dri3->info->get_modifiers &&
dri3->info->get_drawable_modifiers)
return TRUE;
return FALSE;
}
static int
proc_dri3_query_version(ClientPtr client)
{
......@@ -45,6 +59,21 @@ proc_dri3_query_version(ClientPtr client)
};
REQUEST_SIZE_MATCH(xDRI3QueryVersionReq);
for (int i = 0; i < screenInfo.numScreens; i++) {
if (!dri3_screen_can_one_point_two(screenInfo.screens[i])) {
rep.minorVersion = 0;
break;
}
}
for (int i = 0; i < screenInfo.numGPUScreens; i++) {
if (!dri3_screen_can_one_point_two(screenInfo.gpuscreens[i])) {
rep.minorVersion = 0;
break;
}
}
/* From DRI3 proto:
*
* The client sends the highest supported version to the server
......@@ -53,7 +82,8 @@ proc_dri3_query_version(ClientPtr client)
*/
if (rep.majorVersion > stuff->majorVersion ||
rep.minorVersion > stuff->minorVersion) {
(rep.majorVersion == stuff->majorVersion &&
rep.minorVersion > stuff->minorVersion)) {
rep.majorVersion = stuff->majorVersion;
rep.minorVersion = stuff->minorVersion;
}
......@@ -229,7 +259,7 @@ proc_dri3_buffer_from_pixmap(ClientPtr client)
rep.bpp = pixmap->drawable.bitsPerPixel;
fd = dri3_fd_from_pixmap(pixmap, &rep.stride, &rep.size);
if (fd == -1)
if (fd < 0)
return BadPixmap;
if (client->swapped) {
......
......@@ -66,8 +66,7 @@ dri3_pixmap_from_fds(PixmapPtr *ppixmap, ScreenPtr screen,
if (info->version >= 2 && info->pixmap_from_fds != NULL) {
pixmap = (*info->pixmap_from_fds) (screen, num_fds, fds, width, height,
strides, offsets, depth, bpp, modifier);
} else if (info->pixmap_from_fd != NULL && num_fds == 1 &&
modifier == DRM_FORMAT_MOD_INVALID) {
} else if (info->pixmap_from_fd != NULL && num_fds == 1) {
pixmap = (*info->pixmap_from_fd) (screen, fds[0], width, height,
strides[0], depth, bpp);
} else {
......@@ -83,8 +82,8 @@ dri3_pixmap_from_fds(PixmapPtr *ppixmap, ScreenPtr screen,
int
dri3_fds_from_pixmap(PixmapPtr pixmap, int *fds,
CARD32 *strides, CARD32 *offsets,
CARD64 *modifier)
uint32_t *strides, uint32_t *offsets,
uint64_t *modifier)
{
ScreenPtr screen = pixmap->drawable.pScreen;
dri3_screen_priv_ptr ds = dri3_screen_priv(screen);
......@@ -119,9 +118,9 @@ dri3_fd_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
ScreenPtr screen = pixmap->drawable.pScreen;
dri3_screen_priv_ptr ds = dri3_screen_priv(screen);
const dri3_screen_info_rec *info = ds->info;
CARD32 strides[4];
CARD32 offsets[4];
CARD64 modifier;
uint32_t strides[4];
uint32_t offsets[4];
uint64_t modifier;
int fds[4];
int num_fds;
......@@ -161,8 +160,8 @@ cache_formats_and_modifiers(ScreenPtr screen)
const dri3_screen_info_rec *info = ds->info;
CARD32 num_formats;
CARD32 *formats;
CARD32 num_modifiers;
CARD64 *modifiers;
uint32_t num_modifiers;
uint64_t *modifiers;
int i;
if (ds->formats_cached)
......@@ -225,8 +224,8 @@ dri3_get_supported_modifiers(ScreenPtr screen, DrawablePtr drawable,
const dri3_screen_info_rec *info = ds->info;
int i, j;
int ret;
CARD32 num_drawable_mods;
CARD64 *drawable_mods;
uint32_t num_drawable_mods;
uint64_t *drawable_mods;
CARD64 *intersect_mods = NULL;
CARD64 *screen_mods = NULL;
CARD32 format;
......
......@@ -803,8 +803,8 @@ glamor_set_drawable_modifiers_func(ScreenPtr screen,
}
_X_EXPORT Bool
glamor_get_drawable_modifiers(DrawablePtr draw, CARD32 format,
CARD32 *num_modifiers, uint64_t **modifiers)
glamor_get_drawable_modifiers(DrawablePtr draw, uint32_t format,
uint32_t *num_modifiers, uint64_t **modifiers)
{
struct glamor_screen_private *glamor_priv =
glamor_get_screen_private(draw->pScreen);
......
......@@ -61,8 +61,8 @@ typedef enum glamor_pixmap_type {
} glamor_pixmap_type_t;
typedef Bool (*GetDrawableModifiersFuncPtr) (DrawablePtr draw,
CARD32 format,
CARD32 *num_modifiers,
uint32_t format,
uint32_t *num_modifiers,
uint64_t **modifiers);
#define GLAMOR_EGL_EXTERNAL_BUFFER 3
......@@ -318,13 +318,13 @@ extern _X_EXPORT Bool glamor_get_formats(ScreenPtr screen,
CARD32 **formats);
extern _X_EXPORT Bool glamor_get_modifiers(ScreenPtr screen,
CARD32 format,
CARD32 *num_modifiers,
uint32_t format,
uint32_t *num_modifiers,
uint64_t **modifiers);
extern _X_EXPORT Bool glamor_get_drawable_modifiers(DrawablePtr draw,
CARD32 format,
CARD32 *num_modifiers,
uint32_t format,
uint32_t *num_modifiers,
uint64_t **modifiers);
extern _X_EXPORT void glamor_set_drawable_modifiers_func(ScreenPtr screen,
......
......@@ -602,7 +602,7 @@ glamor_get_formats(ScreenPtr screen,
glamor_egl = glamor_egl_get_screen_private(xf86ScreenToScrn(screen));
if (!glamor_egl->dmabuf_capable)
return FALSE;
return TRUE;
if (!eglQueryDmaBufFormatsEXT(glamor_egl->display, 0, NULL, &num))
return FALSE;
......@@ -629,8 +629,8 @@ glamor_get_formats(ScreenPtr screen,
}
_X_EXPORT Bool
glamor_get_modifiers(ScreenPtr screen, CARD32 format,
CARD32 *num_modifiers, uint64_t **modifiers)
glamor_get_modifiers(ScreenPtr screen, uint32_t format,
uint32_t *num_modifiers, uint64_t **modifiers)
{
#ifdef GLAMOR_HAS_EGL_QUERY_DMABUF
struct glamor_egl_screen_private *glamor_egl;
......
......@@ -137,8 +137,10 @@ validGlxContext(ClientPtr client, XID id, int access_mode,
__GLXcontext ** context, int *err)
{
/* no ghost contexts */
if (id & SERVER_BIT)
if (id & SERVER_BIT) {
*err = __glXError(GLXBadContext);
return FALSE;
}
*err = dixLookupResourceByType((void **) context, id,
__glXContextRes, client, access_mode);
......
......@@ -156,6 +156,7 @@ CHIPSET(0x5912, kbl_gt2, "Intel(R) HD Graphics 630 (Kaby Lake GT2)")
CHIPSET(0x5916, kbl_gt2, "Intel(R) HD Graphics 620 (Kaby Lake GT2)")
CHIPSET(0x591A, kbl_gt2, "Intel(R) HD Graphics P630 (Kaby Lake GT2)")
CHIPSET(0x591B, kbl_gt2, "Intel(R) HD Graphics 630 (Kaby Lake GT2)")
CHIPSET(0x591C, kbl_gt2, "Intel(R) Kaby Lake GT2")
CHIPSET(0x591D, kbl_gt2, "Intel(R) HD Graphics P630 (Kaby Lake GT2)")
CHIPSET(0x591E, kbl_gt2, "Intel(R) HD Graphics 615 (Kaby Lake GT2)")
CHIPSET(0x5921, kbl_gt2, "Intel(R) Kabylake GT2F")
......@@ -165,8 +166,8 @@ CHIPSET(0x5927, kbl_gt3, "Intel(R) Iris Plus Graphics 650 (Kaby Lake GT3e)")
CHIPSET(0x593B, kbl_gt4, "Intel(R) Kabylake GT4")
CHIPSET(0x3184, glk, "Intel(R) UHD Graphics 605 (Geminilake)")
CHIPSET(0x3185, glk_2x6, "Intel(R) UHD Graphics 600 (Geminilake 2x6)")
CHIPSET(0x3E90, cfl_gt1, "Intel(R) HD Graphics (Coffeelake 2x6 GT1)")
CHIPSET(0x3E93, cfl_gt1, "Intel(R) HD Graphics (Coffeelake 2x6 GT1)")
CHIPSET(0x3E90, cfl_gt1, "Intel(R) UHD Graphics 610 (Coffeelake 2x6 GT1)")
CHIPSET(0x3E93, cfl_gt1, "Intel(R) UHD Graphics 610 (Coffeelake 2x6 GT1)")
CHIPSET(0x3E99, cfl_gt1, "Intel(R) HD Graphics (Coffeelake 2x6 GT1)")
CHIPSET(0x3EA1, cfl_gt1, "Intel(R) HD Graphics (Coffeelake 2x6 GT1)")
CHIPSET(0x3EA4, cfl_gt1, "Intel(R) HD Graphics (Coffeelake 2x6 GT1)")
......@@ -196,3 +197,11 @@ CHIPSET(0x5A50, cnl_5x8, "Intel(R) HD Graphics (Cannonlake 5x8 GT2)")
CHIPSET(0x5A51, cnl_5x8, "Intel(R) HD Graphics (Cannonlake 5x8 GT2)")
CHIPSET(0x5A52, cnl_5x8, "Intel(R) HD Graphics (Cannonlake 5x8 GT2)")
CHIPSET(0x5A54, cnl_5x8, "Intel(R) HD Graphics (Cannonlake 5x8 GT2)")
CHIPSET(0x8A50, icl_8x8, "Intel(R) HD Graphics (Ice Lake 8x8 GT2)")
CHIPSET(0x8A51, icl_8x8, "Intel(R) HD Graphics (Ice Lake 8x8 GT2)")
CHIPSET(0x8A52, icl_8x8, "Intel(R) HD Graphics (Ice Lake 8x8 GT2)")
CHIPSET(0x8A5A, icl_6x8, "Intel(R) HD Graphics (Ice Lake 6x8 GT1.5)")
CHIPSET(0x8A5B, icl_4x8, "Intel(R) HD Graphics (Ice Lake 4x8 GT1)")
CHIPSET(0x8A5C, icl_6x8, "Intel(R) HD Graphics (Ice Lake 6x8 GT1.5)")
CHIPSET(0x8A5D, icl_4x8, "Intel(R) HD Graphics (Ice Lake 4x8 GT1)")
CHIPSET(0x8A71, icl_1x8, "Intel(R) HD Graphics (Ice Lake 1x8 GT0.5)")
......@@ -149,8 +149,7 @@ xf86CrtcPtr ms_dri2_crtc_covering_drawable(DrawablePtr pDraw);
int ms_get_crtc_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc);
uint64_t ms_crtc_msc_to_kernel_msc(xf86CrtcPtr crtc, uint64_t expect);
uint64_t ms_kernel_msc_to_crtc_msc(xf86CrtcPtr crtc, uint64_t sequence);
uint64_t ms_kernel_msc_to_crtc_msc(xf86CrtcPtr crtc, uint64_t sequence, Bool is64bit);
Bool ms_dri2_screen_init(ScreenPtr screen);
......
......@@ -180,7 +180,6 @@ typedef struct {
* lies, and we need to give a reliable 64-bit msc for GL, so we
* have to track and convert to a userland-tracked 64-bit msc.
*/
int32_t vblank_offset;
uint32_t msc_prev;
uint64_t msc_high;
/** @} */
......
......@@ -19,6 +19,7 @@ shared_module(
common_dep,
udev_dep,
libdrm_dep,
gbm_dep,
],
install: true,
......
......@@ -263,6 +263,8 @@ ms_present_check_flip(RRCrtcPtr crtc,
format = gbm_bo_get_format(gbm);
modifier = gbm_bo_get_modifier(gbm);
gbm_bo_destroy(gbm);
if (!drmmode_is_format_supported(scrn, format, modifier)) {
if (reason)
*reason = PRESENT_FLIP_REASON_BUFFER_FORMAT;
......
......@@ -226,7 +226,6 @@ ms_queue_vblank(xf86CrtcPtr crtc, ms_queue_flag flags,
/* Queue an event at the specified sequence */
if (ms->has_queue_sequence || !ms->tried_queue_sequence) {
uint32_t drm_flags = 0;
uint64_t kernel;
uint64_t kernel_queued;
ms->tried_queue_sequence = TRUE;
......@@ -236,13 +235,11 @@ ms_queue_vblank(xf86CrtcPtr crtc, ms_queue_flag flags,
if (flags & MS_QUEUE_NEXT_ON_MISS)
drm_flags |= DRM_CRTC_SEQUENCE_NEXT_ON_MISS;
kernel = ms_crtc_msc_to_kernel_msc(crtc, msc);
ret = drmCrtcQueueSequence(ms->fd, drmmode_crtc->mode_crtc->crtc_id,
drm_flags,
kernel, &kernel_queued, seq);
drm_flags, msc, &kernel_queued, seq);
if (ret == 0) {
if (msc_queued)
*msc_queued = ms_kernel_msc_to_crtc_msc(crtc, kernel_queued);
*msc_queued = ms_kernel_msc_to_crtc_msc(crtc, kernel_queued, TRUE);
ms->has_queue_sequence = TRUE;
return TRUE;
}
......@@ -260,13 +257,12 @@ ms_queue_vblank(xf86CrtcPtr crtc, ms_queue_flag flags,
if (flags & MS_QUEUE_NEXT_ON_MISS)
vbl.request.type |= DRM_VBLANK_NEXTONMISS;
vbl.request.sequence = (flags & MS_QUEUE_RELATIVE) ?
msc : ms_crtc_msc_to_kernel_msc(crtc, msc);
vbl.request.sequence = msc;
vbl.request.signal = seq;
ret = drmWaitVBlank(ms->fd, &vbl);
if (ret == 0) {
if (msc_queued)
*msc_queued = ms_kernel_msc_to_crtc_msc(crtc, vbl.reply.sequence);
*msc_queued = ms_kernel_msc_to_crtc_msc(crtc, vbl.reply.sequence, FALSE);
return TRUE;
}
check:
......@@ -279,67 +275,63 @@ ms_queue_vblank(xf86CrtcPtr crtc, ms_queue_flag flags,
}
/**
* Convert a 32-bit kernel MSC sequence number to a 64-bit local sequence
* number, adding in the vblank_offset and high 32 bits, and dealing
* with 64-bit wrapping
* Convert a 32-bit or 64-bit kernel MSC sequence number to a 64-bit local
* sequence number, adding in the high 32 bits, and dealing with 32-bit
* wrapping if needed.
*/
uint64_t
ms_kernel_msc_to_crtc_msc(xf86CrtcPtr crtc, uint64_t sequence)
ms_kernel_msc_to_crtc_msc(xf86CrtcPtr crtc, uint64_t sequence, Bool is64bit)
{
drmmode_crtc_private_rec *drmmode_crtc = crtc->driver_private;
sequence += drmmode_crtc->vblank_offset;
if ((int32_t) (sequence - drmmode_crtc->msc_prev) < -0x40000000)
if (!is64bit) {
/* sequence is provided as a 32 bit value from one of the 32 bit apis,
* e.g., drmWaitVBlank(), classic vblank events, or pageflip events.
*
* Track and handle 32-Bit wrapping, somewhat robust against occasional
* out-of-order not always monotonically increasing sequence values.
*/
if ((int64_t) sequence < ((int64_t) drmmode_crtc->msc_prev - 0x40000000))
drmmode_crtc->msc_high += 0x100000000L;
if ((int64_t) sequence > ((int64_t) drmmode_crtc->msc_prev + 0x40000000))
drmmode_crtc->msc_high -= 0x100000000L;
drmmode_crtc->msc_prev = sequence;
return drmmode_crtc->msc_high + sequence;
}
/* True 64-Bit sequence from Linux 4.15+ 64-Bit drmCrtcGetSequence /
* drmCrtcQueueSequence apis and events. Pass through sequence unmodified,
* but update the 32-bit tracking variables with reliable ground truth.
*
* With 64-Bit api in use, the only !is64bit input is from pageflip events,
* and any pageflip event is usually preceeded by some is64bit input from
* swap scheduling, so this should provide reliable mapping for pageflip
* events based on true 64-bit input as baseline as well.
*/
drmmode_crtc->msc_prev = sequence;
drmmode_crtc->msc_high = sequence & 0xffffffff00000000;
return sequence;
}
int
ms_get_crtc_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
{
ScreenPtr screen = crtc->randr_crtc->pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
modesettingPtr ms = modesettingPTR(scrn);
uint64_t kernel_msc;
if (!ms_get_kernel_ust_msc(crtc, &kernel_msc, ust))
return BadMatch;
*msc = ms_kernel_msc_to_crtc_msc(crtc, kernel_msc);
*msc = ms_kernel_msc_to_crtc_msc(crtc, kernel_msc, ms->has_queue_sequence);
return Success;
}
#define MAX_VBLANK_OFFSET 1000
/**
* Convert a 64-bit adjusted MSC value into a 64-bit kernel sequence number,
* by subtracting out the vblank_offset term.
*
* This also updates the vblank_offset when it notices that the value should
* change.
*/
uint64_t
ms_crtc_msc_to_kernel_msc(xf86CrtcPtr crtc, uint64_t expect)
{
drmmode_crtc_private_rec *drmmode_crtc = crtc->driver_private;
uint64_t msc;
uint64_t ust;
int64_t diff;
if (ms_get_crtc_ust_msc(crtc, &ust, &msc) == Success) {
diff = expect - msc;
/* We're way off here, assume that the kernel has lost its mind
* and smack the vblank back to something sensible
*/
if (diff < -MAX_VBLANK_OFFSET || MAX_VBLANK_OFFSET < diff) {
drmmode_crtc->vblank_offset += (int32_t) diff;
if (drmmode_crtc->vblank_offset > -MAX_VBLANK_OFFSET &&
drmmode_crtc->vblank_offset < MAX_VBLANK_OFFSET)
drmmode_crtc->vblank_offset = 0;
}
}
return (expect - drmmode_crtc->vblank_offset);
}
/**
* Check for pending DRM events and process them.
*/
......@@ -455,7 +447,7 @@ ms_drm_abort(ScrnInfoPtr scrn, Bool (*match)(void *data, void *match_data),
* drm event queue and calls the handler for it.
*/
static void
ms_drm_sequence_handler(int fd, uint64_t frame, uint64_t ns, uint64_t user_data)
ms_drm_sequence_handler(int fd, uint64_t frame, uint64_t ns, Bool is64bit, uint64_t user_data)
{
struct ms_drm_queue *q, *tmp;
uint32_t seq = (uint32_t) user_data;
......@@ -464,7 +456,7 @@ ms_drm_sequence_handler(int fd, uint64_t frame, uint64_t ns, uint64_t user_data)
if (q->seq == seq) {
uint64_t msc;
msc = ms_kernel_msc_to_crtc_msc(q->crtc, frame);
msc = ms_kernel_msc_to_crtc_msc(q->crtc, frame, is64bit);
xorg_list_del(&q->list);
q->handler(msc, ns / 1000, q->data);
free(q);
......@@ -473,11 +465,20 @@ ms_drm_sequence_handler(int fd, uint64_t frame, uint64_t ns, uint64_t user_data)
}
}
static void
ms_drm_sequence_handler_64bit(int fd, uint64_t frame, uint64_t ns, uint64_t user_data)
{
/* frame is true 64 bit wrapped into 64 bit */
ms_drm_sequence_handler(fd, frame, ns, TRUE, user_data);
}
static void
ms_drm_handler(int fd, uint32_t frame, uint32_t sec, uint32_t usec,
void *user_ptr)
{
ms_drm_sequence_handler(fd, frame, ((uint64_t) sec * 1000000 + usec) * 1000, (uint32_t) (uintptr_t) user_ptr);
/* frame is 32 bit wrapped into 64 bit */
ms_drm_sequence_handler(fd, frame, ((uint64_t) sec * 1000000 + usec) * 1000,
FALSE, (uint32_t) (uintptr_t) user_ptr);
}
Bool
......@@ -491,7 +492,7 @@ ms_vblank_screen_init(ScreenPtr screen)
ms->event_context.version = 4;
ms->event_context.vblank_handler = ms_drm_handler;
ms->event_context.page_flip_handler = ms_drm_handler;
ms->event_context.sequence_handler = ms_drm_sequence_handler;
ms->event_context.sequence_handler = ms_drm_sequence_handler_64bit;
/* We need to re-register the DRM fd for the synchronisation
* feedback on every server generation, so perform the
......
......@@ -546,8 +546,8 @@ glamor_get_formats(ScreenPtr screen,
}
_X_EXPORT Bool
glamor_get_modifiers(ScreenPtr screen, CARD32 format,
CARD32 *num_modifiers, uint64_t **modifiers)
glamor_get_modifiers(ScreenPtr screen, uint32_t format,
uint32_t *num_modifiers, uint64_t **modifiers)
{
struct xwl_screen *xwl_screen = xwl_screen_get(screen);
struct xwl_gbm_private *xwl_gbm = xwl_gbm_get(xwl_screen);
......