diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 598821755a5..0de2138ca0c 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -503,6 +503,9 @@ nir_function_create(nir_shader *shader, const char *name) func->dont_inline = false; func->should_inline = false; + /* Only meaningful for shader libraries, so don't export by default. */ + func->is_exported = false; + return func; } diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 9df515f1342..74985f9f336 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -3465,6 +3465,8 @@ typedef struct nir_function { nir_function_impl *impl; bool is_entrypoint; + /* from SPIR-V linkage, only for libraries */ + bool is_exported; bool is_preamble; /* from SPIR-V function control */ bool should_inline; diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 989cdd7236a..49ea8e7ccdd 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -2224,9 +2224,13 @@ print_function(nir_function *function, print_state *state) { FILE *fp = state->fp; - fprintf(fp, "decl_function %s (%d params) %s", function->name, - function->num_params, function->dont_inline ? "(noinline)" : - function->should_inline ? "(inline)" : ""); + /* clang-format off */ + fprintf(fp, "decl_function %s (%d params)%s%s", function->name, + function->num_params, + function->dont_inline ? " (noinline)" : + function->should_inline ? " (inline)" : "", + function->is_exported ? " (exported)" : ""); + /* clang-format on */ fprintf(fp, "\n"); diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c index 6882e9fb67d..13663776957 100644 --- a/src/compiler/spirv/vtn_cfg.c +++ b/src/compiler/spirv/vtn_cfg.c @@ -203,6 +203,7 @@ vtn_cfg_handle_prepass_instruction(struct vtn_builder *b, SpvOp opcode, func->should_inline = b->func->control & SpvFunctionControlInlineMask; func->dont_inline = b->func->control & SpvFunctionControlDontInlineMask; + func->is_exported = b->func->linkage == SpvLinkageTypeExport; func->num_params = num_params; func->params = ralloc_array(b->shader, nir_parameter, num_params);