xf86-video-armsoc Open-source X.org graphics driver for ARM graphics DRM driver selection -------------------- While most operations use only the standard DRM modesetting interfaces, certain operations unavoidably rely on specific driver behaviour (including dumb buffer allocation flags and cursor plane z-ordering). As such, the armsoc driver should choose a particular DRM driver dynamically according to the current environment. The currently supported DRM drivers are: - pl111 - exynos - kirin - sti For other drivers, you will need to implement this support yourself. A template implementation is provided in src/drmmode_template. The interface is defined and documented in src/drmmode_driver.h, and you should refer to this while modifying the template to set up your DRM driver's abstraction appropriately. You can also copy src/drmmode_template into src/drmmode_, modify the driver_name to match with the name used in the kernel drm driver. Summary of bo reference counting -------------------------------- The Screen takes a ref on the scanout bo in InitScreen and drops it in ScreenClose. When the scanout bo changes (due to a flip or a modeset) the ref is moved from the old bo to the new one by set_scanout_bo. Pixmaps take a ref on their bo(s) when created in ARMSOCCreatePixmap2 and drop it in ARMSOCDestroyPixmap. If ARMSOCModifyPixmapHeader points a pixmap at anything other than the scanout bo then the ref to the existing bo (if any) is dropped. If ARMSOCModifyPixmapHeader points a pixmap at the scanout bo the ref is moved from the old bo to the new If ARMSOCModifyPixmapHeader changes the size of the pixmap's bo the ref is dropped, a new bo created and a ref taken on that. resize_scanout_bo creates and takes a ref on the new bo and drops its ref when the new bo becomes the scanout bo and the Screen has taken a ref. The swap chain takes a ref on the src and dst bos when a swap is scheduled in ARMSOCDRI2ScheduleSwap and drops them in ARMSOCDRI2SwapComplete after the src becomes pARMSOC->scanout and the screen takes a ref. The cursor takes a ref on its bo in drmmode_cursor_init and drops it in drmmode_cursor_fini