panvk: Add a panvk_priv_mem_check_alloc() helper and use it

Stop checking allocation success with panvk_priv_mem_{dev,host}_addr().

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Reviewed-by: Christoph Pillmayer <christoph.pillmayer@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36385>
This commit is contained in:
Boris Brezillon
2025-09-19 09:04:59 +02:00
parent c9e94f92a0
commit 76bb8e1a39
12 changed files with 37 additions and 29 deletions
@@ -321,7 +321,7 @@ panvk_meta_desc_copy_rsd(struct panvk_device *dev)
DIV_ROUND_UP(sizeof(struct pan_nir_desc_copy_info), 4);
shader->rsd = panvk_pool_alloc_desc(&dev->mempools.rw, RENDERER_STATE);
if (!panvk_priv_mem_host_addr(shader->rsd)) {
if (!panvk_priv_mem_check_alloc(shader->rsd)) {
vk_shader_destroy(&dev->vk, &shader->vk, NULL);
return 0;
}
@@ -128,7 +128,7 @@ cmd_dispatch(struct panvk_cmd_buffer *cmdbuf, struct panvk_dispatch_info *info)
VkResult result;
/* If there's no compute shader, we can skip the dispatch. */
if (!panvk_priv_mem_dev_addr(cs->spd))
if (!panvk_priv_mem_check_alloc(cs->spd))
return;
struct panvk_physical_device *phys_dev =
+2 -2
View File
@@ -2359,7 +2359,7 @@ panvk_cmd_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_info *draw)
VkResult result;
/* If there's no vertex shader, we can skip the draw. */
if (!panvk_priv_mem_dev_addr(vs->spd))
if (!panvk_priv_mem_check_alloc(vs->spd))
return;
/* Needs to be done before get_fs() is called because it depends on
@@ -2523,7 +2523,7 @@ panvk_cmd_draw_indirect(struct panvk_cmd_buffer *cmdbuf,
VkResult result;
/* If there's no vertex shader, we can skip the draw. */
if (!panvk_priv_mem_dev_addr(vs->spd))
if (!panvk_priv_mem_check_alloc(vs->spd))
return;
/* Needs to be done before get_fs() is called because it depends on
+1 -1
View File
@@ -29,7 +29,7 @@ panvk_per_arch(CreateEvent)(VkDevice _device,
};
event->syncobjs = panvk_pool_alloc_mem(&device->mempools.rw_nc, info);
if (!panvk_priv_mem_host_addr(event->syncobjs)) {
if (!panvk_priv_mem_check_alloc(event->syncobjs)) {
vk_object_free(&device->vk, pAllocator, event);
return panvk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
}
+8 -9
View File
@@ -164,13 +164,12 @@ init_render_desc_ringbuf(struct panvk_gpu_queue *queue)
};
ringbuf->syncobj = panvk_pool_alloc_mem(&dev->mempools.rw, alloc_info);
struct panvk_cs_sync32 *syncobj = panvk_priv_mem_host_addr(ringbuf->syncobj);
if (!syncobj)
if (!panvk_priv_mem_check_alloc(ringbuf->syncobj))
return panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to create the render desc ringbuf context");
struct panvk_cs_sync32 *syncobj = panvk_priv_mem_host_addr(ringbuf->syncobj);
*syncobj = (struct panvk_cs_sync32){
.seqno = RENDER_DESC_RINGBUF_SIZE,
};
@@ -363,7 +362,7 @@ init_subqueue(struct panvk_gpu_queue *queue, enum panvk_subqueue_id subqueue)
alloc_info.size = dev->dump_region_size[subqueue];
alloc_info.alignment = sizeof(uint32_t);
subq->regs_save = panvk_pool_alloc_mem(&dev->mempools.rw, alloc_info);
if (!panvk_priv_mem_host_addr(subq->regs_save)) {
if (!panvk_priv_mem_check_alloc(subq->regs_save)) {
return panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to allocate register save area");
}
@@ -377,7 +376,7 @@ init_subqueue(struct panvk_gpu_queue *queue, enum panvk_subqueue_id subqueue)
alloc_info.size = sizeof(uint64_t);
alloc_info.alignment = 64;
subq->req_resource.buf = panvk_pool_alloc_mem(mempool, alloc_info);
if (!panvk_priv_mem_host_addr(subq->req_resource.buf))
if (!panvk_priv_mem_check_alloc(subq->req_resource.buf))
return panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to create a req_resource buffer");
@@ -407,7 +406,7 @@ init_subqueue(struct panvk_gpu_queue *queue, enum panvk_subqueue_id subqueue)
alloc_info.alignment = 64;
subq->context = panvk_pool_alloc_mem(mempool, alloc_info);
if (!panvk_priv_mem_host_addr(subq->context))
if (!panvk_priv_mem_check_alloc(subq->context))
return panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to create a queue context");
@@ -566,7 +565,7 @@ init_queue(struct panvk_gpu_queue *queue)
};
queue->syncobjs = panvk_pool_alloc_mem(&dev->mempools.rw, alloc_info);
if (!panvk_priv_mem_host_addr(queue->syncobjs))
if (!panvk_priv_mem_check_alloc(queue->syncobjs))
return panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to allocate subqueue sync objects");
@@ -672,7 +671,7 @@ init_tiler(struct panvk_gpu_queue *queue)
};
tiler_heap->desc = panvk_pool_alloc_mem(&dev->mempools.rw, alloc_info);
if (!panvk_priv_mem_host_addr(tiler_heap->desc)) {
if (!panvk_priv_mem_check_alloc(tiler_heap->desc)) {
result = panvk_errorf(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY,
"Failed to create a tiler heap context");
goto err_free_desc;
@@ -68,7 +68,7 @@ cmd_dispatch(struct panvk_cmd_buffer *cmdbuf, struct panvk_dispatch_info *info)
VkResult result;
/* If there's no compute shader, we can skip the dispatch. */
if (!panvk_priv_mem_dev_addr(cs->rsd))
if (!panvk_priv_mem_check_alloc(cs->rsd))
return;
panvk_per_arch(cmd_close_batch)(cmdbuf);
+2 -2
View File
@@ -1420,7 +1420,7 @@ panvk_cmd_draw(struct panvk_cmd_buffer *cmdbuf, struct panvk_draw_data *draw)
VkResult result;
/* If there's no vertex shader, we can skip the draw. */
if (!panvk_priv_mem_dev_addr(vs->rsd))
if (!panvk_priv_mem_check_alloc(vs->rsd))
return;
/* Needs to be done before get_fs() is called because it depends on
@@ -1528,7 +1528,7 @@ panvk_cmd_draw_indirect(struct panvk_cmd_buffer *cmdbuf,
VkResult result;
/* If there's no vertex shader, we can skip the draw. */
if (!panvk_priv_mem_dev_addr(vs->rsd))
if (!panvk_priv_mem_check_alloc(vs->rsd))
return;
/* Needs to be done before get_fs() is called because it depends on
+6
View File
@@ -148,6 +148,12 @@ panvk_priv_mem_flags(struct panvk_priv_mem mem)
return mem.bo & PANVK_PRIV_MEM_FLAGS_MASK;
}
static inline bool
panvk_priv_mem_check_alloc(struct panvk_priv_mem mem)
{
return panvk_priv_mem_bo(mem) != NULL;
}
static inline uint64_t
panvk_priv_mem_dev_addr(struct panvk_priv_mem mem)
{
@@ -67,6 +67,9 @@ panvk_per_arch(CreateBufferView)(VkDevice _device,
#else
view->mem =
panvk_pool_alloc_desc(&device->mempools.rw, SURFACE_WITH_STRIDE);
if (!panvk_priv_mem_check_alloc(view->mem))
return panvk_error(device, VK_ERROR_OUT_OF_DEVICE_MEMORY);
struct pan_ptr ptr = {
.gpu = panvk_priv_mem_dev_addr(view->mem),
.cpu = panvk_priv_mem_host_addr(view->mem),
@@ -168,7 +168,7 @@ get_preload_shader(struct panvk_device *dev,
#if PAN_ARCH >= 9
shader->spd = panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_host_addr(shader->spd)) {
if (!panvk_priv_mem_check_alloc(shader->spd)) {
vk_shader_destroy(&dev->vk, &shader->vk, NULL);
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
}
+1 -1
View File
@@ -150,7 +150,7 @@ prepare_tex_descs(struct panvk_image_view *view)
#endif
view->mem = panvk_pool_alloc_mem(&dev->mempools.rw, alloc_info);
if (!panvk_priv_mem_host_addr(view->mem))
if (!panvk_priv_mem_check_alloc(view->mem))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
struct pan_ptr ptr = {
+10 -10
View File
@@ -1082,7 +1082,7 @@ panvk_shader_upload(struct panvk_device *dev,
shader->code_mem = panvk_pool_upload_aligned(
&dev->mempools.exec, shader->bin_ptr, shader->bin_size, 128);
if (!panvk_priv_mem_dev_addr(shader->code_mem))
if (!panvk_priv_mem_check_alloc(shader->code_mem))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
#if PAN_ARCH < 9
@@ -1090,7 +1090,7 @@ panvk_shader_upload(struct panvk_device *dev,
return VK_SUCCESS;
shader->rsd = panvk_pool_alloc_desc(&dev->mempools.rw, RENDERER_STATE);
if (!panvk_priv_mem_dev_addr(shader->rsd))
if (!panvk_priv_mem_check_alloc(shader->rsd))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->rsd), RENDERER_STATE,
@@ -1101,7 +1101,7 @@ panvk_shader_upload(struct panvk_device *dev,
#else
if (shader->info.stage != MESA_SHADER_VERTEX) {
shader->spd = panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spd))
if (!panvk_priv_mem_check_alloc(shader->spd))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spd), SHADER_PROGRAM,
@@ -1128,7 +1128,7 @@ panvk_shader_upload(struct panvk_device *dev,
#if PAN_ARCH >= 12
shader->spds.all_points =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.all_points))
if (!panvk_priv_mem_check_alloc(shader->spds.all_points))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spds.all_points),
@@ -1143,7 +1143,7 @@ panvk_shader_upload(struct panvk_device *dev,
shader->spds.all_triangles =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.all_triangles))
if (!panvk_priv_mem_check_alloc(shader->spds.all_triangles))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spds.all_triangles),
@@ -1159,7 +1159,7 @@ panvk_shader_upload(struct panvk_device *dev,
#else
shader->spds.pos_points =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.pos_points))
if (!panvk_priv_mem_check_alloc(shader->spds.pos_points))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spds.pos_points),
@@ -1175,7 +1175,7 @@ panvk_shader_upload(struct panvk_device *dev,
shader->spds.pos_triangles =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.pos_triangles))
if (!panvk_priv_mem_check_alloc(shader->spds.pos_triangles))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spds.pos_triangles),
@@ -1193,7 +1193,7 @@ panvk_shader_upload(struct panvk_device *dev,
if (shader->info.vs.secondary_enable) {
shader->spds.var =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.var))
if (!panvk_priv_mem_check_alloc(shader->spds.var))
return panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_cast_and_pack(panvk_priv_mem_host_addr(shader->spds.var),
@@ -2082,7 +2082,7 @@ emit_varying_attrs(struct panvk_pool *desc_pool,
{
*mem = panvk_pool_alloc_desc_array(desc_pool, varying_count, ATTRIBUTE);
if (varying_count && !panvk_priv_mem_dev_addr(*mem))
if (varying_count && !panvk_priv_mem_check_alloc(*mem))
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
struct mali_attribute_packed *attrs = panvk_priv_mem_host_addr(*mem);
@@ -2320,7 +2320,7 @@ panvk_per_arch(create_internal_shader)(
if (bin_size) {
shader->code_mem = panvk_pool_upload_aligned(&dev->mempools.exec,
binary.data, bin_size, 128);
if (!panvk_priv_mem_dev_addr(shader->code_mem)) {
if (!panvk_priv_mem_check_alloc(shader->code_mem)) {
result = panvk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
goto err_free_shader;
}