From 43f22110e7a99b5f5b67f05a273741feb595cc8e Mon Sep 17 00:00:00 2001 From: Ella Stanforth Date: Mon, 28 Apr 2025 17:47:33 +0100 Subject: [PATCH] nir/printf: break out va_list handling Reviewed-by: Alyssa Rosenzweig Reviewed-by: Lionel Landwerlin Part-of: --- src/compiler/nir/nir_lower_printf.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir_lower_printf.c b/src/compiler/nir/nir_lower_printf.c index 465e801f119..204fd575511 100644 --- a/src/compiler/nir/nir_lower_printf.c +++ b/src/compiler/nir/nir_lower_printf.c @@ -199,8 +199,8 @@ nir_lower_printf_buffer(nir_shader *nir, uint64_t address, uint32_t size) nir_metadata_control_flow, &opts); } -void -nir_printf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, ...) +static void +nir_vprintf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, va_list aq) { u_printf_info info = { .strings = ralloc_strdup(b->shader, fmt), @@ -211,7 +211,7 @@ nir_printf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, ...) size_t pos = 0; size_t args_size = 0; - va_start(ap, fmt); + va_copy(ap, aq); while ((pos = util_printf_next_spec_pos(fmt, pos)) != -1) { unsigned arg_size; switch (fmt[pos]) { @@ -294,7 +294,7 @@ nir_printf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, ...) nir_store_global(b, store_addr, 4, identifier, 0x1); /* Arguments */ - va_start(ap, fmt); + va_copy(ap, aq); unsigned store_offset = sizeof(uint32_t); for (unsigned a = 0; a < info.num_args; a++) { nir_def *def = va_arg(ap, nir_def *); @@ -320,3 +320,12 @@ nir_printf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, ...) */ u_printf_singleton_add(&info, 1); } + +void +nir_printf_fmt(nir_builder *b, unsigned ptr_bit_size, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + nir_vprintf_fmt(b, ptr_bit_size, fmt, ap); + va_end(ap); +}