gallium: Add a memory range parameter to resource_bind_backing

Needed to bind regions of the resource.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29408>
This commit is contained in:
Konstantin Seurer 2024-05-29 18:15:45 +02:00 committed by Marge Bot
parent 56028a888e
commit fcc0fd2fc1
6 changed files with 16 additions and 5 deletions

View file

@ -678,7 +678,7 @@ trace_screen_free_memory(struct pipe_screen *_screen,
static void
trace_screen_free_memory_fd(struct pipe_screen *_screen,
struct pipe_memory_allocation *pmem)
struct pipe_memory_allocation *pmem)
{
struct trace_screen *tr_scr = trace_screen(_screen);
struct pipe_screen *screen = tr_scr->screen;
@ -698,6 +698,8 @@ static bool
trace_screen_resource_bind_backing(struct pipe_screen *_screen,
struct pipe_resource *resource,
struct pipe_memory_allocation *pmem,
uint64_t fd_offset,
uint64_t size,
uint64_t offset)
{
struct trace_screen *tr_scr = trace_screen(_screen);
@ -709,9 +711,11 @@ trace_screen_resource_bind_backing(struct pipe_screen *_screen,
trace_dump_arg(ptr, screen);
trace_dump_arg(ptr, resource);
trace_dump_arg(ptr, pmem);
trace_dump_arg(uint, fd_offset);
trace_dump_arg(uint, size);
trace_dump_arg(uint, offset);
result = screen->resource_bind_backing(screen, resource, pmem, offset);
result = screen->resource_bind_backing(screen, resource, pmem, fd_offset, size, offset);
trace_dump_ret(bool, result);

View file

@ -1313,6 +1313,8 @@ static bool
llvmpipe_resource_bind_backing(struct pipe_screen *pscreen,
struct pipe_resource *pt,
struct pipe_memory_allocation *pmem,
uint64_t fd_offset,
uint64_t size,
uint64_t offset)
{
struct llvmpipe_screen *screen = llvmpipe_screen(pscreen);

View file

@ -256,7 +256,7 @@ get_buffer_resource(struct pipe_context *ctx, const VkDescriptorAddressInfoEXT *
.cpu_addr = (void *)(uintptr_t)bda->address,
};
pscreen->resource_bind_backing(pscreen, pres, (void *)&alloc, 0);
pscreen->resource_bind_backing(pscreen, pres, (void *)&alloc, 0, 0, 0);
return pres;
}
@ -356,7 +356,7 @@ lvp_descriptor_set_create(struct lvp_device *device,
set->map = device->pscreen->map_memory(device->pscreen, set->pmem);
memset(set->map, 0, bo_size);
device->pscreen->resource_bind_backing(device->pscreen, set->bo, set->pmem, 0);
device->pscreen->resource_bind_backing(device->pscreen, set->bo, set->pmem, 0, 0, 0);
for (uint32_t binding_index = 0; binding_index < layout->binding_count; binding_index++) {
const struct lvp_descriptor_set_binding_layout *bind_layout = &set->layout->binding[binding_index];

View file

@ -2151,6 +2151,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindBufferMemory2(VkDevice _device,
device->pscreen->resource_bind_backing(device->pscreen,
buffer->bo,
mem->pmem,
0, 0,
pBindInfos[i].memoryOffset);
if (status)
*status->pResult = VK_SUCCESS;
@ -2168,6 +2169,7 @@ lvp_image_plane_bind(struct lvp_device *device,
if (!device->pscreen->resource_bind_backing(device->pscreen,
plane->bo,
mem->pmem,
0, 0,
memory_offset + *plane_offset)) {
/* This is probably caused by the texture being too large, so let's
* report this as the *closest* allowed error-code. It's not ideal,
@ -2210,6 +2212,7 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_BindImageMemory2(VkDevice _device,
device->pscreen->resource_bind_backing(device->pscreen,
image->planes[0].bo,
image->planes[0].pmem,
0, 0,
image->planes[0].memory_offset);
did_bind = true;
if (status)

View file

@ -232,7 +232,7 @@ get_buffer_resource(struct pipe_context *ctx, void *mem)
.cpu_addr = mem,
};
pscreen->resource_bind_backing(pscreen, pres, (void *)&alloc, 0);
pscreen->resource_bind_backing(pscreen, pres, (void *)&alloc, 0, 0, 0);
return pres;
}

View file

@ -691,6 +691,8 @@ struct pipe_screen {
bool (*resource_bind_backing)(struct pipe_screen *screen,
struct pipe_resource *pt,
struct pipe_memory_allocation *pmem,
uint64_t fd_offset,
uint64_t size,
uint64_t offset);
/**