Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
1392ff8
kdrive: Add a closure field to `KdScreenInfo`
stefan11111 Sep 12, 2026
25799b5
kdrive: Add Xmodesetting X server
stefan11111 Sep 12, 2026
7d9bafa
kdrive/glamor: Replace `use_xv` by `no_xv`
stefan11111 Sep 13, 2026
6e48d66
kdrive: Move more glamor-related stuff into kglamor
stefan11111 Sep 13, 2026
168cdee
kdrive/glamor: Add `-nogbm` option
stefan11111 Sep 13, 2026
3981cb4
kdrive/glamor: lift glamor option reporting code
stefan11111 Sep 13, 2026
4db7c4f
kdrive/glamor: Store `dri_fd` in `KdGlamorInfo`
stefan11111 Sep 13, 2026
da459c5
kdrive/glamor: Close `dri_fd` on glamor init error
stefan11111 Sep 13, 2026
89d7873
Xfbdev: `ErrorF(...)` -> `LogMessage(X_ERROR, ...)`
stefan11111 Sep 14, 2026
e061db7
kdrive/modesetting: Mode the drm resources ptr to the card private
stefan11111 Sep 14, 2026
0eb569b
kdrive/modesetting: Move the connector, mode, and crtc to `scrpriv`
stefan11111 Sep 14, 2026
0a364ca
kdrive/modesetting: Add multiple screens on a single card
stefan11111 Sep 14, 2026
803bfd9
kdrive/modesetting: Handle multiple outputs connected on the same card
stefan11111 Sep 15, 2026
00d8d7a
kdrive: Don't try to access screen privates for a screen that wasn't …
stefan11111 Sep 15, 2026
0c11b63
kdrive: Don't disable input devices if already disabled
stefan11111 Sep 15, 2026
f3044c3
kdrive/modesetting: Use the scanout video card for rendering
stefan11111 Sep 15, 2026
f923ee6
kdrive/os/stub: Add a distinctive XInput name
stefan11111 Sep 15, 2026
4fddaa6
kdrive/modesetting: Move gbm functions to another file, support more …
stefan11111 Sep 15, 2026
4998d2a
kdrive: Implement `-videoTest` option
stefan11111 Sep 16, 2026
e8a127c
kdrive/modesetting: Try to use `drmModeAddFB2{,WithModifiers}`
stefan11111 Sep 16, 2026
0704c52
kdrive/modesetting: Tile the front buffer
stefan11111 Sep 16, 2026
0d0d1a8
kdrive/modesetting: Tighten front buffer allocation checks/fallbacks
stefan11111 Sep 16, 2026
4fa9fa2
kdrive/modesetting: Implement DPMS support
stefan11111 Sep 16, 2026
fff2393
kdrive/modesetting: Implement gamma support through RandR
stefan11111 Sep 17, 2026
2b29abb
kdrive/modesetting: Add `-swap` option
stefan11111 Sep 18, 2026
f255839
kdrive/modesetting: Log the front buffer format and modifier
stefan11111 Sep 18, 2026
26ad08a
kdrive/modesetting: Factor out bo swapping code fron RandR
stefan11111 Sep 19, 2026
b4bec28
kdrive/modesetting: swab r-b channels for BGR depth 30 visuals on gles
stefan11111 Sep 19, 2026
888386f
kdrive/modesetting: Fix non-shadow bpp
stefan11111 Sep 20, 2026
3bad09f
kdrive: Don't limit refresh rate by default
stefan11111 Sep 20, 2026
182b27c
kdrive/modesetting: Split modesetting queries into a different file
stefan11111 Sep 24, 2026
bc9e6b8
kdrive/modesetting: Split some functions to `ms_util.c`
stefan11111 Sep 24, 2026
85549e7
kdrive/modesetting: Split RandR functions to their own file
stefan11111 Sep 24, 2026
bd2b96c
kdrive/modesetting: Split damage-tracking functions to their own file
stefan11111 Sep 24, 2026
bd78731
kdrive/modesetting: Split visual mask setting to a separate function
stefan11111 Sep 24, 2026
b8989fa
kdrive/modesetting: Rename the glamor functions
stefan11111 Sep 24, 2026
219c386
kdrive/modesetting: query renderable modifiers
stefan11111 Sep 24, 2026
28ffb6e
kdrive/modesetting: Plug in modifier support
stefan11111 Sep 24, 2026
63f05e4
kdrive/modesetting: Filter multi-plane modifiers
stefan11111 Sep 24, 2026
6c15cbf
kdrive/modesetting: Get RandR working again
stefan11111 Sep 25, 2026
b2a4a36
kdrive/modesetting: Fix 24 bpp front
stefan11111 Sep 25, 2026
efad7da
kdrive/modesetting: Simplify `modesetting_open`
stefan11111 Sep 26, 2026
d1231ff
kdrive/modesetting: Create a mapped front first, have glamor only til…
stefan11111 Sep 26, 2026
fc7dc68
kdrive/modesetting: Fix visual masks in `msGlamorTileFront`
stefan11111 Sep 26, 2026
e807aab
kdrive: Set bitsPerRGB to 10 for depth 30 visuals
stefan11111 Sep 26, 2026
73111cc
kdrive/modesetting: Add options `-notile` `-planar`
stefan11111 Sep 26, 2026
4ee6c65
kdrive/modesetting: Add hw cursor support
stefan11111 Sep 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion hw/kdrive/Xkdrive.man
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@ enables DRI3 support for the X server.
force enables glamor render acceleration (even on top of sw renderers like softpipe/llvmpipe).
.TP 8
.B -gbm
allows glamor to use libgbm (it is only used for matching EGLDeviceEXT's to dri fd's).
allows glamor to use libgbm.
.TP 8
.B -nogbm
forces glamor to not use libgbm.
.TP 8
.B -direct-dri3
Forces glamor to use the direct implementation of DRI3.
Expand Down
2 changes: 1 addition & 1 deletion hw/kdrive/ephyr/ephyrinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ processScreenOrOutputArg(const char *screen_size, const char *output, char *pare
unsigned long p_id = 0;
Bool use_geometry;

screen = KdScreenInfoAdd(card);
screen = KdScreenInfoAdd(card, NULL);
KdParseScreen(screen, screen_size);
screen->driver = calloc(1, sizeof(EphyrScrPriv));
if (!screen->driver)
Expand Down
4 changes: 0 additions & 4 deletions hw/kdrive/fake/fake.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,11 @@ typedef struct _fakePriv {
typedef struct _fakeScrPriv {
Rotation randr;
Bool shadow;
#ifdef GLAMOR
int dri_fd;
#endif
} FakeScrPriv;

typedef struct _fakeScreenConf {
int shadow;
KdGlamorInfo glamor_info;
const char *dri_path;
} FakeScreenConf;

extern KdCardFuncs fakeFuncs;
Expand Down
70 changes: 3 additions & 67 deletions hw/kdrive/fake/fake_glamor.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,77 +5,17 @@

#include <kdrive-config.h>

#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 <xf86drm.h>
#endif

#include <errno.h>

Bool
fakeInitAccel(ScreenPtr pScreen)
{
KdScreenPriv(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);
}

void
Expand All @@ -95,11 +35,7 @@ fakeFiniAccel(ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FakeScrPriv *scrpriv = screen->driver;

KdGlamorFini(pScreen);
FakeScreenConf *config = screen->card->closure;

if (scrpriv->dri_fd >= 0) {
close(scrpriv->dri_fd);
}
KdGlamorFini(pScreen, &config->glamor_info);
}
4 changes: 2 additions & 2 deletions hw/kdrive/fake/fakeinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ static FakeScreenConf *fakeCurrScreen = NULL;

static const FakeScreenConf fakeDefaultConfig = {
.shadow = -1,
.glamor_info = {.fake_rate = -1, .drop_master = TRUE,},
};

void
InitCard(char *name)
{
fakeCurrScreen = XNFalloc(sizeof(*fakeCurrScreen));
*fakeCurrScreen = fakeDefaultConfig;
fakeCurrScreen->glamor_info = kdGlamorDefault;
KdCardInfoAdd(&fakeFuncs, fakeCurrScreen);
}

Expand Down Expand Up @@ -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;
}
Expand Down
5 changes: 1 addition & 4 deletions hw/kdrive/fake/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ srcs = [
'../../stubs/ddxBeforeReset.c',
]

fake_glamor = []
if build_glamor
srcs += 'fake_glamor.c'
fake_glamor += glamor
endif

xfake_server = executable(
Expand All @@ -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,
Expand Down
71 changes: 3 additions & 68 deletions hw/kdrive/fbdev/fb_glamor.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,78 +5,17 @@

#include <kdrive-config.h>

#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 <xf86drm.h>
#endif

#include <errno.h>

Bool
fbdevInitAccel(ScreenPtr pScreen)
{
KdScreenPriv(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;
}

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);
}

void
Expand All @@ -96,11 +35,7 @@ fbdevFiniAccel(ScreenPtr pScreen)
{
KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen;
FbdevScrPriv *scrpriv = screen->driver;

KdGlamorFini(pScreen);
FbScreenConf *config = screen->card->closure;

if (scrpriv->dri_fd >= 0) {
close(scrpriv->dri_fd);
}
KdGlamorFini(pScreen, &config->glamor_info);
}
6 changes: 3 additions & 3 deletions hw/kdrive/fbdev/fbdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ fbdevInitialize(KdCardInfo * card, FbdevPriv * priv)
if (config->fb_path) {
priv->fd = open(config->fb_path, O_RDWR);
if (priv->fd < 0) {
ErrorF("Error opening framebuffer %s: %s\n",
config->fb_path, strerror(errno));
LogMessage(X_ERROR, "Xfbdev(%d): Error opening framebuffer %s: %s\n",
card->mynum, config->fb_path, strerror(errno));
return FALSE;
}
LogMessage(X_INFO, "Xfbdev(%d): Using framebuffer device: %s\n",
Expand All @@ -67,7 +67,7 @@ fbdevInitialize(KdCardInfo * card, FbdevPriv * priv)
}
}
if (priv->fd < 0) {
ErrorF("Error opening framebuffers /dev/fb[0-31]\n");
LogMessage(X_ERROR, "Xfbdev(%d): Error opening framebuffers /dev/fb[0-31]\n", card->mynum);
return FALSE;
}
LogMessage(X_INFO, "Xfbdev(%d): Using framebuffer device: %s\n", card->mynum, devbuf);
Expand Down
4 changes: 0 additions & 4 deletions hw/kdrive/fbdev/fbdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,12 @@ typedef struct _fbdevScrPriv {
Bool shadow;
int max_width;
int max_height;
#ifdef GLAMOR
int dri_fd;
#endif
} FbdevScrPriv;

typedef struct _fbScreenConf {
const char *fb_path;
Bool shadow;
KdGlamorInfo glamor_info;
const char *dri_path;
} FbScreenConf;

extern KdCardFuncs fbdevFuncs;
Expand Down
26 changes: 3 additions & 23 deletions hw/kdrive/fbdev/fbinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ static FbScreenConf *fbCurrScreen = NULL;
static const FbScreenConf fbDefaultConfig = {
.fb_path = NULL,
.shadow = TRUE,
.glamor_info = {.fake_rate = -1, .drop_master = TRUE,},
};

static void fbdevLogScreenInfo(const FbScreenConf *config, int screen_num);
Expand Down Expand Up @@ -65,7 +66,6 @@ FbdevLogInit(void)
}
} else {
FbScreenConf fbDummyConfig = fbDefaultConfig;
fbDummyConfig.glamor_info = kdGlamorDefault;
fbdevLogScreenInfo(&fbDummyConfig, 0);
}
}
Expand All @@ -75,7 +75,6 @@ InitCard(char *name)
{
fbCurrScreen = XNFalloc(sizeof(*fbCurrScreen));
*fbCurrScreen = fbDefaultConfig;
fbCurrScreen->glamor_info = kdGlamorDefault;
KdCardInfoAdd(&fbdevFuncs, fbCurrScreen);
}

