Mesa (main): llvmpipe: add support for user memory pointers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Aug 11 00:37:07 UTC 2021


Module: Mesa
Branch: main
Commit: 9a57dceeb760a1d4f7d9d1666bec0844ee41852e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a57dceeb760a1d4f7d9d1666bec0844ee41852e

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Aug 10 16:21:10 2021 +1000

llvmpipe: add support for user memory pointers

This is useful for clover, but throw it at CI at least

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12316>

---

 .../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 e1790960b8c..eae5ffcf5ea 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 2f7fe5df52a..7622a28425e 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 e240993f8f6..eb635b6fc94 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;



More information about the mesa-commit mailing list