[Mesa-dev] [PATCH] spirv: Add more asserts in vtn_vector_construct
Jason Ekstrand
jason at jlekstrand.net
Tue Feb 7 05:20:36 UTC 2017
On Mon, Feb 6, 2017 at 9:18 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> These are currently getting hit by the Skia Vulkan back-end
>
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 9f0b8fd..416e12a 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.5.0.400.gff86faf
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170206/e4e4c853/attachment-0001.html>
More information about the mesa-dev
mailing list