spirv: Fix matrix parameters in function calls.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sun, 6 Jan 2019 11:34:24 +0000 (12:34 +0100)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Tue, 8 Jan 2019 00:30:03 +0000 (01:30 +0100)
They can be handled exactly the same as arrays, we just need to handle
the base type correctly in the switches.

Fixes: a45b6fb4524 "spirv: Pass SSA values through functions"
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=109204
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
src/compiler/spirv/vtn_cfg.c

index 726f717e8d588686a716f5a5a901b013ebc4fe51..6406f4911dfa762b8a0c5705822678adbc007b9b 100644 (file)
@@ -47,6 +47,7 @@ vtn_type_count_function_params(struct vtn_type *type)
 {
    switch (type->base_type) {
    case vtn_base_type_array:
+   case vtn_base_type_matrix:
       return type->length * vtn_type_count_function_params(type->array_element);
 
    case vtn_base_type_struct: {
@@ -76,6 +77,7 @@ vtn_type_add_to_function_params(struct vtn_type *type,
 
    switch (type->base_type) {
    case vtn_base_type_array:
+   case vtn_base_type_matrix:
       for (unsigned i = 0; i < type->length; i++)
          vtn_type_add_to_function_params(type->array_element, func, param_idx);
       break;
@@ -123,6 +125,7 @@ vtn_ssa_value_add_to_call_params(struct vtn_builder *b,
 {
    switch (type->base_type) {
    case vtn_base_type_array:
+   case vtn_base_type_matrix:
       for (unsigned i = 0; i < type->length; i++) {
          vtn_ssa_value_add_to_call_params(b, value->elems[i],
                                           type->array_element,
@@ -152,6 +155,7 @@ vtn_ssa_value_load_function_param(struct vtn_builder *b,
 {
    switch (type->base_type) {
    case vtn_base_type_array:
+   case vtn_base_type_matrix:
       for (unsigned i = 0; i < type->length; i++) {
          vtn_ssa_value_load_function_param(b, value->elems[i],
                                            type->array_element, param_idx);