From 775ef1338428d2f48bb606c1a3c06467d5948f36 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 2 Apr 2018 15:57:25 -0700 Subject: [PATCH] nir: Support deref instructions in lower_drawpixels Reviewed-by: Caio Marcelo de Oliveira Filho Acked-by: Rob Clark Acked-by: Bas Nieuwenhuizen Acked-by: Dave Airlie Reviewed-by: Kenneth Graunke --- src/compiler/nir/nir_lower_drawpixels.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/compiler/nir/nir_lower_drawpixels.c b/src/compiler/nir/nir_lower_drawpixels.c index fcdc0bc4b41..05131affdb2 100644 --- a/src/compiler/nir/nir_lower_drawpixels.c +++ b/src/compiler/nir/nir_lower_drawpixels.c @@ -212,7 +212,20 @@ lower_drawpixels_block(lower_drawpixels_state *state, nir_block *block) nir_foreach_instr_safe(instr, block) { if (instr->type == nir_instr_type_intrinsic) { nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr); - if (intr->intrinsic == nir_intrinsic_load_var) { + if (intr->intrinsic == nir_intrinsic_load_deref) { + nir_deref_instr *deref = nir_src_as_deref(intr->src[0]); + nir_variable *var = nir_deref_instr_get_variable(deref); + + if (var->data.location == VARYING_SLOT_COL0) { + /* gl_Color should not have array/struct derefs: */ + assert(deref->deref_type == nir_deref_type_var); + lower_color(state, intr); + } else if (var->data.location == VARYING_SLOT_TEX0) { + /* gl_TexCoord should not have array/struct derefs: */ + assert(deref->deref_type == nir_deref_type_var); + lower_texcoord(state, intr); + } + } else if (intr->intrinsic == nir_intrinsic_load_var) { nir_deref_var *dvar = intr->variables[0]; nir_variable *var = dvar->var; @@ -253,11 +266,6 @@ nir_lower_drawpixels(nir_shader *shader, .shader = shader, }; - /* note that this pass already assumes texture/sampler derefs are already - * lowered to index - */ - nir_assert_lowered_derefs(shader, nir_lower_load_store_derefs); - assert(shader->info.stage == MESA_SHADER_FRAGMENT); nir_foreach_function(function, shader) {