diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index 3af79019276..48f7bb25940 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -660,12 +660,17 @@ nir_visitor::create_function(ir_function_signature *ir) /* The return value is a variable deref (basically an out parameter) */ func->params[np].num_components = 1; func->params[np].bit_size = 32; + func->params[np].type = ir->return_type; + func->params[np].is_return = true; np++; } foreach_in_list(ir_variable, param, &ir->parameters) { func->params[np].num_components = 1; func->params[np].bit_size = 32; + + func->params[np].type = param->type; + func->params[np].is_return = false; np++; } assert(np == func->num_params); diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 013dfe0d009..e9b8b70e8d5 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -3468,6 +3468,12 @@ nir_cf_list_is_empty_block(struct exec_list *cf_list) typedef struct { uint8_t num_components; uint8_t bit_size; + + /* True if this paramater is actually the function return variable */ + bool is_return; + + /* The type of the function param */ + const struct glsl_type *type; } nir_parameter; typedef struct nir_function {