diff --git a/hw/kdrive/fake/fake.h b/hw/kdrive/fake/fake.h index 539a0eeaf9..7bee219e0e 100644 --- a/hw/kdrive/fake/fake.h +++ b/hw/kdrive/fake/fake.h @@ -46,7 +46,6 @@ typedef struct _fakeScrPriv { typedef struct _fakeScreenConf { int shadow; KdGlamorInfo glamor_info; - const char *dri_path; } FakeScreenConf; extern KdCardFuncs fakeFuncs; diff --git a/hw/kdrive/fake/fake_glamor.c b/hw/kdrive/fake/fake_glamor.c index feb6f3a244..eaba8fd541 100644 --- a/hw/kdrive/fake/fake_glamor.c +++ b/hw/kdrive/fake/fake_glamor.c @@ -5,20 +5,9 @@ #include -#include "present.h" -#include "Xext/present/present_priv.h" /* extern uint32_t FakeScreenFps; */ - #include "fake.h" #include "kglamor.h" -#include "glamor.h" - -#ifdef WITH_LIBDRM -#include -#endif - -#include - Bool fakeInitAccel(ScreenPtr pScreen) { @@ -26,56 +15,8 @@ fakeInitAccel(ScreenPtr pScreen) KdScreenInfo *screen = pScreenPriv->screen; FakeScrPriv *scrpriv = screen->driver; FakeScreenConf *config = screen->card->closure; - int caps = GLAMOR_EGL_CAP_NONE; - int has_dri3; - if (config->dri_path) { - scrpriv->dri_fd = open(config->dri_path, O_RDWR); - if (scrpriv->dri_fd >= 0) { -#ifdef WITH_LIBDRM - drmDropMaster(scrpriv->dri_fd); -#endif - } else { - LogMessage(X_WARNING, "Xfake(%d): Could not open %s: %s\n", pScreen->myNum, config->dri_path, strerror(errno)); - } - } else { - scrpriv->dri_fd = -1; - } - - config->glamor_info.dri_fd = scrpriv->dri_fd; - - if (!KdGlamorInit(pScreen, &config->glamor_info, &caps)) { - if (scrpriv->dri_fd >= 0) { - close(scrpriv->dri_fd); - scrpriv->dri_fd = -1; - config->glamor_info.dri_fd = -1; - } - return FALSE; - } - -#define GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT (GLAMOR_EGL_CAP_DRI3_IMPORT | GLAMOR_EGL_CAP_DRI3_EXPORT) - has_dri3 = (caps & GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT) == GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT; - LogMessage(X_INFO, "Xfake(%d): DRI3 %s initialized\n", pScreen->myNum, has_dri3 ? "" : "not"); - -#if 0 /* Not yet implemented */ - LogMessage(X_INFO, "Xfake(%d): DRI3 explicit sync %s\n", pScreen->myNum, - (caps & GLAMOR_EGL_CAP_DRI3_SYNCOBJ) ? - "available" : "unavailable"); -#endif - - if (scrpriv->dri_fd >= 0) { - /* - * X clients use present to try to synchronize with the screen - * If no global fake rate was requested, use the highest value dix accepts (600) - */ - if (!FakeScreenFps) { - FakeScreenFps = 600; - present_screen_init(pScreen, NULL); - FakeScreenFps = 0; - } - } - - return TRUE; + return KdGlamorInit(pScreen, &config->glamor_info, NULL, &scrpriv->dri_fd); } void diff --git a/hw/kdrive/fake/fakeinit.c b/hw/kdrive/fake/fakeinit.c index 1216d05a42..dad3417821 100644 --- a/hw/kdrive/fake/fakeinit.c +++ b/hw/kdrive/fake/fakeinit.c @@ -32,6 +32,7 @@ static FakeScreenConf *fakeCurrScreen = NULL; static const FakeScreenConf fakeDefaultConfig = { .shadow = -1, + .glamor_info = {.fake_rate = 600, .drop_master = TRUE,}, }; void @@ -39,7 +40,6 @@ InitCard(char *name) { fakeCurrScreen = XNFalloc(sizeof(*fakeCurrScreen)); *fakeCurrScreen = fakeDefaultConfig; - fakeCurrScreen->glamor_info = kdGlamorDefault; KdCardInfoAdd(&fakeFuncs, fakeCurrScreen); } @@ -100,7 +100,7 @@ ddxProcessArgument(int argc, char **argv, int i) return 1; } - glamor_arg = KdGlamorParse(&fakeCurrScreen->glamor_info, &fakeCurrScreen->dri_path, argc, argv, i); + glamor_arg = KdGlamorParse(&fakeCurrScreen->glamor_info, argc, argv, i); if (glamor_arg) { return glamor_arg; } diff --git a/hw/kdrive/fake/meson.build b/hw/kdrive/fake/meson.build index 2a8d7a7ac8..dacf0c15b4 100644 --- a/hw/kdrive/fake/meson.build +++ b/hw/kdrive/fake/meson.build @@ -4,10 +4,8 @@ srcs = [ '../../stubs/ddxBeforeReset.c', ] -fake_glamor = [] if build_glamor srcs += 'fake_glamor.c' - fake_glamor += glamor endif xfake_server = executable( @@ -18,10 +16,9 @@ xfake_server = executable( include_directories('../src'), include_directories('../os/stub'), ], - dependencies: [ common_dep, libdrm_dep ], + dependencies: common_dep, link_with: [ libxserver_main, - fake_glamor, kdrive, stub, libxserver_fb, diff --git a/hw/kdrive/fbdev/fb_glamor.c b/hw/kdrive/fbdev/fb_glamor.c index f84c471151..2a7b971deb 100644 --- a/hw/kdrive/fbdev/fb_glamor.c +++ b/hw/kdrive/fbdev/fb_glamor.c @@ -5,20 +5,9 @@ #include -#include "present.h" -#include "Xext/present/present_priv.h" /* extern uint32_t FakeScreenFps; */ - #include "fbdev.h" #include "kglamor.h" -#include "glamor.h" - -#ifdef WITH_LIBDRM -#include -#endif - -#include - Bool fbdevInitAccel(ScreenPtr pScreen) { @@ -26,57 +15,12 @@ fbdevInitAccel(ScreenPtr pScreen) KdScreenInfo *screen = pScreenPriv->screen; FbdevScrPriv *scrpriv = screen->driver; FbScreenConf *config = screen->card->closure; - int caps = GLAMOR_EGL_CAP_NONE; - int has_dri3; - if (config->dri_path) { - scrpriv->dri_fd = open(config->dri_path, O_RDWR); - if (scrpriv->dri_fd >= 0) { -#ifdef WITH_LIBDRM - drmDropMaster(scrpriv->dri_fd); -#endif - } else { - LogMessage(X_WARNING, "Xfbdev(%d): Could not open %s: %s\n", pScreen->myNum, config->dri_path, strerror(errno)); - } - } else { - scrpriv->dri_fd = -1; + if (screen->rate > 60) { + config->glamor_info.fake_rate = screen->rate; } - config->glamor_info.dri_fd = scrpriv->dri_fd; - - if (!KdGlamorInit(pScreen, &config->glamor_info, &caps)) { - if (scrpriv->dri_fd >= 0) { - close(scrpriv->dri_fd); - scrpriv->dri_fd = -1; - config->glamor_info.dri_fd = -1; - } - return FALSE; - } - -#define GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT (GLAMOR_EGL_CAP_DRI3_IMPORT | GLAMOR_EGL_CAP_DRI3_EXPORT) - has_dri3 = (caps & GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT) == GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT; - LogMessage(X_INFO, "Xfbdev(%d): DRI3 %s initialized\n", pScreen->myNum, has_dri3 ? "" : "not"); - -#if 0 /* Not yet implemented */ - LogMessage(X_INFO, "Xfbdev(%d): DRI3 explicit sync %s\n", pScreen->myNum, - (caps & GLAMOR_EGL_CAP_DRI3_SYNCOBJ) ? - "available" : "unavailable"); -#endif - - if (scrpriv->dri_fd >= 0) { - /* - * X clients use present to try to synchronize with the screen - * If no global fake rate was requested and the screen's rate is sane, - * use that instead of the 60 fps default - */ - if (!FakeScreenFps && (screen->rate >= 60) && (screen->rate <= 600)) { - FakeScreenFps = screen->rate; - present_screen_init(pScreen, NULL); - FakeScreenFps = 0; - } - } - - return TRUE; + return KdGlamorInit(pScreen, &config->glamor_info, NULL, &scrpriv->dri_fd); } void diff --git a/hw/kdrive/fbdev/fbdev.h b/hw/kdrive/fbdev/fbdev.h index 6313ced72c..c044bf5138 100644 --- a/hw/kdrive/fbdev/fbdev.h +++ b/hw/kdrive/fbdev/fbdev.h @@ -57,7 +57,6 @@ typedef struct _fbScreenConf { const char *fb_path; Bool shadow; KdGlamorInfo glamor_info; - const char *dri_path; } FbScreenConf; extern KdCardFuncs fbdevFuncs; diff --git a/hw/kdrive/fbdev/fbinit.c b/hw/kdrive/fbdev/fbinit.c index a0a9bc4f3d..97a4d676b4 100644 --- a/hw/kdrive/fbdev/fbinit.c +++ b/hw/kdrive/fbdev/fbinit.c @@ -36,6 +36,7 @@ static FbScreenConf *fbCurrScreen = NULL; static const FbScreenConf fbDefaultConfig = { .fb_path = NULL, .shadow = TRUE, + .glamor_info = {.drop_master = TRUE,}, }; static void fbdevLogScreenInfo(const FbScreenConf *config, int screen_num); @@ -65,7 +66,6 @@ FbdevLogInit(void) } } else { FbScreenConf fbDummyConfig = fbDefaultConfig; - fbDummyConfig.glamor_info = kdGlamorDefault; fbdevLogScreenInfo(&fbDummyConfig, 0); } } @@ -75,7 +75,6 @@ InitCard(char *name) { fbCurrScreen = XNFalloc(sizeof(*fbCurrScreen)); *fbCurrScreen = fbDefaultConfig; - fbCurrScreen->glamor_info = kdGlamorDefault; KdCardInfoAdd(&fbdevFuncs, fbCurrScreen); } @@ -93,7 +92,7 @@ fbdevLogScreenInfo(const FbScreenConf *config, int screen_num) config->glamor_info.glvnd ? config->glamor_info.glvnd : "not passed"); LogMessage(X_INFO, "Xfbdev(%d): dri device: %s\n", screen_num, - config->dri_path ? config->dri_path : "none"); + config->glamor_info.dri_path ? config->glamor_info.dri_path : "none"); LogMessage(X_INFO, "Xfbdev(%d): glamor OpenGL contexts %s\n", screen_num, !config->glamor_info.force_es ? "allowed" : "forbidden"); @@ -173,7 +172,7 @@ ddxProcessArgument(int argc, char **argv, int i) return 1; } - glamor_arg = KdGlamorParse(&fbCurrScreen->glamor_info, &fbCurrScreen->dri_path, argc, argv, i); + glamor_arg = KdGlamorParse(&fbCurrScreen->glamor_info, argc, argv, i); if (glamor_arg) { return glamor_arg; } diff --git a/hw/kdrive/fbdev/meson.build b/hw/kdrive/fbdev/meson.build index e6940396f2..e059a3e7e8 100644 --- a/hw/kdrive/fbdev/meson.build +++ b/hw/kdrive/fbdev/meson.build @@ -4,10 +4,8 @@ srcs = [ '../../stubs/ddxBeforeReset.c', ] -fbdev_glamor = [] if build_glamor srcs += 'fb_glamor.c' - fbdev_glamor += glamor endif xfbdev_server = executable( @@ -18,10 +16,9 @@ xfbdev_server = executable( include_directories('../src'), include_directories('../os/linux'), ], - dependencies: [ common_dep, libdrm_dep ], + dependencies: common_dep, link_with: [ libxserver_main, - fbdev_glamor, kdrive, linux, libxserver_fb, diff --git a/hw/kdrive/modesetting/meson.build b/hw/kdrive/modesetting/meson.build index 3e336460fd..e6c2e35da5 100644 --- a/hw/kdrive/modesetting/meson.build +++ b/hw/kdrive/modesetting/meson.build @@ -4,10 +4,8 @@ srcs = [ '../../stubs/ddxBeforeReset.c', ] -ms_glamor = [] if build_glamor srcs += 'ms_glamor.c' - ms_glamor += glamor endif xmodesetting_server = executable( @@ -22,7 +20,6 @@ xmodesetting_server = executable( dependencies: [ common_dep, libdrm_dep, gbm_dep ], link_with: [ libxserver_main, - ms_glamor, kdrive, linux, libxserver_fb, diff --git a/hw/kdrive/modesetting/ms_glamor.c b/hw/kdrive/modesetting/ms_glamor.c index 48ab8c6874..d2cecebdd2 100644 --- a/hw/kdrive/modesetting/ms_glamor.c +++ b/hw/kdrive/modesetting/ms_glamor.c @@ -5,75 +5,32 @@ #include -#include "present.h" -#include "Xext/present/present_priv.h" /* extern uint32_t FakeScreenFps; */ - #include "modesetting.h" #include "kglamor.h" #include "glamor.h" -#include - -#include - Bool msInitAccel(ScreenPtr pScreen) { KdScreenPriv(pScreen); KdScreenInfo *screen = pScreenPriv->screen; msScrPriv *scrpriv = screen->driver; - msPriv *priv = screen->card->driver; MsScreenConf *config = screen->card->closure; int caps = GLAMOR_EGL_CAP_NONE; - int has_dri3; - if (config->dri_path) { - scrpriv->dri_fd = open(config->dri_path, O_RDWR); - if (scrpriv->dri_fd >= 0) { -#ifdef WITH_LIBDRM - drmDropMaster(scrpriv->dri_fd); -#endif - } else { - LogMessage(X_WARNING, "Xmodesetting(%d): Could not open %s: %s\n", pScreen->myNum, config->dri_path, strerror(errno)); - } - } else { - scrpriv->dri_fd = dup(gbm_device_get_fd(priv->gbm)); + if (screen->rate > 60) { + config->glamor_info.fake_rate = screen->rate; } - config->glamor_info.dri_fd = scrpriv->dri_fd; - - if (!KdGlamorInit(pScreen, &config->glamor_info, &caps)) { - if (scrpriv->dri_fd >= 0) { - close(scrpriv->dri_fd); - scrpriv->dri_fd = -1; - config->glamor_info.dri_fd = -1; - } + if (!KdGlamorInit(pScreen, &config->glamor_info, &caps, &scrpriv->dri_fd)) { return FALSE; } -#define GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT (GLAMOR_EGL_CAP_DRI3_IMPORT | GLAMOR_EGL_CAP_DRI3_EXPORT) - has_dri3 = (caps & GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT) == GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT; - LogMessage(X_INFO, "Xmodesetting(%d): DRI3 %s initialized\n", pScreen->myNum, has_dri3 ? "" : "not"); - -#if 0 /* Not yet implemented */ - LogMessage(X_INFO, "Xmodesetting(%d): DRI3 explicit sync %s\n", pScreen->myNum, - (caps & GLAMOR_EGL_CAP_DRI3_SYNCOBJ) ? - "available" : "unavailable"); -#endif - - if (scrpriv->dri_fd >= 0) { - /* - * X clients use present to try to synchronize with the screen - * If no global fake rate was requested and the screen's rate is sane, - * use that instead of the 60 fps default - */ - if (!FakeScreenFps && (screen->rate >= 60) && (screen->rate <= 600)) { - FakeScreenFps = screen->rate; - present_screen_init(pScreen, NULL); - FakeScreenFps = 0; - } +#if 0 + if (caps & GLAMOR_EGL_CAP_TEXTURE_GBM_BO) { } +#endif return TRUE; } diff --git a/hw/kdrive/modesetting/msinit.c b/hw/kdrive/modesetting/msinit.c index 90a2c14c3d..6a040b55e0 100644 --- a/hw/kdrive/modesetting/msinit.c +++ b/hw/kdrive/modesetting/msinit.c @@ -25,6 +25,7 @@ static MsScreenConf *msCurrScreen = NULL; static const MsScreenConf msDefaultConfig = { .dev_path = NULL, .shadow = TRUE, + .glamor_info = {.use_gbm = TRUE,}, }; static void msLogScreenInfo(const MsScreenConf *config, int screen_num); @@ -54,7 +55,6 @@ msLogInit(void) } } else { MsScreenConf msDummyConfig = msDefaultConfig; - msDummyConfig.glamor_info = kdGlamorDefault; msLogScreenInfo(&msDummyConfig, 0); } } @@ -64,7 +64,6 @@ InitCard(char *name) { msCurrScreen = XNFalloc(sizeof(*msCurrScreen)); *msCurrScreen = msDefaultConfig; - msCurrScreen->glamor_info = kdGlamorDefault; KdCardInfoAdd(&msFuncs, msCurrScreen); } @@ -82,7 +81,7 @@ msLogScreenInfo(const MsScreenConf *config, int screen_num) config->glamor_info.glvnd ? config->glamor_info.glvnd : "not passed"); LogMessage(X_INFO, "Xmodesetting(%d): dri device: %s\n", screen_num, - config->dri_path ? config->dri_path : "none"); + config->glamor_info.dri_path ? config->glamor_info.dri_path : "none"); LogMessage(X_INFO, "Xmodesetting(%d): glamor OpenGL contexts %s\n", screen_num, !config->glamor_info.force_es ? "allowed" : "forbidden"); @@ -155,6 +154,9 @@ ddxProcessArgument(int argc, char **argv, int i) if (!strcmp(argv[i], "-dev")) { if ((i + 1 < argc) && (argv[i + 1][0] != '-')) { msCurrScreen->dev_path = argv[i + 1]; + if (!msCurrScreen->glamor_info.dri_path) { + msCurrScreen->glamor_info.dri_path = msCurrScreen->dev_path; + } return 2; } UseMsg(); @@ -166,7 +168,7 @@ ddxProcessArgument(int argc, char **argv, int i) return 1; } - glamor_arg = KdGlamorParse(&msCurrScreen->glamor_info, &msCurrScreen->dri_path, argc, argv, i); + glamor_arg = KdGlamorParse(&msCurrScreen->glamor_info, argc, argv, i); if (glamor_arg) { return glamor_arg; } diff --git a/hw/kdrive/src/kglamor.c b/hw/kdrive/src/kglamor.c index 1ab06f3e01..d414fc62e9 100644 --- a/hw/kdrive/src/kglamor.c +++ b/hw/kdrive/src/kglamor.c @@ -11,6 +11,9 @@ #include "os/cmdline.h" /* UseMsg() */ +#include "present.h" +#include "Xext/present/present_priv.h" /* extern uint32_t FakeScreenFps; */ + #ifdef GLAMOR #include "glamor.h" #include "glamor_egl.h" @@ -24,23 +27,49 @@ #include -const KdGlamorInfo kdGlamorDefault = { - .glvnd = NULL, - .dri_fd = -1, - .use_gbm = FALSE, - .direct_dri3 = FALSE, - .force_gl = FALSE, - .force_es = FALSE, - .no_xv = FALSE, - .no_render_accel = FALSE, - .force_render_accel = FALSE, - }; +#ifdef WITH_LIBDRM +#include +#else +#ifdef GLAMOR + +#ifdef KDRIVE_LINUX +#include +#endif + +#ifndef DRM_IOCTL_DROP_MASTER +#define DRM_IOCTL_DROP_MASTER 0x641f +#endif + +static int +drmIoctl(int fd, unsigned long request, void *arg) +{ +#ifdef KDRIVE_LINUX + int ret; + + do { + ret = ioctl(fd, request, arg); + } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); + return ret; +#else + return -ENOSYS; +#endif +} + +static int drmDropMaster(int fd) +{ + return drmIoctl(fd, DRM_IOCTL_DROP_MASTER, NULL); +} +#endif +#endif #ifdef GLAMOR Bool -KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps) +KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps, int *dri_fd) { int flags = GLAMOR_USE_EGL_SCREEN; + int has_dri3; + int _caps; + int _dri_fd; glamor_egl_conf_t glamor_egl_conf = { .server_private = NULL, /* only for xf86 */ @@ -48,7 +77,7 @@ KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps) .glamor_egl_priv = NULL, /* only for xf86 */ .GLAMOR_EGL_PRIV_PROC = NULL, /* only for xf86 */ .glvnd_vendor = info->glvnd, - .fd = info->dri_fd, + .fd = -1, .gbm_forbidden = !info->use_gbm, .direct_dri3_only = info->direct_dri3, .auto_dri = FALSE, /* deprecated */ @@ -61,10 +90,31 @@ KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps) .force_es = info->force_es, }; - if (caps) { - *caps = GLAMOR_EGL_CAP_NONE; + if (!caps) { + caps = &_caps; } + *caps = GLAMOR_EGL_CAP_NONE; + + if (!dri_fd) { + dri_fd = &_dri_fd; + } + + if (info->dri_path) { + *dri_fd = open(info->dri_path, O_RDWR); + if (*dri_fd < 0) { + LogMessage(X_WARNING, "KGlamor(%d): Could not open %s: %s\n", pScreen->myNum, info->dri_path, strerror(errno)); + } + } else { + *dri_fd = -1; + } + + if ((*dri_fd >= 0) && info->drop_master) { + drmDropMaster(*dri_fd); + } + + glamor_egl_conf.fd = *dri_fd; + if (!glamor_egl_init_internal(&glamor_egl_conf, caps)) { return FALSE; } @@ -80,7 +130,7 @@ KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps) } } - if (info->dri_fd < 0) { + if (*dri_fd < 0) { flags |= GLAMOR_NO_DRI3; } @@ -88,12 +138,34 @@ KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps) return FALSE; } +#define GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT (GLAMOR_EGL_CAP_DRI3_IMPORT | GLAMOR_EGL_CAP_DRI3_EXPORT) + has_dri3 = (*caps & GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT) == GLAMOR_EGL_CAP_DRI3_IMPORT_EXPORT; + LogMessage(X_INFO, "KGlamor(%d): DRI3 %s initialized\n", pScreen->myNum, has_dri3 ? "" : "not"); + +#if 0 /* Not yet implemented */ + LogMessage(X_INFO, "KGlamor(%d): DRI3 explicit sync %s\n", pScreen->myNum, + (*caps & GLAMOR_EGL_CAP_DRI3_SYNCOBJ) ? + "available" : "unavailable"); +#endif + #ifdef XV if (!info->no_xv) { kd_glamor_xv_init(pScreen); } #endif + if (info->fake_rate && (*dri_fd >= 0)) { + /* + * X clients use present to try to synchronize with the screen + * If no global fake rate was requested and a per-screen rate was requested, use that + */ + if (!FakeScreenFps) { + FakeScreenFps = info->fake_rate; + present_screen_init(pScreen, NULL); + FakeScreenFps = 0; + } + } + return TRUE; } @@ -115,7 +187,7 @@ KdGlamorFini(ScreenPtr pScreen) #endif int -KdGlamorParse(KdGlamorInfo *info, const char **dri_path, int argc, char **argv, int i) +KdGlamorParse(KdGlamorInfo *info, int argc, char **argv, int i) { if (!strcmp(argv[i], "-glamor")) { info->force_render_accel = TRUE; @@ -148,9 +220,7 @@ KdGlamorParse(KdGlamorInfo *info, const char **dri_path, int argc, char **argv, if (!strcmp(argv[i], "-dri")) { if ((i + 1 < argc) && (argv[i + 1][0] != '-')) { - if (dri_path) { - *dri_path = argv[i + 1]; - } + info->dri_path = argv[i + 1]; return 2; } UseMsg(); diff --git a/hw/kdrive/src/kglamor.h b/hw/kdrive/src/kglamor.h index 10abdaa1ee..5bb8994fbe 100644 --- a/hw/kdrive/src/kglamor.h +++ b/hw/kdrive/src/kglamor.h @@ -11,29 +11,28 @@ typedef struct { /* Passed to glamor_egl */ const char* glvnd; /* glvnd vendor library or driver name */ - int dri_fd; /* /dev/dri/[cardxx|renderDxxx] */ + const char* dri_path; /* /dev/dri/[cardxx|renderDxxx] */ Bool use_gbm; /* If glamor should try to use libgbm */ Bool direct_dri3; /* If glamor should only use the direct DRI3 implementation */ Bool force_gl; /* If glamor should only create desktop gl contexts */ Bool force_es; /* If glamor should only create gles contexts */ /* Handled by KdGlamorInit */ + int fake_rate; /* If a fake refresh rate should be used by present */ + Bool drop_master; /* If KdGlamorInit should call drmDropMaster on the dri fd */ Bool no_xv; /* Disable X-Video support */ Bool no_render_accel; /* Disable render acceleration */ Bool force_render_accel; /* Enable render acceleration on top of sw renderers */ } KdGlamorInfo; -/* A sane default config for KdGlamorInit */ -extern const KdGlamorInfo kdGlamorDefault; - #ifdef GLAMOR -Bool KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps); +Bool KdGlamorInit(ScreenPtr pScreen, const KdGlamorInfo *info, int *caps, int *dri_fd); void KdGlamorEnable(ScreenPtr pScreen); void KdGlamorDisable(ScreenPtr pScreen); void KdGlamorFini(ScreenPtr pScreen); #endif -int KdGlamorParse(KdGlamorInfo *info, const char **dri, int argc, char **argv, int i); +int KdGlamorParse(KdGlamorInfo *info, int argc, char **argv, int i); void KdGlamorUseMsg(void); /* Put each screen on a different card */ diff --git a/hw/kdrive/src/meson.build b/hw/kdrive/src/meson.build index 686e9128ac..fbbecba24b 100644 --- a/hw/kdrive/src/meson.build +++ b/hw/kdrive/src/meson.build @@ -37,7 +37,7 @@ configure_file(input : 'kdrive-config.h.meson.in', kdrive = static_library('kdrive', srcs_kdrive, include_directories: inc, - dependencies: common_dep, + dependencies: [ common_dep, libdrm_dep ], link_with: [ libxserver_miext_shadow, kdrive_glamor,