mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-26 17:40:39 +02:00
radv: Implement reserving the VA range on unmap.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27689>
This commit is contained in:
parent
a6a31538c5
commit
7e029735e6
8 changed files with 16 additions and 11 deletions
|
|
@ -84,7 +84,7 @@ radv_create_shadow_regs_preamble(const struct radv_device *device, struct radv_q
|
|||
memcpy(map, cs->buf, cs->cdw * 4);
|
||||
queue_state->shadow_regs_ib_size_dw = cs->cdw;
|
||||
|
||||
ws->buffer_unmap(ws, queue_state->shadow_regs_ib);
|
||||
ws->buffer_unmap(ws, queue_state->shadow_regs_ib, false);
|
||||
ws->cs_destroy(cs);
|
||||
return VK_SUCCESS;
|
||||
fail_map:
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ radv_UnmapMemory2KHR(VkDevice _device, const VkMemoryUnmapInfoKHR *pMemoryUnmapI
|
|||
|
||||
vk_rmv_log_cpu_map(&device->vk, mem->bo->va, true);
|
||||
if (mem->user_ptr == NULL)
|
||||
device->ws->buffer_unmap(device->ws, mem->bo);
|
||||
device->ws->buffer_unmap(device->ws, mem->bo, (pMemoryUnmapInfo->flags & VK_MEMORY_UNMAP_RESERVE_BIT_EXT));
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -601,7 +601,7 @@ radv_initialise_task_control_buffer(struct radv_device *device, struct radeon_wi
|
|||
ptr[7] = task_draw_ring_va;
|
||||
ptr[8] = task_draw_ring_va >> 32;
|
||||
|
||||
device->ws->buffer_unmap(device->ws, task_rings_bo);
|
||||
device->ws->buffer_unmap(device->ws, task_rings_bo, false);
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -992,7 +992,7 @@ radv_update_preamble_cs(struct radv_queue_state *queue, struct radv_device *devi
|
|||
gsvs_ring_bo, tess_rings_bo, task_rings_bo, mesh_scratch_ring_bo, needs->attr_ring_size,
|
||||
attr_ring_bo);
|
||||
|
||||
ws->buffer_unmap(ws, descriptor_bo);
|
||||
ws->buffer_unmap(ws, descriptor_bo, false);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
|
|
|
|||
|
|
@ -264,7 +264,7 @@ struct radeon_winsys {
|
|||
bool (*buffer_get_flags_from_fd)(struct radeon_winsys *ws, int fd, enum radeon_bo_domain *domains,
|
||||
enum radeon_bo_flag *flags);
|
||||
|
||||
void (*buffer_unmap)(struct radeon_winsys *ws, struct radeon_winsys_bo *bo);
|
||||
void (*buffer_unmap)(struct radeon_winsys *ws, struct radeon_winsys_bo *bo, bool replace);
|
||||
|
||||
void (*buffer_set_metadata)(struct radeon_winsys *ws, struct radeon_winsys_bo *bo, struct radeon_bo_metadata *md);
|
||||
void (*buffer_get_metadata)(struct radeon_winsys *ws, struct radeon_winsys_bo *bo, struct radeon_bo_metadata *md);
|
||||
|
|
|
|||
|
|
@ -2742,7 +2742,7 @@ radv_vcn_cmd_reset(struct radv_cmd_buffer *cmd_buffer)
|
|||
rvcn_vcn4_av1_default_coef_probs((void *)(ctxptr + i * frame_ctxt_size), i);
|
||||
}
|
||||
}
|
||||
cmd_buffer->device->ws->buffer_unmap(cmd_buffer->device->ws, vid->ctx.mem->bo);
|
||||
cmd_buffer->device->ws->buffer_unmap(cmd_buffer->device->ws, vid->ctx.mem->bo, false);
|
||||
}
|
||||
radv_vid_buffer_upload_alloc(cmd_buffer, size, &out_offset, &ptr);
|
||||
|
||||
|
|
|
|||
|
|
@ -653,7 +653,7 @@ radv_create_gfx_config(struct radv_device *device)
|
|||
}
|
||||
memcpy(map, cs->buf, cs->cdw * 4);
|
||||
|
||||
device->ws->buffer_unmap(device->ws, device->gfx_init);
|
||||
device->ws->buffer_unmap(device->ws, device->gfx_init, false);
|
||||
device->gfx_init_size_dw = cs->cdw;
|
||||
fail:
|
||||
device->ws->cs_destroy(cs);
|
||||
|
|
|
|||
|
|
@ -587,15 +587,20 @@ radv_amdgpu_winsys_bo_map(struct radeon_winsys *_ws, struct radeon_winsys_bo *_b
|
|||
}
|
||||
|
||||
static void
|
||||
radv_amdgpu_winsys_bo_unmap(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo)
|
||||
radv_amdgpu_winsys_bo_unmap(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo, bool replace)
|
||||
{
|
||||
struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
|
||||
|
||||
/* Defense in depth against buggy apps. */
|
||||
if (!bo->cpu_map)
|
||||
if (!bo->cpu_map && !replace)
|
||||
return;
|
||||
|
||||
munmap(bo->cpu_map, bo->size);
|
||||
assert(bo->cpu_map);
|
||||
if (replace) {
|
||||
(void)mmap(bo->cpu_map, bo->size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
|
||||
} else {
|
||||
munmap(bo->cpu_map, bo->size);
|
||||
}
|
||||
bo->cpu_map = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ radv_null_winsys_bo_map(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo,
|
|||
}
|
||||
|
||||
static void
|
||||
radv_null_winsys_bo_unmap(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo)
|
||||
radv_null_winsys_bo_unmap(struct radeon_winsys *_ws, struct radeon_winsys_bo *_bo, bool replace)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue