llvmpipe: properly save llvmpipe_memory_allocation in memory_object

Importing an opaque fd no longer returns the mapped pointer but
a pointer to llvmpipe_memory_allocation to support both memfds and
dma bufs. This saves the pointer with the correct type and we can
unwrap the mapped data in a correct way.

Fixes: d74ea2c117 ("llvmpipe: Implement dmabuf handling")
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31022>
This commit is contained in:
Thomas Wagner
2024-07-12 17:30:27 +02:00
committed by Marge Bot
parent 39156b6cd4
commit 3e01c15fa7
2 changed files with 9 additions and 5 deletions

View File

@@ -452,7 +452,11 @@ llvmpipe_memobj_create_from_handle(struct pipe_screen *pscreen,
pipe_reference_init(&memobj->reference, 1);
if (handle->type == WINSYS_HANDLE_TYPE_FD &&
pscreen->import_memory_fd(pscreen, handle->handle, &memobj->data, &memobj->size, false)) {
pscreen->import_memory_fd(pscreen,
handle->handle,
(struct pipe_memory_allocation **)&memobj->mem_alloc,
&memobj->size,
false)) {
return &memobj->b;
}
free(memobj);
@@ -471,7 +475,7 @@ llvmpipe_memobj_destroy(struct pipe_screen *pscreen,
if (pipe_reference(&lpmo->reference, NULL))
{
#ifdef PIPE_MEMORY_FD
pscreen->free_memory_fd(pscreen, lpmo->data);
pscreen->free_memory_fd(pscreen, (struct pipe_memory_allocation *)lpmo->mem_alloc);
#endif
free(lpmo);
}
@@ -501,7 +505,7 @@ llvmpipe_resource_from_memobj(struct pipe_screen *pscreen,
goto fail;
if (lpmo->size < lpr->size_required)
goto fail;
lpr->tex_data = lpmo->data;
lpr->tex_data = lpmo->mem_alloc->cpu_addr;
} else {
/* other data (vertex buffer, const buffer, etc) */
const uint bytes = templat->width0;
@@ -527,7 +531,7 @@ llvmpipe_resource_from_memobj(struct pipe_screen *pscreen,
if (lpmo->size < lpr->size_required)
goto fail;
lpr->data = lpmo->data;
lpr->data = lpmo->mem_alloc->cpu_addr;
}
lpr->id = id_counter++;
lpr->imported_memory = &lpmo->b;

View File

@@ -144,7 +144,7 @@ struct llvmpipe_memory_object
{
struct pipe_memory_object b;
struct pipe_reference reference;
struct pipe_memory_allocation *data;
struct llvmpipe_memory_allocation *mem_alloc;
uint64_t size;
};