spirv: Add more asserts in vtn_vector_construct

Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99465
This commit is contained in:
Jason Ekstrand
2017-02-06 21:16:54 -08:00
parent 25aa98c014
commit 1de3cd8a34

View File

@@ -2334,9 +2334,17 @@ vtn_vector_construct(struct vtn_builder *b, unsigned num_components,
nir_alu_instr *vec = create_vec(b->shader, num_components,
srcs[0]->bit_size);
/* From the SPIR-V 1.1 spec for OpCompositeConstruct:
*
* "When constructing a vector, there must be at least two Constituent
* operands."
*/
assert(num_srcs >= 2);
unsigned dest_idx = 0;
for (unsigned i = 0; i < num_srcs; i++) {
nir_ssa_def *src = srcs[i];
assert(dest_idx + src->num_components <= num_components);
for (unsigned j = 0; j < src->num_components; j++) {
vec->src[dest_idx].src = nir_src_for_ssa(src);
vec->src[dest_idx].swizzle[0] = j;
@@ -2344,6 +2352,13 @@ vtn_vector_construct(struct vtn_builder *b, unsigned num_components,
}
}
/* From the SPIR-V 1.1 spec for OpCompositeConstruct:
*
* "When constructing a vector, the total number of components in all
* the operands must equal the number of components in Result Type."
*/
assert(dest_idx == num_components);
nir_builder_instr_insert(&b->nb, &vec->instr);
return &vec->dest.dest.ssa;