From 8bad7f33c661eb0ec10d54b6297ed537822a4c78 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 3 Jan 2018 08:41:42 -0800 Subject: [PATCH] spirv: Store the id of the type in vtn_type Previously, we were storing a pointer to the vtn_value because we use it to look up decorations when we create input/output variables. This works, but it also may be useful to have the id itself so we may as well store that instead. Reviewed-by: Lionel Landwerlin --- src/compiler/spirv/spirv_to_nir.c | 2 +- src/compiler/spirv/vtn_private.h | 4 ++-- src/compiler/spirv/vtn_variables.c | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 7a4b52f4fde..09aea54ed39 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -928,7 +928,7 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, struct vtn_value *val = vtn_push_value(b, w[1], vtn_value_type_type); val->type = rzalloc(b, struct vtn_type); - val->type->val = val; + val->type->id = w[1]; switch (opcode) { case SpvOpTypeVoid: diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index 374643a7a84..f27ef8e3eff 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -274,8 +274,8 @@ struct vtn_type { const struct glsl_type *type; - /* The value that declares this type. Used for finding decorations */ - struct vtn_value *val; + /* The SPIR-V id of the given type. */ + uint32_t id; /* Specifies the length of complex types. * diff --git a/src/compiler/spirv/vtn_variables.c b/src/compiler/spirv/vtn_variables.c index d69b0562ed6..2b3b3405e4d 100644 --- a/src/compiler/spirv/vtn_variables.c +++ b/src/compiler/spirv/vtn_variables.c @@ -1793,7 +1793,8 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val, vtn_foreach_decoration(b, val, var_is_patch_cb, &var->patch); if (glsl_type_is_array(var->type->type) && glsl_type_is_struct(without_array->type)) { - vtn_foreach_decoration(b, without_array->val, + vtn_foreach_decoration(b, vtn_value(b, without_array->id, + vtn_value_type_type), var_is_patch_cb, &var->patch); } @@ -1849,7 +1850,9 @@ vtn_create_variable(struct vtn_builder *b, struct vtn_value *val, /* For inputs and outputs, we need to grab locations and builtin * information from the interface type. */ - vtn_foreach_decoration(b, interface_type->val, var_decoration_cb, var); + vtn_foreach_decoration(b, vtn_value(b, interface_type->id, + vtn_value_type_type), + var_decoration_cb, var); break; } -- 2.11.0