Expand All @@ -89,26 +88,7 @@ fbdevLogScreenInfo(const FbScreenConf *config, int screen_num)
LogMessage(X_INFO, "Xfbdev(%d): ShadowFB %s\n", screen_num,
config->shadow ? "enabled" : "disabled");

LogMessage(X_INFO, "Xfbdev(%d): glvnd library: %s\n", 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");

LogMessage(X_INFO, "Xfbdev(%d): glamor OpenGL contexts %s\n", screen_num,
!config->glamor_info.force_es ? "allowed" : "forbidden");
LogMessage(X_INFO, "Xfbdev(%d): glamor GLES contexts %s\n", screen_num,
!config->glamor_info.force_gl ? "allowed" : "forbidden");

LogMessage(X_INFO, "Xfbdev(%d): glamor render acceleration %s\n", screen_num,
!config->glamor_info.no_render_accel ? "enabled" : "disabled");
LogMessage(X_INFO, "Xfbdev(%d): glamor render acceleration %s on software renderers\n", screen_num,
config->glamor_info.force_render_accel ? "allowed" : "forbidden");
LogMessage(X_INFO, "Xfbdev(%d): glamor is %s libgbm \n", screen_num,
config->glamor_info.use_gbm ? "allowed to use" : "forbidden from using");

LogMessage(X_INFO, "Xfbdev(%d): glamor X-Video support %s\n", screen_num,
config->glamor_info.use_xv ? "allowed" : "forbidden");
KdGlamorLogScreenInfo(&config->glamor_info, screen_num);
LogMessage(X_INFO, "\n");
}

Expand Down Expand Up @@ -173,7 +153,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;
}
Expand Down
5 changes: 1 addition & 4 deletions hw/kdrive/fbdev/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ srcs = [
'../../stubs/ddxBeforeReset.c',
]

fbdev_glamor = []
if build_glamor
srcs += 'fb_glamor.c'
fbdev_glamor += glamor
endif

xfbdev_server = executable(
Expand All @@ -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,
Expand Down
Loading
Loading