panvk: Check allocation failures in panvk_shader_upload()

Allocations done in panvk_shader_upload() can fail. Add NULL checks so
we don't silently ignore such allocation failures.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Mary Guillemard <mary.guillemard@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31382>
This commit is contained in:
Boris Brezillon
2024-09-23 16:35:58 +02:00
committed by Marge Bot
parent bf9d6b96e0
commit 7da23be734
+15
View File
@@ -661,12 +661,16 @@ panvk_shader_upload(struct panvk_device *dev, struct panvk_shader *shader,
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))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
#if PAN_ARCH <= 7
if (shader->info.stage == MESA_SHADER_FRAGMENT)
return VK_SUCCESS;
shader->rsd = panvk_pool_alloc_desc(&dev->mempools.rw, RENDERER_STATE);
if (!panvk_priv_mem_dev_addr(shader->rsd))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_pack(panvk_priv_mem_host_addr(shader->rsd), RENDERER_STATE, cfg) {
pan_shader_prepare_rsd(&shader->info, panvk_shader_get_dev_addr(shader),
@@ -675,6 +679,8 @@ panvk_shader_upload(struct panvk_device *dev, struct panvk_shader *shader,
#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))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_pack(panvk_priv_mem_host_addr(shader->spd), SHADER_PROGRAM, cfg) {
cfg.stage = pan_shader_stage(&shader->info);
@@ -696,6 +702,9 @@ panvk_shader_upload(struct panvk_device *dev, struct panvk_shader *shader,
} else {
shader->spds.pos_points =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.pos_points))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_pack(panvk_priv_mem_host_addr(shader->spds.pos_points),
SHADER_PROGRAM, cfg) {
cfg.stage = pan_shader_stage(&shader->info);
@@ -709,6 +718,9 @@ panvk_shader_upload(struct panvk_device *dev, struct panvk_shader *shader,
shader->spds.pos_triangles =
panvk_pool_alloc_desc(&dev->mempools.rw, SHADER_PROGRAM);
if (!panvk_priv_mem_dev_addr(shader->spds.pos_triangles))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_pack(panvk_priv_mem_host_addr(shader->spds.pos_triangles),
SHADER_PROGRAM, cfg) {
cfg.stage = pan_shader_stage(&shader->info);
@@ -724,6 +736,9 @@ panvk_shader_upload(struct panvk_device *dev, struct panvk_shader *shader,
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))
return vk_error(dev, VK_ERROR_OUT_OF_DEVICE_MEMORY);
pan_pack(panvk_priv_mem_host_addr(shader->spds.var), SHADER_PROGRAM,
cfg) {
unsigned work_count = shader->info.vs.secondary_work_reg_count;