From c1a6e345739b83cc0ae386f455246caee3e06ffe Mon Sep 17 00:00:00 2001 From: Connor Abbott Date: Wed, 1 Jul 2020 17:29:45 +0200 Subject: [PATCH] nir/lower_input_attachments: Support loading layer id via gl_ViewIndex This is required on adreno when the special multiview mode is switched on. Part-of: --- src/compiler/nir/nir.h | 1 + src/compiler/nir/nir_lower_input_attachments.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 6cf704c533b..5804670fb99 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -4461,6 +4461,7 @@ bool nir_lower_idiv(nir_shader *shader, enum nir_lower_idiv_path path); typedef struct nir_input_attachment_options { bool use_fragcoord_sysval; bool use_layer_id_sysval; + bool use_view_id_for_layer; } nir_input_attachment_options; bool nir_lower_input_attachments(nir_shader *shader, diff --git a/src/compiler/nir/nir_lower_input_attachments.c b/src/compiler/nir/nir_lower_input_attachments.c index 8533eb4a1f2..3a3500a0bcd 100644 --- a/src/compiler/nir/nir_lower_input_attachments.c +++ b/src/compiler/nir/nir_lower_input_attachments.c @@ -53,17 +53,22 @@ load_frag_coord(const nir_input_attachment_options *options, nir_builder *b) static nir_ssa_def * load_layer_id(const nir_input_attachment_options *options, nir_builder *b) { - if (options->use_layer_id_sysval) - return nir_load_layer_id(b); + if (options->use_layer_id_sysval) { + if (options->use_view_id_for_layer) + return nir_load_view_index(b); + else + return nir_load_layer_id(b); + } + gl_varying_slot slot = options->use_view_id_for_layer ? + VARYING_SLOT_VIEW_INDEX : VARYING_SLOT_LAYER; nir_variable *layer_id = - nir_find_variable_with_location(b->shader, nir_var_shader_in, - VARYING_SLOT_LAYER); + nir_find_variable_with_location(b->shader, nir_var_shader_in, slot); if (layer_id == NULL) { layer_id = nir_variable_create(b->shader, nir_var_shader_in, glsl_int_type(), NULL); - layer_id->data.location = VARYING_SLOT_LAYER; + layer_id->data.location = slot; layer_id->data.interpolation = INTERP_MODE_FLAT; layer_id->data.driver_location = b->shader->num_inputs++; } -- 2.30.2