From 501b60f1d5f012e9976b04b3f06cc0c1186c4982 Mon Sep 17 00:00:00 2001 From: stefan11111 Date: Fri, 6 Feb 2026 21:31:23 +0200 Subject: [PATCH] modesetting: move `drmmode_bo_import` to `drmmode_bo.c` Signed-off-by: stefan11111 --- .../drivers/video/modesetting/drmmode_bo.c | 44 ++++++++++++++++++ .../drivers/video/modesetting/drmmode_bo.h | 6 +++ .../video/modesetting/drmmode_display.c | 46 ------------------- .../video/modesetting/drmmode_display.h | 2 - .../drivers/video/modesetting/pageflip.c | 1 + 5 files changed, 51 insertions(+), 48 deletions(-) diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_bo.c b/hw/xfree86/drivers/video/modesetting/drmmode_bo.c index e8537c1cce..9b5f8c16c7 100644 --- a/hw/xfree86/drivers/video/modesetting/drmmode_bo.c +++ b/hw/xfree86/drivers/video/modesetting/drmmode_bo.c @@ -330,3 +330,47 @@ gbm_back_bo_from_fd(drmmode_ptr drmmode, Bool do_map, int fd_handle, uint32_t pi return NULL; } +/* A bit of a misnomer, this is a dmabuf export */ +int +drmmode_bo_import(drmmode_ptr drmmode, drmmode_bo *bo, + uint32_t *fb_id) +{ + uint32_t width = gbm_bo_get_width(bo->gbm); + uint32_t height = gbm_bo_get_height(bo->gbm); + +#ifdef GBM_BO_WITH_MODIFIERS + modesettingPtr ms = modesettingPTR(drmmode->scrn); + if (bo->gbm && ms->kms_has_modifiers && + gbm_bo_get_modifier(bo->gbm) != DRM_FORMAT_MOD_INVALID) { + int num_fds; + + num_fds = gbm_bo_get_plane_count(bo->gbm); + if (num_fds > 0) { + int i; + uint32_t format; + uint32_t handles[GBM_MAX_PLANES] = {0}; + uint32_t strides[GBM_MAX_PLANES] = {0}; + uint32_t offsets[GBM_MAX_PLANES] = {0}; + uint64_t modifiers[GBM_MAX_PLANES] = {0}; + + format = gbm_bo_get_format(bo->gbm); + format = get_opaque_format(format); + for (i = 0; i < num_fds; i++) { + handles[i] = gbm_bo_get_handle_for_plane(bo->gbm, i).u32; + strides[i] = gbm_bo_get_stride_for_plane(bo->gbm, i); + offsets[i] = gbm_bo_get_offset(bo->gbm, i); + modifiers[i] = gbm_bo_get_modifier(bo->gbm); + } + + return drmModeAddFB2WithModifiers(drmmode->fd, width, height, + format, handles, strides, + offsets, modifiers, fb_id, + DRM_MODE_FB_MODIFIERS); + } + } +#endif + return drmModeAddFB(drmmode->fd, width, height, + drmmode->scrn->depth, drmmode->kbpp, + gbm_bo_get_stride(bo->gbm), + gbm_bo_get_handle(bo->gbm).u32, fb_id); +} diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_bo.h b/hw/xfree86/drivers/video/modesetting/drmmode_bo.h index 8a13b43992..17939388e0 100644 --- a/hw/xfree86/drivers/video/modesetting/drmmode_bo.h +++ b/hw/xfree86/drivers/video/modesetting/drmmode_bo.h @@ -32,6 +32,12 @@ struct gbm_bo* gbm_back_bo_from_fd(drmmode_ptr drmmode, Bool do_map, int fd_handle, uint32_t pitch, uint32_t size); +/* A bit of a misnomer, this is a dmabuf export */ +int +drmmode_bo_import(drmmode_ptr drmmode, drmmode_bo *bo, + uint32_t *fb_id); + + static inline uint32_t drmmode_gbm_format_for_depth(int depth) { diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_display.c b/hw/xfree86/drivers/video/modesetting/drmmode_display.c index 6671f39ad7..5ef3c0fc05 100644 --- a/hw/xfree86/drivers/video/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/video/modesetting/drmmode_display.c @@ -1116,52 +1116,6 @@ drmmode_bo_map(drmmode_ptr drmmode, drmmode_bo *bo) return NULL; } -int -drmmode_bo_import(drmmode_ptr drmmode, drmmode_bo *bo, - uint32_t *fb_id) -{ -#ifdef GBM_BO_WITH_MODIFIERS - modesettingPtr ms = modesettingPTR(drmmode->scrn); - if (bo->gbm && ms->kms_has_modifiers && - gbm_bo_get_modifier(bo->gbm) != DRM_FORMAT_MOD_INVALID) { - int num_fds; - - num_fds = gbm_bo_get_plane_count(bo->gbm); - if (num_fds > 0) { - int i; - uint32_t format; - uint32_t handles[4]; - uint32_t strides[4]; - uint32_t offsets[4]; - uint64_t modifiers[4]; - - memset(handles, 0, sizeof(handles)); - memset(strides, 0, sizeof(strides)); - memset(offsets, 0, sizeof(offsets)); - memset(modifiers, 0, sizeof(modifiers)); - - format = gbm_bo_get_format(bo->gbm); - format = get_opaque_format(format); - for (i = 0; i < num_fds; i++) { - handles[i] = gbm_bo_get_handle_for_plane(bo->gbm, i).u32; - strides[i] = gbm_bo_get_stride_for_plane(bo->gbm, i); - offsets[i] = gbm_bo_get_offset(bo->gbm, i); - modifiers[i] = gbm_bo_get_modifier(bo->gbm); - } - - return drmModeAddFB2WithModifiers(drmmode->fd, bo->width, bo->height, - format, handles, strides, - offsets, modifiers, fb_id, - DRM_MODE_FB_MODIFIERS); - } - } -#endif - return drmModeAddFB(drmmode->fd, bo->width, bo->height, - drmmode->scrn->depth, drmmode->kbpp, - drmmode_bo_get_pitch(bo), - drmmode_bo_get_handle(bo), fb_id); -} - static Bool drmmode_create_front_bo(drmmode_ptr drmmode, drmmode_bo *bo, unsigned width, unsigned height, unsigned bpp) diff --git a/hw/xfree86/drivers/video/modesetting/drmmode_display.h b/hw/xfree86/drivers/video/modesetting/drmmode_display.h index 4acf66af6c..395f31098f 100644 --- a/hw/xfree86/drivers/video/modesetting/drmmode_display.h +++ b/hw/xfree86/drivers/video/modesetting/drmmode_display.h @@ -326,8 +326,6 @@ extern miPointerSpriteFuncRec drmmode_sprite_funcs; Bool drmmode_is_format_supported(ScrnInfoPtr scrn, uint32_t format, uint64_t modifier, Bool async_flip); -int drmmode_bo_import(drmmode_ptr drmmode, drmmode_bo *bo, - uint32_t *fb_id); void drmmode_bo_destroy(drmmode_ptr drmmode, drmmode_bo *bo); uint32_t drmmode_bo_get_pitch(drmmode_bo *bo); Bool drmmode_glamor_handle_new_screen_pixmap(drmmode_ptr drmmode); diff --git a/hw/xfree86/drivers/video/modesetting/pageflip.c b/hw/xfree86/drivers/video/modesetting/pageflip.c index 775206c2b0..82dd97a9cb 100644 --- a/hw/xfree86/drivers/video/modesetting/pageflip.c +++ b/hw/xfree86/drivers/video/modesetting/pageflip.c @@ -29,6 +29,7 @@ #include #include "driver.h" +#include "drmmode_bo.h" /* * Flush the DRM event queue when full; makes space for new events.