From 1de3cd8a3425e1b4d54155c040e73acd9903efe5 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 6 Feb 2017 21:16:54 -0800 Subject: [PATCH] spirv: Add more asserts in vtn_vector_construct MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Samuel Iglesias Gonsálvez Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99465 --- src/compiler/spirv/spirv_to_nir.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 9f0b8fd3665..416e12a4953 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -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; -- 2.30.2