Hands On Projects For The Linux Graphics Subsystem Guide

# List all resources modetest -M amdgpu # or i915, or vc4 Run from a VT (Ctrl+Alt+F3) and kill your display manager first. sudo modetest -M i915 -s 42@33:1920x1080 -P 79@33:1920x1080@XR24

That the kernel sees your display as a set of resources (CRTC = scanout engine, Connector = HDMI/DP port). You'll also realize that the framebuffer is just a chunk of memory. Project 2: Mode-Setting with modetest modetest is a Swiss Army knife from the libdrm tests. Use it to take control. Hands On Projects For The Linux Graphics Subsystem

#include <fcntl.h> #include <xf86drm.h> #include <xf86drmMode.h> int main() int fd = open("/dev/dri/card0", O_RDWR); drmModeRes *res = drmModeGetResources(fd); // Find connector, crtc, mode... uint32_t handles[4], pitches[4], offsets[4]; drmModeCreateDumbBuffer(fd, width, height, bpp, &handle, &pitch, &size); drmModeAddFB(fd, width, height, depth, bpp, pitch, handle, &fb_id); uint32_t *map = mmap(0, size, PROT_READ # List all resources modetest -M amdgpu #

# List all connectors, encoders, CRTCs cat /sys/kernel/debug/dri/0/state sudo cat /sys/kernel/debug/dri/0/framebuffer > fb.raw Try to view it (adjust resolution) ffplay -f rawvideo -pixel_format bgra -video_size 1920x1080 -i fb.raw Project 2: Mode-Setting with modetest modetest is a

The Linux graphics subsystem is often viewed as a terrifyingly complex beast—a swirling vortex of DRM (Direct Rendering Manager), KMS (Kernel Mode Setting), GEM (Graphics Execution Manager), and a dozen userspace APIs. And yes, it is complex. But the best way to demystify it isn't to read another LWN article; it's to get your hands dirty.