mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
nir,util: move printf serializing into util
there's nothing NIR specific here and these routines will be useful otherwise. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Reviewed-by: Jesse Natalie <jenatali@microsoft.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33067>
This commit is contained in:
parent
47e16cab5e
commit
e1368f0a30
5 changed files with 64 additions and 57 deletions
|
|
@ -2146,7 +2146,7 @@ nir_serialize(struct blob *blob, const nir_shader *nir, bool strip)
|
|||
write_xfb_info(&ctx, nir->xfb_info);
|
||||
|
||||
if (nir->info.uses_printf)
|
||||
nir_serialize_printf_info(blob, nir->printf_info, nir->printf_info_count);
|
||||
u_printf_serialize_info(blob, nir->printf_info, nir->printf_info_count);
|
||||
|
||||
blob_overwrite_uint32(blob, idx_size_offset, ctx.next_idx);
|
||||
|
||||
|
|
@ -2207,8 +2207,8 @@ nir_deserialize(void *mem_ctx,
|
|||
|
||||
if (ctx.nir->info.uses_printf) {
|
||||
ctx.nir->printf_info =
|
||||
nir_deserialize_printf_info(ctx.nir, blob,
|
||||
&ctx.nir->printf_info_count);
|
||||
u_printf_deserialize_info(ctx.nir, blob,
|
||||
&ctx.nir->printf_info_count);
|
||||
}
|
||||
|
||||
free(ctx.idx_table);
|
||||
|
|
@ -2243,45 +2243,3 @@ nir_shader_serialize_deserialize(nir_shader *shader)
|
|||
nir_shader_replace(shader, copy);
|
||||
ralloc_free(dead_ctx);
|
||||
}
|
||||
|
||||
void
|
||||
nir_serialize_printf_info(struct blob *blob,
|
||||
const u_printf_info *printf_info,
|
||||
unsigned printf_info_count)
|
||||
{
|
||||
blob_write_uint32(blob, printf_info_count);
|
||||
for (int i = 0; i < printf_info_count; i++) {
|
||||
const u_printf_info *info = &printf_info[i];
|
||||
blob_write_uint32(blob, info->num_args);
|
||||
blob_write_uint32(blob, info->string_size);
|
||||
blob_write_bytes(blob, info->arg_sizes,
|
||||
info->num_args * sizeof(info->arg_sizes[0]));
|
||||
/* we can't use blob_write_string, because it contains multiple NULL
|
||||
* terminated strings */
|
||||
blob_write_bytes(blob, info->strings, info->string_size);
|
||||
}
|
||||
}
|
||||
|
||||
u_printf_info *
|
||||
nir_deserialize_printf_info(void *mem_ctx,
|
||||
struct blob_reader *blob,
|
||||
unsigned *printf_info_count)
|
||||
{
|
||||
*printf_info_count = blob_read_uint32(blob);
|
||||
|
||||
u_printf_info *printf_info =
|
||||
ralloc_array(mem_ctx, u_printf_info, *printf_info_count);
|
||||
|
||||
for (int i = 0; i < *printf_info_count; i++) {
|
||||
u_printf_info *info = &printf_info[i];
|
||||
info->num_args = blob_read_uint32(blob);
|
||||
info->string_size = blob_read_uint32(blob);
|
||||
info->arg_sizes = ralloc_array(mem_ctx, unsigned, info->num_args);
|
||||
blob_copy_bytes(blob, info->arg_sizes,
|
||||
info->num_args * sizeof(info->arg_sizes[0]));
|
||||
info->strings = ralloc_array(mem_ctx, char, info->string_size);
|
||||
blob_copy_bytes(blob, info->strings, info->string_size);
|
||||
}
|
||||
|
||||
return printf_info;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,14 +31,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
void nir_serialize_printf_info(struct blob *blob,
|
||||
const u_printf_info *info,
|
||||
unsigned printf_info_count);
|
||||
|
||||
u_printf_info *nir_deserialize_printf_info(void *mem_ctx,
|
||||
struct blob_reader *blob,
|
||||
unsigned *printf_info_count);
|
||||
|
||||
void nir_serialize(struct blob *blob, const nir_shader *nir, bool strip);
|
||||
nir_shader *nir_deserialize(void *mem_ctx,
|
||||
const struct nir_shader_compiler_options *options,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include "vk_util.h"
|
||||
#include "compiler/spirv/nir_spirv.h"
|
||||
#include "shaders/float64_spv.h"
|
||||
#include "util/u_printf.h"
|
||||
|
||||
/**
|
||||
* Embedded sampler management.
|
||||
|
|
@ -474,8 +475,8 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object *object,
|
|||
blob_write_bytes(blob, shader->prog_data->relocs,
|
||||
shader->prog_data->num_relocs *
|
||||
sizeof(shader->prog_data->relocs[0]));
|
||||
nir_serialize_printf_info(blob, shader->prog_data->printf_info,
|
||||
shader->prog_data->printf_info_count);
|
||||
u_printf_serialize_info(blob, shader->prog_data->printf_info,
|
||||
shader->prog_data->printf_info_count);
|
||||
|
||||
blob_write_uint32(blob, shader->num_stats);
|
||||
blob_write_bytes(blob, shader->stats,
|
||||
|
|
@ -555,8 +556,8 @@ anv_shader_bin_deserialize(struct vk_pipeline_cache *cache,
|
|||
|
||||
void *mem_ctx = ralloc_context(NULL);
|
||||
prog_data.base.printf_info =
|
||||
nir_deserialize_printf_info(mem_ctx, blob,
|
||||
&prog_data.base.printf_info_count);
|
||||
u_printf_deserialize_info(mem_ctx, blob,
|
||||
&prog_data.base.printf_info_count);
|
||||
|
||||
uint32_t num_stats = blob_read_uint32(blob);
|
||||
const struct brw_compile_stats *stats =
|
||||
|
|
|
|||
|
|
@ -27,7 +27,10 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "blob.h"
|
||||
#include "hash_table.h"
|
||||
#include "macros.h"
|
||||
#include "ralloc.h"
|
||||
#include "strndup.h"
|
||||
#include "u_math.h"
|
||||
#include "u_printf.h"
|
||||
|
|
@ -287,3 +290,45 @@ void u_printf_ptr(FILE *out, const char *buffer, size_t buffer_size,
|
|||
{
|
||||
u_printf_impl(out, buffer, buffer_size, NULL, info, info_size);
|
||||
}
|
||||
|
||||
void
|
||||
u_printf_serialize_info(struct blob *blob,
|
||||
const u_printf_info *printf_info,
|
||||
unsigned printf_info_count)
|
||||
{
|
||||
blob_write_uint32(blob, printf_info_count);
|
||||
for (int i = 0; i < printf_info_count; i++) {
|
||||
const u_printf_info *info = &printf_info[i];
|
||||
blob_write_uint32(blob, info->num_args);
|
||||
blob_write_uint32(blob, info->string_size);
|
||||
blob_write_bytes(blob, info->arg_sizes,
|
||||
info->num_args * sizeof(info->arg_sizes[0]));
|
||||
/* we can't use blob_write_string, because it contains multiple NULL
|
||||
* terminated strings */
|
||||
blob_write_bytes(blob, info->strings, info->string_size);
|
||||
}
|
||||
}
|
||||
|
||||
u_printf_info *
|
||||
u_printf_deserialize_info(void *mem_ctx,
|
||||
struct blob_reader *blob,
|
||||
unsigned *printf_info_count)
|
||||
{
|
||||
*printf_info_count = blob_read_uint32(blob);
|
||||
|
||||
u_printf_info *printf_info =
|
||||
ralloc_array(mem_ctx, u_printf_info, *printf_info_count);
|
||||
|
||||
for (int i = 0; i < *printf_info_count; i++) {
|
||||
u_printf_info *info = &printf_info[i];
|
||||
info->num_args = blob_read_uint32(blob);
|
||||
info->string_size = blob_read_uint32(blob);
|
||||
info->arg_sizes = ralloc_array(mem_ctx, unsigned, info->num_args);
|
||||
blob_copy_bytes(blob, info->arg_sizes,
|
||||
info->num_args * sizeof(info->arg_sizes[0]));
|
||||
info->strings = ralloc_array(mem_ctx, char, info->string_size);
|
||||
blob_copy_bytes(blob, info->strings, info->string_size);
|
||||
}
|
||||
|
||||
return printf_info;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,17 @@ typedef struct u_printf_info {
|
|||
char *strings;
|
||||
} u_printf_info;
|
||||
|
||||
struct blob;
|
||||
struct blob_reader;
|
||||
|
||||
void u_printf_serialize_info(struct blob *blob,
|
||||
const u_printf_info *info,
|
||||
unsigned printf_info_count);
|
||||
|
||||
u_printf_info *u_printf_deserialize_info(void *mem_ctx,
|
||||
struct blob_reader *blob,
|
||||
unsigned *printf_info_count);
|
||||
|
||||
struct u_printf_ctx {
|
||||
simple_mtx_t lock;
|
||||
void *bo;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue