mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 17:58:26 +02:00
winsys/amdgpu: allow non page-aligned size bo creation from pointer
Fix INVALID_OPERATION caused by BufferData with target
EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD when the buffer size is
not page aligned.
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Cc: 17.3 18.0 <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 4081e08896)
This commit is contained in:
parent
e0c99ead2b
commit
9080ddc699
1 changed files with 7 additions and 4 deletions
|
|
@ -1378,19 +1378,22 @@ static struct pb_buffer *amdgpu_bo_from_ptr(struct radeon_winsys *rws,
|
|||
struct amdgpu_winsys_bo *bo;
|
||||
uint64_t va;
|
||||
amdgpu_va_handle va_handle;
|
||||
/* Avoid failure when the size is not page aligned */
|
||||
uint64_t aligned_size = align64(size, ws->info.gart_page_size);
|
||||
|
||||
bo = CALLOC_STRUCT(amdgpu_winsys_bo);
|
||||
if (!bo)
|
||||
return NULL;
|
||||
|
||||
if (amdgpu_create_bo_from_user_mem(ws->dev, pointer, size, &buf_handle))
|
||||
if (amdgpu_create_bo_from_user_mem(ws->dev, pointer,
|
||||
aligned_size, &buf_handle))
|
||||
goto error;
|
||||
|
||||
if (amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
|
||||
size, 1 << 12, 0, &va, &va_handle, 0))
|
||||
aligned_size, 1 << 12, 0, &va, &va_handle, 0))
|
||||
goto error_va_alloc;
|
||||
|
||||
if (amdgpu_bo_va_op(buf_handle, 0, size, va, 0, AMDGPU_VA_OP_MAP))
|
||||
if (amdgpu_bo_va_op(buf_handle, 0, aligned_size, va, 0, AMDGPU_VA_OP_MAP))
|
||||
goto error_va_map;
|
||||
|
||||
/* Initialize it. */
|
||||
|
|
@ -1406,7 +1409,7 @@ static struct pb_buffer *amdgpu_bo_from_ptr(struct radeon_winsys *rws,
|
|||
bo->initial_domain = RADEON_DOMAIN_GTT;
|
||||
bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1);
|
||||
|
||||
ws->allocated_gtt += align64(bo->base.size, ws->info.gart_page_size);
|
||||
ws->allocated_gtt += aligned_size;
|
||||
|
||||
amdgpu_add_buffer_to_global_list(bo);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue