panvk: Remove dynarray from panvk_shader

Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29161>
This commit is contained in:
Mary Guillemard 2024-05-13 10:40:11 +02:00 committed by Marge Bot
parent e8633b3b49
commit a0f49428fd
3 changed files with 33 additions and 13 deletions

View file

@ -65,12 +65,9 @@ init_pipeline_shader(struct panvk_pipeline *pipeline,
if (!shader)
return vk_error(dev, VK_ERROR_OUT_OF_HOST_MEMORY);
void *shader_data = util_dynarray_element(&shader->binary, uint8_t, 0);
unsigned shader_sz = util_dynarray_num_elements(&shader->binary, uint8_t);
if (shader_sz) {
pshader->code = panvk_pool_upload_aligned(&dev->mempools.exec,
shader_data, shader_sz, 128);
if (shader->bin_size) {
pshader->code = panvk_pool_upload_aligned(
&dev->mempools.exec, shader->bin_ptr, shader->bin_size, 128);
} else {
pshader->code = (struct panvk_priv_mem){0};
}

View file

@ -10,8 +10,6 @@
#error "PAN_ARCH must be defined"
#endif
#include "util/u_dynarray.h"
#include "util/pan_ir.h"
#include "pan_desc.h"
@ -118,9 +116,11 @@ struct panvk_shader_desc_info {
struct panvk_shader {
struct pan_shader_info info;
struct util_dynarray binary;
struct pan_compute_dim local_size;
struct panvk_shader_desc_info desc_info;
const void *bin_ptr;
uint32_t bin_size;
};
struct panvk_shader *panvk_per_arch(shader_create)(

View file

@ -36,6 +36,7 @@
#include "spirv/nir_spirv.h"
#include "util/mesa-sha1.h"
#include "util/u_dynarray.h"
#include "nir_builder.h"
#include "nir_conversion_builder.h"
#include "nir_deref.h"
@ -151,8 +152,6 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
if (!shader)
return NULL;
util_dynarray_init(&shader->binary, NULL);
/* TODO these are made-up */
const struct spirv_to_nir_options spirv_options = {
.ubo_addr_format = nir_address_format_32bit_index_offset,
@ -301,7 +300,31 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
NIR_PASS_V(nir, nir_shader_instructions_pass, panvk_lower_sysvals,
nir_metadata_block_index | nir_metadata_dominance, NULL);
GENX(pan_shader_compile)(nir, &inputs, &shader->binary, &shader->info);
struct util_dynarray binary;
util_dynarray_init(&binary, NULL);
GENX(pan_shader_compile)(nir, &inputs, &binary, &shader->info);
void *bin_ptr = util_dynarray_element(&binary, uint8_t, 0);
unsigned bin_size = util_dynarray_num_elements(&binary, uint8_t);
shader->bin_size = 0;
shader->bin_ptr = NULL;
if (bin_size) {
void *data = malloc(bin_size);
if (data == NULL) {
ralloc_free(nir);
panvk_per_arch(shader_destroy)(dev, shader, alloc);
return NULL;
}
memcpy(data, bin_ptr, bin_size);
shader->bin_size = bin_size;
shader->bin_ptr = data;
}
util_dynarray_fini(&binary);
/* Patch the descriptor count */
shader->info.ubo_count =
@ -350,7 +373,7 @@ panvk_per_arch(shader_destroy)(struct panvk_device *dev,
struct panvk_shader *shader,
const VkAllocationCallbacks *alloc)
{
util_dynarray_fini(&shader->binary);
free((void *)shader->bin_ptr);
free(shader->desc_info.dyn_ubos.map);
vk_free2(&dev->vk.alloc, alloc, shader);
}