+static void
+declare_global_input_sgprs(struct nir_to_llvm_context *ctx,
+ gl_shader_stage stage,
+ bool has_previous_stage,
+ gl_shader_stage previous_stage,
+ const struct user_sgpr_info *user_sgpr_info,
+ struct arg_info *args,
+ LLVMValueRef *desc_sets)
+{
+ LLVMTypeRef type = const_array(ctx->ac.i8, 1024 * 1024);
+ unsigned num_sets = ctx->options->layout ?
+ ctx->options->layout->num_sets : 0;
+ unsigned stage_mask = 1 << stage;
+
+ if (has_previous_stage)
+ stage_mask |= 1 << previous_stage;
+
+ /* 1 for each descriptor set */
+ if (!user_sgpr_info->indirect_all_descriptor_sets) {
+ for (unsigned i = 0; i < num_sets; ++i) {
+ if (ctx->options->layout->set[i].layout->shader_stages & stage_mask) {
+ add_user_sgpr_array_argument(args, type,
+ &ctx->descriptor_sets[i]);
+ }
+ }
+ } else {
+ add_user_sgpr_array_argument(args, const_array(type, 32),
+ desc_sets);
+ }
+
+ if (ctx->shader_info->info.needs_push_constants) {
+ /* 1 for push constants and dynamic descriptors */
+ add_user_sgpr_array_argument(args, type,
+ &ctx->push_constants);
+ }
+}
+