Commit Graph

22382 Commits

Author SHA1 Message Date
stefan11111
c2ca290e63 kdrive: Build Xkdrive man page
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-21 10:12:20 +01:00
stefan11111
ba16aca944 glamor/glamor_egl.c: Remove some whitespaces
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-21 10:11:05 +01:00
Enrico Weigelt, metux IT consult
5a7fb205a1 xkb: rename xkbgeom.h to xkbgeom_priv.h
Our naming convention for headers is that private ones (not exported,
ie. not part of xf86 sdk) shall be suffixed by "_priv.h".

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-20 12:45:01 +01:00
Enrico Weigelt, metux IT consult
f738e30963 xfree86: os-support: linux: drop unused lnx_ev56.c
This file isn't even compiled ever, so we really don't need it anymore.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-14 15:55:35 +01:00
Enrico Weigelt, metux IT consult
36e1a9c37c xfree86: add exported xf86GetConsoleFd()
This functions is designed for some legacy keyboard drivers
(eg. xf86-input-keyboard) that need to get the fd to the console
device, so they don't need to directly access xf86Info field anymore.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-14 11:15:19 +01:00
Enrico Weigelt, metux IT consult
efc9321a64 xfree86: os-support: drop local "fd" variable in xf86OpenConsole()
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-13 17:50:38 +01:00
Enrico Weigelt, metux IT consult
d8eb141135 xfree86: os-support: common: reorganize console driver table
Merge driver name and open-proc tables into one, using a struct.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-13 17:05:58 +01:00
Enrico Weigelt, metux IT consult
e814acf006 xfree86: os-support: bsd: scope "vtmode" in xf86OpenConsole()
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-13 15:30:33 +01:00
Enrico Weigelt, metux IT consult
fd5cd094d1 xfree86: os-support: bsd: scope "result" variable in xf86OpenConsole()
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-13 14:52:40 +01:00
Tautvis
2cfb92330f glx: glxext fix memory leak when calling DestroyPixmap
Call dixDestroyPixmap instead pScreen->DestroyPixmap, which is correct
call to free resources as since cece84fa93
the Screen->DestroyPixmap function is no longer wrapped.

Fixes: https://github.com/X11Libre/xserver/issues/1809

Signed-off-By: Tautvis <gtautvis@gmail.com>
2026-01-13 14:44:52 +01:00
Imre Vadász
e0f4acc929 Remove workaround for ancient FreeBSD versions before 2.2.8.
This workaround was unnecessarily active for current DragonFlyBSD,
as well as probably for current FreeBSD as well, because the
"pcvt" console support would be used by default. Hence this adds
explicit code for the PCVT case to skip the quirk on FreeBSD and
DragonFlyBSD.

Signed-off-by: Imre Vadász <imre@vdsz.com>
2026-01-13 14:13:57 +01:00
Enrico Weigelt, metux IT consult
b5f2c96901 xfree86: os-support: bsd: tiny logging simplification on PCVT
There isn't much practical value of printing kernel PCVT driver
version into our log on NetBSD. Let's simplify this a bit and
get cut down the #ifdef wood a little bit.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-13 14:11:25 +01:00
stefan11111
69da481f66 kdrive/linux: Set device name when using the evdev driver
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 16:46:17 +01:00
stefan11111
cc152cf964 kdrive/linux: Improve evdev driver autodetection
It should now work out of the box on most setups
with one mouse and one keyboard.

It probably still breaks on some single mouse and keyboard
setups, and on setups with more than one mouse or keyboard.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 16:46:17 +01:00
stefan11111
a2c58b9934 kdrive/linux: Try all 32 static evdev device nodes
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 16:46:17 +01:00
squishypinkelephant
02f1efe2bc Xext: shape: replace ShapeEventType resource by devPrivate
Instead of abusing resource types, use the standard devPrivate
mechanism for assigning auxillary data to windows.

