spirv: Rework asserts in var_decoration_cb

Now that higher levels are enforcing decoration sanity, we don't need
the vtn_asserts here.  This function *should* be safe but we still want
a few well-placed regular asserts in case something goes awry.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
Jason Ekstrand
2017-12-12 09:44:59 -08:00
parent 71ea4dded5
commit 819adfdfb4

View File

@@ -1465,11 +1465,11 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
} }
if (val->value_type == vtn_value_type_pointer) { if (val->value_type == vtn_value_type_pointer) {
vtn_assert(val->pointer->var == void_var); assert(val->pointer->var == void_var);
vtn_assert(val->pointer->chain == NULL); assert(val->pointer->chain == NULL);
vtn_assert(member == -1); assert(member == -1);
} else { } else {
vtn_assert(val->value_type == vtn_value_type_type); assert(val->value_type == vtn_value_type_type);
} }
/* Location is odd. If applied to a split structure, we have to walk the /* Location is odd. If applied to a split structure, we have to walk the
@@ -1501,7 +1501,7 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
vtn_var->var->data.location = location; vtn_var->var->data.location = location;
} else { } else {
/* This handles the structure member case */ /* This handles the structure member case */
vtn_assert(vtn_var->members); assert(vtn_var->members);
unsigned length = unsigned length =
glsl_get_length(glsl_without_array(vtn_var->type->type)); glsl_get_length(glsl_without_array(vtn_var->type->type));
for (unsigned i = 0; i < length; i++) { for (unsigned i = 0; i < length; i++) {
@@ -1514,11 +1514,12 @@ var_decoration_cb(struct vtn_builder *b, struct vtn_value *val, int member,
return; return;
} else { } else {
if (vtn_var->var) { if (vtn_var->var) {
vtn_assert(member <= 0); assert(member == -1);
apply_var_decoration(b, vtn_var->var, dec); apply_var_decoration(b, vtn_var->var, dec);
} else if (vtn_var->members) { } else if (vtn_var->members) {
if (member >= 0) { if (member >= 0) {
vtn_assert(vtn_var->members); /* Member decorations must come from a type */
assert(val->value_type == vtn_value_type_type);
apply_var_decoration(b, vtn_var->members[member], dec); apply_var_decoration(b, vtn_var->members[member], dec);
} else { } else {
unsigned length = unsigned length =