mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
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:
parent
e8633b3b49
commit
a0f49428fd
3 changed files with 33 additions and 13 deletions
|
|
@ -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};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue