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 <lionel.g.landwerlin@intel.com>
This commit is contained in:
@@ -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);
|
struct vtn_value *val = vtn_push_value(b, w[1], vtn_value_type_type);
|
||||||
|
|
||||||
val->type = rzalloc(b, struct vtn_type);
|
val->type = rzalloc(b, struct vtn_type);
|
||||||
val->type->val = val;
|
val->type->id = w[1];
|
||||||
|
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
case SpvOpTypeVoid:
|
case SpvOpTypeVoid:
|
||||||
|
@@ -274,8 +274,8 @@ struct vtn_type {
|
|||||||
|
|
||||||
const struct glsl_type *type;
|
const struct glsl_type *type;
|
||||||
|
|
||||||
/* The value that declares this type. Used for finding decorations */
|
/* The SPIR-V id of the given type. */
|
||||||
struct vtn_value *val;
|
uint32_t id;
|
||||||
|
|
||||||
/* Specifies the length of complex types.
|
/* Specifies the length of complex types.
|
||||||
*
|
*
|
||||||
|
@@ -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);
|
vtn_foreach_decoration(b, val, var_is_patch_cb, &var->patch);
|
||||||
if (glsl_type_is_array(var->type->type) &&
|
if (glsl_type_is_array(var->type->type) &&
|
||||||
glsl_type_is_struct(without_array->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);
|
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
|
/* For inputs and outputs, we need to grab locations and builtin
|
||||||
* information from the interface type.
|
* 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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user