From 9a57dceeb760a1d4f7d9d1666bec0844ee41852e Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 10 Aug 2021 16:21:10 +1000 Subject: [PATCH] llvmpipe: add support for user memory pointers This is useful for clover, but throw it at CI at least Reviewed-By: Mike Blumenkrantz Part-of: --- .../drivers/llvmpipe/ci/llvmpipe-quick_gl.txt | 6 ------ src/gallium/drivers/llvmpipe/lp_screen.c | 1 + src/gallium/drivers/llvmpipe/lp_texture.c | 23 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt b/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt index e179096..eae5ffc 100644 --- a/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt +++ b/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt @@ -380,12 +380,6 @@ spec/amd_framebuffer_multisample_advanced/api-gles3: skip spec/amd_performance_monitor/api: skip spec/amd_performance_monitor/measure: skip spec/amd_performance_monitor/vc4: skip -spec/amd_pinned_memory/decrement-offset: skip -spec/amd_pinned_memory/increment-offset: skip -spec/amd_pinned_memory/map-buffer decrement-offset: skip -spec/amd_pinned_memory/map-buffer increment-offset: skip -spec/amd_pinned_memory/map-buffer offset=0: skip -spec/amd_pinned_memory/offset=0: skip spec/apple_object_purgeable/object_purgeable-api-pbo: skip spec/apple_object_purgeable/object_purgeable-api-texture: skip spec/apple_object_purgeable/object_purgeable-api-vbo: skip diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 2f7fe5d..7622a28 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -348,6 +348,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param) case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT: case PIPE_CAP_TGSI_TG4_COMPONENT_IN_SWIZZLE: case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL: + case PIPE_CAP_RESOURCE_FROM_USER_MEMORY: return 1; case PIPE_CAP_SAMPLER_REDUCTION_MINMAX: case PIPE_CAP_TGSI_TXQS: diff --git a/src/gallium/drivers/llvmpipe/lp_texture.c b/src/gallium/drivers/llvmpipe/lp_texture.c index e240993..eb635b6 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.c +++ b/src/gallium/drivers/llvmpipe/lp_texture.c @@ -531,6 +531,28 @@ llvmpipe_resource_get_handle(struct pipe_screen *screen, return winsys->displaytarget_get_handle(winsys, lpr->dt, whandle); } +static struct pipe_resource * +llvmpipe_resource_from_user_memory(struct pipe_screen *_screen, + const struct pipe_resource *resource, + void *user_memory) +{ + struct llvmpipe_screen *screen = llvmpipe_screen(_screen); + struct llvmpipe_resource *lpr; + + lpr = CALLOC_STRUCT(llvmpipe_resource); + if (!lpr) { + return NULL; + } + + lpr->base = *resource; + lpr->screen = screen; + pipe_reference_init(&lpr->base.reference, 1); + lpr->base.screen = _screen; + + lpr->data = user_memory; + lpr->userBuffer = TRUE; + return &lpr->base; +} void * llvmpipe_transfer_map_ms( struct pipe_context *pipe, @@ -980,6 +1002,7 @@ llvmpipe_init_screen_resource_funcs(struct pipe_screen *screen) screen->resource_get_info = llvmpipe_get_resource_info; screen->resource_get_param = llvmpipe_resource_get_param; + screen->resource_from_user_memory = llvmpipe_resource_from_user_memory; screen->allocate_memory = llvmpipe_allocate_memory; screen->free_memory = llvmpipe_free_memory; screen->map_memory = llvmpipe_map_memory; -- 2.7.4