From: Neil Roberts Date: Tue, 13 Mar 2018 12:26:19 +0000 (+0100) Subject: spirv: Handle doubles when multiplying a mat by a scalar X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=25a966a23d397cdfd853bc3ee54a11cf3bd3f84d;p=mesa.git spirv: Handle doubles when multiplying a mat by a scalar The code to handle mat multiplication by a scalar tries to pick either imul or fmul depending on whether the matrix is float or integer. However it was doing this by checking whether the base type is float. This was making it choose the int path for doubles (and presumably float16s). Reviewed-by: Jason Ekstrand --- diff --git a/src/compiler/spirv/vtn_alu.c b/src/compiler/spirv/vtn_alu.c index d0c9e316935..110fcec2a60 100644 --- a/src/compiler/spirv/vtn_alu.c +++ b/src/compiler/spirv/vtn_alu.c @@ -142,10 +142,10 @@ mat_times_scalar(struct vtn_builder *b, { struct vtn_ssa_value *dest = vtn_create_ssa_value(b, mat->type); for (unsigned i = 0; i < glsl_get_matrix_columns(mat->type); i++) { - if (glsl_get_base_type(mat->type) == GLSL_TYPE_FLOAT) - dest->elems[i]->def = nir_fmul(&b->nb, mat->elems[i]->def, scalar); - else + if (glsl_base_type_is_integer(glsl_get_base_type(mat->type))) dest->elems[i]->def = nir_imul(&b->nb, mat->elems[i]->def, scalar); + else + dest->elems[i]->def = nir_fmul(&b->nb, mat->elems[i]->def, scalar); } return dest;