From 306feaf3a4e5fb6a8ffa65321e0618e609d417ba Mon Sep 17 00:00:00 2001 From: Robert Mader Date: Thu, 21 Aug 2025 15:39:50 +0200 Subject: [PATCH] sw_winsys: Add winsys_handle to displaytarget_create_mapped The main intention is to allow to pass dmabuf handles, however as its type differs depending on platform, just pass the whole whandle. Also make use of it in llvmpipe_resource_from_handle(), in preparation for the next commit. Signed-off-by: Robert Mader Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/drivers/llvmpipe/lp_texture.c | 5 +++-- src/gallium/include/frontend/sw_winsys.h | 3 ++- src/gallium/winsys/sw/dri/dri_sw_winsys.c | 3 ++- src/gallium/winsys/sw/null/null_sw_winsys.c | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index 2290e9b1e2f..241b8786c99 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -766,7 +766,7 @@ llvmpipe_resource_from_handle(struct pipe_screen *_screen, void *data = (char*)alloc->cpu_addr + whandle->offset; lpr->dt = winsys->displaytarget_create_mapped(winsys, template->bind, template->format, template->width0, template->height0, - whandle->stride, data); + whandle->stride, data, whandle); if (!lpr->dt) goto no_dt; lpr->dmabuf_alloc = alloc; @@ -1649,7 +1649,8 @@ llvmpipe_resource_bind_backing(struct pipe_screen *pscreen, lpr->base.format, width, height, lpr->row_stride[0], - lpr->tex_data); + lpr->tex_data, + NULL); } } } else diff --git a/src/gallium/include/frontend/sw_winsys.h b/src/gallium/include/frontend/sw_winsys.h index ebb9991932d..9c916f89614 100644 --- a/src/gallium/include/frontend/sw_winsys.h +++ b/src/gallium/include/frontend/sw_winsys.h @@ -145,7 +145,8 @@ struct sw_winsys enum pipe_format format, unsigned width, unsigned height, unsigned stride, - void *data ); + void *data, + struct winsys_handle *whandle ); }; diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c index 59fd5293582..8fdaa6d2070 100644 --- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c +++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c @@ -186,7 +186,8 @@ dri_sw_displaytarget_create_mapped(struct sw_winsys *winsys, enum pipe_format format, unsigned width, unsigned height, unsigned stride, - void *data) + void *data, + struct winsys_handle *whandle) { UNUSED struct dri_sw_winsys *ws = dri_sw_winsys(winsys); struct dri_sw_displaytarget *dri_sw_dt; diff --git a/src/gallium/winsys/sw/null/null_sw_winsys.c b/src/gallium/winsys/sw/null/null_sw_winsys.c index a442f0d6cac..0160c18d09c 100644 --- a/src/gallium/winsys/sw/null/null_sw_winsys.c +++ b/src/gallium/winsys/sw/null/null_sw_winsys.c @@ -97,7 +97,8 @@ null_sw_displaytarget_create_mapped(struct sw_winsys *winsys, enum pipe_format format, unsigned width, unsigned height, unsigned stride, - void *data) + void *data, + struct winsys_handle *whandle) { fprintf(stderr, "null_sw_displaytarget_create_mapped() returning NULL\n"); return NULL;