summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2015-12-23 13:17:00 -0800
committerJason Ekstrand <jason.ekstrand@intel.com>2015-12-23 13:49:56 -0800
commit452ba4db2badced650555f8af2359d928a63c5be (patch)
treee5f0f1c092009c70ee0937b002629f1ce0b4a33c /src
parent5b301323880e13b4aaf449ea9eb1ccbd05694cc0 (diff)
downloadexternal_mesa3d-452ba4db2badced650555f8af2359d928a63c5be.zip
external_mesa3d-452ba4db2badced650555f8af2359d928a63c5be.tar.gz
external_mesa3d-452ba4db2badced650555f8af2359d928a63c5be.tar.bz2
nir/spirv: Create the correct type if a matrix-vector multiply produces a vector
Diffstat (limited to 'src')
-rw-r--r--src/glsl/nir/spirv_to_nir.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/glsl/nir/spirv_to_nir.c b/src/glsl/nir/spirv_to_nir.c
index d258f23..91667e1 100644
--- a/src/glsl/nir/spirv_to_nir.c
+++ b/src/glsl/nir/spirv_to_nir.c
@@ -2369,9 +2369,14 @@ vtn_matrix_multiply(struct vtn_builder *b,
unsigned src0_columns = glsl_get_matrix_columns(src0->type);
unsigned src1_columns = glsl_get_matrix_columns(src1->type);
- struct vtn_ssa_value *dest =
- vtn_create_ssa_value(b, glsl_matrix_type(glsl_get_base_type(src0->type),
- src0_rows, src1_columns));
+ const struct glsl_type *dest_type;
+ if (src1_columns > 1) {
+ dest_type = glsl_matrix_type(glsl_get_base_type(src0->type),
+ src0_rows, src1_columns);
+ } else {
+ dest_type = glsl_vector_type(glsl_get_base_type(src0->type), src0_rows);
+ }
+ struct vtn_ssa_value *dest = vtn_create_ssa_value(b, dest_type);
dest = vtn_wrap_matrix(b, dest);