Module: vkd3d Branch: master Commit: 60f7735b202ffc9c5a188db7d53b8c659ad0ea5a URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=60f7735b202ffc9c5a188db7...
Author: Zebediah Figura zfigura@codeweavers.com Date: Tue Feb 16 23:52:04 2021 -0600
vkd3d-shader: Correctly dump array types.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 f181439..342fe6a 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("<anonymous struct>");