From 8a166364446b7c120ddc16f778e6da22f9eef122 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 6 Mar 2025 13:11:19 +0100 Subject: [PATCH] panvk: Re-order things in panvk_deserialize_shader() Re-order things in panvk_deserialize_shader() to avoid declaring local variables for stuff we feed the panvk_shader with. The only exception is pan_shader_info, because we need to know the shader stage to call vk_shader_zalloc(), which if part of pan_shader_info. Signed-off-by: Boris Brezillon Reviewed-by: Lars-Ivar Hesselberg Simonsen Part-of: --- src/panfrost/vulkan/panvk_vX_shader.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index 964850bd427..227231c88b3 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -1303,19 +1303,11 @@ panvk_deserialize_shader(struct vk_device *vk_dev, struct blob_reader *blob, { struct panvk_device *device = to_panvk_device(vk_dev); struct panvk_shader *shader; + struct pan_shader_info info; VkResult result; - struct pan_shader_info info; blob_copy_bytes(blob, &info, sizeof(info)); - struct panvk_shader_fau_info fau; - blob_copy_bytes(blob, &fau, sizeof(fau)); - - struct pan_compute_dim local_size; - blob_copy_bytes(blob, &local_size, sizeof(local_size)); - - const uint32_t bin_size = blob_read_uint32(blob); - if (blob->overrun) return panvk_error(device, VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT); @@ -1325,11 +1317,16 @@ panvk_deserialize_shader(struct vk_device *vk_dev, struct blob_reader *blob, return panvk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY); shader->info = info; - shader->fau = fau; - shader->local_size = local_size; - shader->bin_size = bin_size; + blob_copy_bytes(blob, &shader->fau, sizeof(shader->fau)); + blob_copy_bytes(blob, &shader->local_size, sizeof(shader->local_size)); + shader->bin_size = blob_read_uint32(blob); - shader->bin_ptr = malloc(bin_size); + if (blob->overrun) { + panvk_shader_destroy(vk_dev, &shader->vk, pAllocator); + return panvk_error(device, VK_ERROR_INCOMPATIBLE_SHADER_BINARY_EXT); + } + + shader->bin_ptr = malloc(shader->bin_size); if (shader->bin_ptr == NULL) { panvk_shader_destroy(vk_dev, &shader->vk, pAllocator); return panvk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);