#include "glsl_types.h"
#include "util/glheader.h"
+const char glsl_type_builtin_names[] =
+%for n in NAME_ARRAY:
+ "${n}"
+%endfor
+;
+
%for t in BUILTIN_TYPES:
const struct glsl_type glsl_type_builtin_${t["name"]} = {
%for k, v in t.items():
- %if v is None:
+ %if v is None or k == "name":
<% continue %>
- %elif k == "name":
- .name_id = (uintptr_t) "${v}",
+ %elif k == "name_id":
+ .name_id = ${v},
+ .has_builtin_name = 1,
%else:
.${k} = ${v},
%endif
output = sys.argv[1]
+# Add padding to make sure zero is an invalid name.
+invalid = "INVALID"
+NAME_ARRAY = [invalid + "\\0"]
+id = len(invalid) + 1
+
+for t in BUILTIN_TYPES:
+ name = t["name"]
+ NAME_ARRAY.append(name + "\\0")
+ t["name_id"] = id
+ id += len(name) + 1
+
with open(output, 'w') as f:
- f.write(Template(template).render(BUILTIN_TYPES=BUILTIN_TYPES))
+ f.write(Template(template).render(BUILTIN_TYPES=BUILTIN_TYPES, NAME_ARRAY=NAME_ARRAY))
#include "nir_types.h"
#include "nir_gl_types.h"
+extern "C" const char glsl_type_builtin_names[];
+
const char *
glsl_get_type_name(const glsl_type *type)
{
- return (const char *)type->name_id;
+ if (type->has_builtin_name) {
+ return &glsl_type_builtin_names[type->name_id];
+ } else {
+ return (const char *) type->name_id;
+ }
}
int