Signed-off-by: squishypinkelephant <squishypinkelephant@gmail.com>
2026-01-12 10:11:55 +01:00
stefan11111
cb445cef6b kdrive/fbdev: Use ShadowFB by default
It can be disabled by passing `-noshadow` to the command-line args

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 09:14:31 +01:00
stefan11111
5d3490d135 Xext/dri2: Fix small memory leak.
Fixes: https://github.com/X11Libre/xserver/pull/1414
Fixes: https://github.com/X11Libre/xserver/issues/1413
(Fixes the small leak that was mentioned there,
not sure if there isn't a bigger one somewhere else)

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 09:13:24 +01:00
stefan11111
984f403a17 kdrive: Fixup keyboard events after vt switch
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-12 08:08:52 +01:00
Enrico Weigelt, metux IT consult
a9c2edfffd dix: encapsulate ScreenRec::UnrealizeWindow() call in helper function
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-08 17:44:11 +01:00
Enrico Weigelt, metux IT consult
b9036466dd xorg-server.m4: add helper macros for driver builds
Adding a bunch of autoconf macros easier building of drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-08 17:17:12 +01:00
Enrico Weigelt, metux IT consult
e369882b50 xorg-server.pc: add more variables for easier driver builds
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-08 16:57:10 +01:00
squishypinkelephant
6db9b685c1 fully split, rename kdInitInputPre to KdAddConfigInputDrivers 2026-01-08 10:32:42 +01:00
squishypinkelephant
80112b61ba split KdInitInput for Xephyr 2026-01-08 10:32:42 +01:00
Enrico Weigelt, metux IT consult
afc8ec2475 xfree86: add macros for declaring XF86ModuleData fields
XF86_MODULE_DATA_INPUT() creates XF86ModuleData field for input driver,
while XF86_MODULE_DATA_VIDEO creating one for a video driver.

These are filled with given values, _X_EXPORT'ed and properly named so
the module loader can find them. Also creating the associated
XF86ModuleVersionInfo field and link them into the XF86ModuleData.

Example:

    XF86_MODULE_DATA_INPUT(
        egalax,
        eGalaxPlug,
        eGalaxUnplug,
        "egalax",
        PACKAGE_VERSION_MAJOR,
        PACKAGE_VERSION_MINOR,
        PACKAGE_VERSION_PATCHLEVEL);

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-07 20:33:28 +01:00
Enrico Weigelt, metux IT consult
e561e3212b xfree86: xf86Module.h: macro for declaring video driver module version
Reduce the effort of declaring/filling an video driver's module version
struct to short statement like this:

    XF86_MODULE_VERSION_VIDEO("ati",
                              PACKAGE_VERSION_MAJOR,
                              PACKAGE_VERSION_MINOR,
                              PACKAGE_VERSION_PATCHLEVEL);

This will create a properly filled XF86ModuleVersionInfo structure
named `modInfo`.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-07 20:09:39 +01:00
Enrico Weigelt, metux IT consult
a56a08e713 xfree86: xf86Module.h: macro for declaring input driver module version
Reduce the effort of declaring/filling an input driver's module version
struct to short statement like this:

    XF86_MODULE_VERSION_INPUT("egalax",
                              PACKAGE_VERSION_MAJOR,
                              PACKAGE_VERSION_MINOR,
                              PACKAGE_VERSION_PATCHLEVEL);

This will create a properly filled XF86ModuleVersionInfo structure
named `modInfo`.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-07 19:51:48 +01:00
Enrico Weigelt, metux IT consult
3adf207be1 dix: tiny cleanup in CrushTree()
Make it a little bit easier to understand.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-07 19:18:54 +01:00
stefan11111
dc55d361d8 glamor/glamor_egl.c: Report skipping all modifiers as failure
If `glamor_get_modifiers` returns no modifiers, but succeeds, it means
that modifiers are implicit and chosen by the driver
(e.g. when allocating gbm buffers)

If we strip all modifiers however, it means that from the list
of modifiers we queried, we can use none.
This means that it would be an error to, for example,
create a gbm bo, create an image from it and try to
render into it.

We should treat this case as a failure.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 13:48:39 +01:00
stefan11111
d92a55c286 kdrive/src: Implement special key handling
This is needed for Ctrl + Alt + F* vt switching
and Ctrl + Alt + Backspace server terminate.

We could implement other special keys too, it we want to.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 13:48:15 +01:00
stefan11111
01b91b7f60 kdrive/linux: Add special key handler proc
We're only interested in vt switching here.
Ctrl + Alt + Backspace server terminate will be handled by it's caller.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 13:48:15 +01:00
stefan11111
2f3d22ef1e kdrive/linux: Fix keyboard flushing
The old method will break with vt switching

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 13:48:15 +01:00
stefan11111
489ba91f4b kdrive/linux: Use OsSignal to set SIGUSR1 handler
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 13:48:15 +01:00
stefan11111
e2c99a2e93 glamor/glamor_egl.c: Fix misplaced #endif
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 11:05:30 +01:00
stefan11111
8ed09861dc present: Call driver check_flip after we finish with our checks
We don't really gain anything by calling `check_flip` early,
but it turns out that doing so causes problems.

Thanks to @jipok for finding this issue:
```
// gcc crash_x11libre.c -o crash_x11libre -lX11 -lXext  -lXpresent
// Code written by LLM!

// WARNING: THIS PROGRAM IS INTENDED TO CRASH THE X SERVER (via XPresent + Glamor bug)

void attempt_crash_via_present(Display* dpy, Window win, int width, int height, int depth) {
    XShmSegmentInfo shminfo;

    // 1. Calculate TIGHT stride (width * 4 bytes).
    // Misalignment here + XPresent is the killer combination.
    int stride = width * 4;
    size_t size = stride * height;

    // 2. Resize the window to match the buffer (simulating JTK resize behavior)
    XResizeWindow(dpy, win, width, height);
    // XSync(dpy, False); // Optional: let window manager catch up, but hammering triggers races better

    // 3. Allocate Shared Memory
    memset(&shminfo, 0, sizeof(shminfo));
    shminfo.shmid = shmget(IPC_PRIVATE, size, IPC_CREAT | 0777);
    if (shminfo.shmid < 0) { perror("shmget"); return; }
    shminfo.shmaddr = (char*)shmat(shminfo.shmid, 0, 0);
    shminfo.readOnly = False;
    shmctl(shminfo.shmid, IPC_RMID, 0); // Auto-cleanup

    if (!XShmAttach(dpy, &shminfo)) {
        fprintf(stderr, "XShmAttach failed\n");
        shmdt(shminfo.shmaddr);
        return;
    }

    // 4. Create the Misaligned Pixmap
    Pixmap pixmap = XShmCreatePixmap(dpy, win, shminfo.shmaddr, &shminfo, width, height, depth);

    // 5. THE TRIGGER: XPresentPixmap
    // This forces Glamor to treat the SHM segment as a presentable surface.
    // If strided alignment logic inside miCopyRegion/glamor is broken, this dies.
    XPresentPixmap(dpy, win, pixmap, 0, 0, 0, 0, 0, None, None, None, 0, 0, 0, 0, 0, 0);

    // Flush to make sure the server received the command
    XSync(dpy, False);

    // Cleanup for next iteration
    XFreePixmap(dpy, pixmap);
    XShmDetach(dpy, &shminfo);
    shmdt(shminfo.shmaddr);
}

int main() {
    Display* dpy = XOpenDisplay(NULL);
    if (!dpy) { fprintf(stderr, "No display\n"); return 1; }

    // Check extensions
    int major, minor, pixmaps;
    if (!XShmQueryVersion(dpy, &major, &minor, &pixmaps) || !pixmaps) {
        fprintf(stderr, "XShm not supported!\n"); return 1;
    }

    int present_opcode, event_base, error_base;
    if (!XQueryExtension(dpy, "Present", &present_opcode, &event_base, &error_base)) {
        fprintf(stderr, "XPresent extension not supported! (Can't repro bug)\n");
        return 1;
    }

    int screen = DefaultScreen(dpy);
    XVisualInfo vinfo;
    if (!XMatchVisualInfo(dpy, screen, 32, TrueColor, &vinfo)) {
        printf("32-bit visual not found, using default.\n");
        vinfo.visual = DefaultVisual(dpy, screen);
        vinfo.depth = DefaultDepth(dpy, screen);
    }

    XSetWindowAttributes attrs;
    attrs.colormap = XCreateColormap(dpy, RootWindow(dpy, screen), vinfo.visual, AllocNone);
    attrs.background_pixel = 0; // Black
    attrs.border_pixel = 0;

    Window win = XCreateWindow(dpy, RootWindow(dpy, screen),
                               0, 0, 100, 100, 0,
                               vinfo.depth, InputOutput, vinfo.visual,
                               CWColormap | CWBackPixel | CWBorderPixel, &attrs);

    XMapWindow(dpy, win);
    XSync(dpy, False);

    printf("Starting XPresent Stress Test...\n");
    sleep(1);

    // Fixed height (enough to have data), varying width
    int height = 500;

    // Iterate widths. We expect crashes on non-standard alignments.
    // XLibre often crashes at 1266 width (stride 5064).
    for (int w = 1000; w < 2000; w++) {
        int stride = w * 4;

        printf("\rTesting Width: %4d | Stride: %5d (mod 64: %2d)", w, stride, stride % 64);
        fflush(stdout);

        attempt_crash_via_present(dpy, win, w, height, vinfo.depth);

        // Small delay to let the server actually try to process the Present request
        // before we trash the memory, though XSync should handle it.
        usleep(1000);
    }

    printf("\nTest finished successfully (No crash).\n");

    XDestroyWindow(dpy, win);
    XCloseDisplay(dpy);
    return 0;
}
```

Fixes: https://github.com/X11Libre/xserver/issues/1754
Fixes: 9108a2bf55

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 11:01:37 +01:00
stefan11111
0d93b942ad kdrive/src: Remove all SIGIO code from kdrive
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 10:59:39 +01:00
stefan11111
fb16cef942 kdrive/src: Use threaded input in KdReleaseAllKeys
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 10:59:39 +01:00
stefan11111
77f15917d4 kdrive/linux: Fix typo in keyboard.c
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 10:59:39 +01:00
stefan11111
9afc6b1345 kdrive/src: revert c85ef2a6b5
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 10:59:39 +01:00
stefan11111
7a50b1dc3d kdrive/src: revert fd2483745b
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-07 10:59:39 +01:00
Enrico Weigelt, metux IT consult
885ba96ff6 os: xtrans: drop some unused defines
The TRANS_LOCAL_*_INDEX defines aren't used anymore.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-07 10:56:57 +01:00
b-aaz
d2dcac6eca Revert "xkb: unexport XkbGetCoreMap() and XkbSetRepeatKeys()"
This reverts commit 25d99353ee.
These symbols are required by the xorgxrdp driver.

Signed-off-by: b-aaz <b-aazbsd@proton.me>
2026-01-07 10:56:33 +01:00
stefan11111
65d4e5e081 Xext/dri2: Fix message logging
Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-06 19:23:34 +01:00
Enrico Weigelt, metux IT consult
1189bbdb40 xfree86: little documentation on XF86ModuleData
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-05 16:12:05 +01:00
Enrico Weigelt, metux IT consult
0b1e8a759c stop defining _XF86DRI_SERVER_
This once was needed on including xf86driproto.h, but these day
have gone now for aeons.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-05 14:42:01 +01:00
stefan11111
186e269a9d glamor/glamor_egl.c: Skip modifiers that do not result in images
that can be rendered to

According to https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt ,
there is an interface that allows us to detect if a given format modifier is supported.

For example, nvidia uses this to report that pitch-linear images can't be
rendered to.

Since we are only interested in formats that we can actually render to,
we should strip these formats from the modifier list.

See:
https://github.com/elFarto/nvidia-vaapi-driver/issues/15#issuecomment-1015827050
https://gitlab.freedesktop.org/xorg/xserver/-/issues/1444#note_2450902

v2: Faster and simpler filter thanks to @algrid

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-05 14:18:08 +01:00
Enrico Weigelt, metux IT consult
6890d547f2 dri: use REQUEST_HEAD_STRUCT and REQUEST_FIELD_* macros
Use the new macros to make request struct parsing / field swapping
much easier.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-01-05 14:16:31 +01:00
stefan11111
dc39eda42b treewide: Move the dri2 extension to Xext and use it for all X servers
This is needed to get proton working in Xfbdev, but is probably useful in other places too.

Xephyr has some unrelated issues regaring Xinput, so steam doesn't work there.

Signed-off-by: stefan11111 <stefan11111@shitposting.expert>
2026-01-02 17:51:43 +01:00
Alan Coopersmith
2a41522349 os: make FormatInt64() handle LONG_MIN correctly
When compiling with gcc 15.2.0 using -O3 -m64 on Solaris SPARC & x64,
we'd get a test failure of:

Assertion failed: strcmp(logmsg, expected) == 0,
 file ../test/signal-logging.c, line 339, function logging_format

because 'num *= -1' produced a value that was out of the range of the
int64_t it was being stored in.  (Compiling with -O2 worked fine with
the same compiler/configuration/platform though.)

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2117>
2026-01-01 13:23:22 +01:00
Oleh Nykyforchyn
3a367c5a47 xfree86/common: omit unnecessary search for matching devices
It is patch 3/3 of a series that makes adding GPU screens
more controllable.

If AutoAddGPU is "off", matching devices for autoconfigured
drivers are sought for anyway, and then the unused list is
freed. This patch cancels an unnecessary search.

Signed-off-by: Oleh Nykyforchyn <oleh.nyk@gmail.com>
2026-01-01 13:23:22 +01:00