diff --git a/src/compiler/nir/nir_serialize.c b/src/compiler/nir/nir_serialize.c index fe917ee4a0b..a4aaa9b3bde 100644 --- a/src/compiler/nir/nir_serialize.c +++ b/src/compiler/nir/nir_serialize.c @@ -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; -} diff --git a/src/compiler/nir/nir_serialize.h b/src/compiler/nir/nir_serialize.h index 6a9ba820286..d20c6df3b36 100644 --- a/src/compiler/nir/nir_serialize.h +++ b/src/compiler/nir/nir_serialize.h @@ -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, diff --git a/src/intel/vulkan/anv_pipeline_cache.c b/src/intel/vulkan/anv_pipeline_cache.c index 2239277b384..098966382d6 100644 --- a/src/intel/vulkan/anv_pipeline_cache.c +++ b/src/intel/vulkan/anv_pipeline_cache.c @@ -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 = diff --git a/src/util/u_printf.c b/src/util/u_printf.c index 79ecca578c5..b432e8925e6 100644 --- a/src/util/u_printf.c +++ b/src/util/u_printf.c @@ -27,7 +27,10 @@ #include #include +#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; +} diff --git a/src/util/u_printf.h b/src/util/u_printf.h index 82d0d337f87..a89a5041105 100644 --- a/src/util/u_printf.h +++ b/src/util/u_printf.h @@ -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;