From 60f7735b202ffc9c5a188db7d53b8c659ad0ea5a Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Tue, 16 Feb 2021 23:52:04 -0600 Subject: [PATCH] vkd3d-shader: Correctly dump array types. Signed-off-by: Zebediah Figura Signed-off-by: Henri Verbeet Signed-off-by: Matteo Bruni Signed-off-by: Alexandre Julliard --- libs/vkd3d-shader/hlsl.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index f181439c..342fe6af 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -693,10 +693,27 @@ char *hlsl_type_to_string(const struct hlsl_type *type) return string; case HLSL_CLASS_ARRAY: - name = hlsl_base_type_to_string(type->e.array.type); - if ((string = malloc(strlen(name) + 15))) - sprintf(string, "%s[%u]", name, type->e.array.elements_count); + { + const struct hlsl_type *t; + char *inner_string; + size_t len = 1; + + for (t = type; t->type == HLSL_CLASS_ARRAY; t = t->e.array.type) + len += 14; + if (!(inner_string = hlsl_type_to_string(t))) + return NULL; + len += strlen(inner_string); + + if ((string = malloc(len))) + { + strcpy(string, inner_string); + for (t = type; t->type == HLSL_CLASS_ARRAY; t = t->e.array.type) + sprintf(string + strlen(string), "[%u]", t->e.array.elements_count); + } + + vkd3d_free(inner_string); return string; + } case HLSL_CLASS_STRUCT: return vkd3d_strdup("");