- if (explicit_stride && interface_row_major)
- return get_instance(base_type, vector_elements, 1, explicit_stride);
- else
- return get_instance(base_type, vector_elements, 1);
+ if (interface_row_major) {
+ /* If we're row-major, the vector element stride is the same as the
+ * matrix stride and we have no alignment (i.e. component-aligned).
+ */
+ return get_instance(base_type, vector_elements, 1,
+ explicit_stride, false, 0);
+ } else {
+ /* Otherwise, the vector is tightly packed (stride=0). For
+ * alignment, we treat a matrix as an array of columns make the same
+ * assumption that the alignment of the column is the same as the
+ * alignment of the whole matrix.
+ */
+ return get_instance(base_type, vector_elements, 1,
+ 0, false, explicit_alignment);
+ }