radv/winsys: return a Vulkan error code when binding virtual buffers/images
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5872>
This commit is contained in:

committed by
Marge Bot

parent
4b58e35a2a
commit
f82eb7af87
@@ -3936,11 +3936,12 @@ radv_finalize_timelines(struct radv_device *device,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static VkResult
|
||||||
radv_sparse_buffer_bind_memory(struct radv_device *device,
|
radv_sparse_buffer_bind_memory(struct radv_device *device,
|
||||||
const VkSparseBufferMemoryBindInfo *bind)
|
const VkSparseBufferMemoryBindInfo *bind)
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_buffer, buffer, bind->buffer);
|
RADV_FROM_HANDLE(radv_buffer, buffer, bind->buffer);
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < bind->bindCount; ++i) {
|
for (uint32_t i = 0; i < bind->bindCount; ++i) {
|
||||||
struct radv_device_memory *mem = NULL;
|
struct radv_device_memory *mem = NULL;
|
||||||
@@ -3948,19 +3949,24 @@ radv_sparse_buffer_bind_memory(struct radv_device *device,
|
|||||||
if (bind->pBinds[i].memory != VK_NULL_HANDLE)
|
if (bind->pBinds[i].memory != VK_NULL_HANDLE)
|
||||||
mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
|
mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
|
||||||
|
|
||||||
device->ws->buffer_virtual_bind(buffer->bo,
|
result = device->ws->buffer_virtual_bind(buffer->bo,
|
||||||
bind->pBinds[i].resourceOffset,
|
bind->pBinds[i].resourceOffset,
|
||||||
bind->pBinds[i].size,
|
bind->pBinds[i].size,
|
||||||
mem ? mem->bo : NULL,
|
mem ? mem->bo : NULL,
|
||||||
bind->pBinds[i].memoryOffset);
|
bind->pBinds[i].memoryOffset);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static VkResult
|
||||||
radv_sparse_image_opaque_bind_memory(struct radv_device *device,
|
radv_sparse_image_opaque_bind_memory(struct radv_device *device,
|
||||||
const VkSparseImageOpaqueMemoryBindInfo *bind)
|
const VkSparseImageOpaqueMemoryBindInfo *bind)
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_image, image, bind->image);
|
RADV_FROM_HANDLE(radv_image, image, bind->image);
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < bind->bindCount; ++i) {
|
for (uint32_t i = 0; i < bind->bindCount; ++i) {
|
||||||
struct radv_device_memory *mem = NULL;
|
struct radv_device_memory *mem = NULL;
|
||||||
@@ -3968,12 +3974,16 @@ radv_sparse_image_opaque_bind_memory(struct radv_device *device,
|
|||||||
if (bind->pBinds[i].memory != VK_NULL_HANDLE)
|
if (bind->pBinds[i].memory != VK_NULL_HANDLE)
|
||||||
mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
|
mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
|
||||||
|
|
||||||
device->ws->buffer_virtual_bind(image->bo,
|
result = device->ws->buffer_virtual_bind(image->bo,
|
||||||
bind->pBinds[i].resourceOffset,
|
bind->pBinds[i].resourceOffset,
|
||||||
bind->pBinds[i].size,
|
bind->pBinds[i].size,
|
||||||
mem ? mem->bo : NULL,
|
mem ? mem->bo : NULL,
|
||||||
bind->pBinds[i].memoryOffset);
|
bind->pBinds[i].memoryOffset);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkResult
|
static VkResult
|
||||||
@@ -4283,13 +4293,17 @@ radv_queue_submit_deferred(struct radv_deferred_queue_submission *submission,
|
|||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < submission->buffer_bind_count; ++i) {
|
for (uint32_t i = 0; i < submission->buffer_bind_count; ++i) {
|
||||||
radv_sparse_buffer_bind_memory(queue->device,
|
result = radv_sparse_buffer_bind_memory(queue->device,
|
||||||
submission->buffer_binds + i);
|
submission->buffer_binds + i);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < submission->image_opaque_bind_count; ++i) {
|
for (uint32_t i = 0; i < submission->image_opaque_bind_count; ++i) {
|
||||||
radv_sparse_image_opaque_bind_memory(queue->device,
|
result = radv_sparse_image_opaque_bind_memory(queue->device,
|
||||||
submission->image_opaque_binds + i);
|
submission->image_opaque_binds + i);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!submission->cmd_buffer_count) {
|
if (!submission->cmd_buffer_count) {
|
||||||
|
@@ -255,9 +255,9 @@ struct radeon_winsys {
|
|||||||
void (*buffer_get_metadata)(struct radeon_winsys_bo *bo,
|
void (*buffer_get_metadata)(struct radeon_winsys_bo *bo,
|
||||||
struct radeon_bo_metadata *md);
|
struct radeon_bo_metadata *md);
|
||||||
|
|
||||||
void (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
|
VkResult (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
|
||||||
uint64_t offset, uint64_t size,
|
uint64_t offset, uint64_t size,
|
||||||
struct radeon_winsys_bo *bo, uint64_t bo_offset);
|
struct radeon_winsys_bo *bo, uint64_t bo_offset);
|
||||||
VkResult (*ctx_create)(struct radeon_winsys *ws,
|
VkResult (*ctx_create)(struct radeon_winsys *ws,
|
||||||
enum radeon_ctx_priority priority,
|
enum radeon_ctx_priority priority,
|
||||||
struct radeon_winsys_ctx **ctx);
|
struct radeon_winsys_ctx **ctx);
|
||||||
|
@@ -127,7 +127,7 @@ static int bo_comparator(const void *ap, const void *bp) {
|
|||||||
return (a > b) ? 1 : (a < b) ? -1 : 0;
|
return (a > b) ? 1 : (a < b) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static VkResult
|
||||||
radv_amdgpu_winsys_rebuild_bo_list(struct radv_amdgpu_winsys_bo *bo)
|
radv_amdgpu_winsys_rebuild_bo_list(struct radv_amdgpu_winsys_bo *bo)
|
||||||
{
|
{
|
||||||
if (bo->bo_capacity < bo->range_count) {
|
if (bo->bo_capacity < bo->range_count) {
|
||||||
@@ -135,7 +135,7 @@ radv_amdgpu_winsys_rebuild_bo_list(struct radv_amdgpu_winsys_bo *bo)
|
|||||||
struct radv_amdgpu_winsys_bo **bos =
|
struct radv_amdgpu_winsys_bo **bos =
|
||||||
realloc(bo->bos, new_count * sizeof(struct radv_amdgpu_winsys_bo *));
|
realloc(bo->bos, new_count * sizeof(struct radv_amdgpu_winsys_bo *));
|
||||||
if (!bos)
|
if (!bos)
|
||||||
return;
|
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
bo->bos = bos;
|
bo->bos = bos;
|
||||||
bo->bo_capacity = new_count;
|
bo->bo_capacity = new_count;
|
||||||
}
|
}
|
||||||
@@ -153,9 +153,11 @@ radv_amdgpu_winsys_rebuild_bo_list(struct radv_amdgpu_winsys_bo *bo)
|
|||||||
bo->bos[final_bo_count++] = bo->bos[i];
|
bo->bos[final_bo_count++] = bo->bos[i];
|
||||||
|
|
||||||
bo->bo_count = final_bo_count;
|
bo->bo_count = final_bo_count;
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static VkResult
|
||||||
radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
|
radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
|
||||||
uint64_t offset, uint64_t size,
|
uint64_t offset, uint64_t size,
|
||||||
struct radeon_winsys_bo *_bo, uint64_t bo_offset)
|
struct radeon_winsys_bo *_bo, uint64_t bo_offset)
|
||||||
@@ -165,6 +167,7 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
|
|||||||
int range_count_delta, new_idx;
|
int range_count_delta, new_idx;
|
||||||
int first = 0, last;
|
int first = 0, last;
|
||||||
struct radv_amdgpu_map_range new_first, new_last;
|
struct radv_amdgpu_map_range new_first, new_last;
|
||||||
|
VkResult result;
|
||||||
|
|
||||||
assert(parent->is_virtual);
|
assert(parent->is_virtual);
|
||||||
assert(!bo || !bo->is_virtual);
|
assert(!bo || !bo->is_virtual);
|
||||||
@@ -176,7 +179,7 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
|
|||||||
realloc(parent->ranges,
|
realloc(parent->ranges,
|
||||||
range_capacity * sizeof(struct radv_amdgpu_map_range));
|
range_capacity * sizeof(struct radv_amdgpu_map_range));
|
||||||
if (!ranges)
|
if (!ranges)
|
||||||
return;
|
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
parent->ranges = ranges;
|
parent->ranges = ranges;
|
||||||
parent->range_capacity = range_capacity;
|
parent->range_capacity = range_capacity;
|
||||||
}
|
}
|
||||||
@@ -272,7 +275,11 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
|
|||||||
|
|
||||||
parent->range_count += range_count_delta;
|
parent->range_count += range_count_delta;
|
||||||
|
|
||||||
radv_amdgpu_winsys_rebuild_bo_list(parent);
|
result = radv_amdgpu_winsys_rebuild_bo_list(parent);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
return VK_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo)
|
static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo)
|
||||||
|
Reference in New Issue
Block a user