From c0c728b188c6c0a7c44f18ec8b0b9ea878137669 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 25 Dec 2020 00:17:20 +0900 Subject: [PATCH] [vulkan] Fix a few code generation issues QC's int type is named "integer" (didn't feel like changing that right now), so special case it to be "int". Output the parse func name (instead of "fix me"). Output a parse func for enums (needed for arrays of enums (VkDynamicState)). --- libs/video/renderer/vulkan/vkgen/vkenum.r | 18 ++++++++++++++++++ libs/video/renderer/vulkan/vkgen/vkstruct.r | 4 ++-- libs/video/renderer/vulkan/vkgen/vktype.r | 6 ++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libs/video/renderer/vulkan/vkgen/vkenum.r b/libs/video/renderer/vulkan/vkgen/vkenum.r index 234c99b61..9f12c013e 100644 --- a/libs/video/renderer/vulkan/vkgen/vkenum.r +++ b/libs/video/renderer/vulkan/vkgen/vkenum.r @@ -120,6 +120,24 @@ skip_value(string name) fprintf (output_file, "\t&%s_symtab,\n", [self name]); fprintf (output_file, "};\n"); + fprintf (output_file, "static plfield_t %s_field = { 0, 0, QFString," + " parse_enum, &%s_enum};\n", + [self name], [self name]); + fprintf (output_file, "int parse_%s (const plfield_t *field," + " const plitem_t *item, void *data, plitem_t *messages," + " void *context)\n", + [self name]); + fprintf (output_file, "{\n"); + fprintf (output_file, + "\treturn parse_enum (&%s_field, item, data, messages," + " context);\n", + [self name]); + fprintf (output_file, "}\n"); + + fprintf (header_file, "int parse_%s (const plfield_t *field," + " const plitem_t *item, void *data, plitem_t *messages," + " void *context);\n", + [self name]); fprintf (header_file, "extern exprenum_t %s_enum;\n", [self name]); } diff --git a/libs/video/renderer/vulkan/vkgen/vkstruct.r b/libs/video/renderer/vulkan/vkgen/vkstruct.r index 761cbdade..ac03d8f41 100644 --- a/libs/video/renderer/vulkan/vkgen/vkstruct.r +++ b/libs/video/renderer/vulkan/vkgen/vkstruct.r @@ -175,7 +175,7 @@ -(string) cexprType { - return [self name] + "_type"; + return [self outname] + "_type"; } -(string) parseType @@ -185,7 +185,7 @@ -(string) parseFunc { - return "fix me"; + return "parse_" + [self outname]; } -(string) parseData diff --git a/libs/video/renderer/vulkan/vkgen/vktype.r b/libs/video/renderer/vulkan/vkgen/vktype.r index fbe44e350..735e88339 100644 --- a/libs/video/renderer/vulkan/vkgen/vktype.r +++ b/libs/video/renderer/vulkan/vkgen/vktype.r @@ -75,6 +75,9 @@ static string get_type_key (void *type, void *unused) -(string) name { if (type.meta == ty_basic) { + if (type.type == ev_integer) { + return "int"; + } return pr_type_name[type.type]; } //FIXME extract alias name and return proper type name @@ -118,6 +121,9 @@ static string get_type_key (void *type, void *unused) -(string) parseData { if (type.meta == ty_basic) { + if (type.type == ev_integer) { + return "&cexpr_int"; + } return "&cexpr_" + pr_type_name[type.type]; } return "0";