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
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:
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,
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;