From 770faf546d14db6a8eced0da406e48a32fabf551 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timur=20Krist=C3=B3f?= Date: Tue, 19 Feb 2019 10:11:36 +0100 Subject: [PATCH] tgsi_to_nir: Improve interpolation modes. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This patch extracts the interpolation mode translation into a separate function called ttn_translate_interp_mode, adds support for TGSI_INTERPOLATE_COLOR which was missing, and also sets the proper interpolation mode to output variables, which were not set previously. Signed-Off-By: Timur Kristóf Tested-by: Andre Heider Tested-by: Rob Clark Reviewed-by: Timothy Arceri Reviewed-by: Eric Anholt --- src/gallium/auxiliary/nir/tgsi_to_nir.c | 36 ++++++++++++++----------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index 7984cea5a7b..016e2b46f08 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -180,6 +180,23 @@ ttn_src_for_dest(nir_builder *b, nir_alu_dest *dest) return nir_fmov_alu(b, src, 4); } +static enum glsl_interp_mode +ttn_translate_interp_mode(unsigned tgsi_interp) +{ + switch (tgsi_interp) { + case TGSI_INTERPOLATE_CONSTANT: + return INTERP_MODE_FLAT; + case TGSI_INTERPOLATE_LINEAR: + return INTERP_MODE_NOPERSPECTIVE; + case TGSI_INTERPOLATE_PERSPECTIVE: + return INTERP_MODE_SMOOTH; + case TGSI_INTERPOLATE_COLOR: + return INTERP_MODE_SMOOTH; + default: + unreachable("bad TGSI interpolation mode"); + } +} + static void ttn_emit_declaration(struct ttn_compile *c) { @@ -314,21 +331,8 @@ ttn_emit_declaration(struct ttn_compile *c) var->data.location = VERT_ATTRIB_GENERIC0 + idx; } var->data.index = 0; - - /* We definitely need to translate the interpolation field, because - * nir_print will decode it. - */ - switch (decl->Interp.Interpolate) { - case TGSI_INTERPOLATE_CONSTANT: - var->data.interpolation = INTERP_MODE_FLAT; - break; - case TGSI_INTERPOLATE_LINEAR: - var->data.interpolation = INTERP_MODE_NOPERSPECTIVE; - break; - case TGSI_INTERPOLATE_PERSPECTIVE: - var->data.interpolation = INTERP_MODE_SMOOTH; - break; - } + var->data.interpolation = + ttn_translate_interp_mode(decl->Interp.Interpolate); exec_list_push_tail(&b->shader->inputs, &var->node); c->inputs[idx] = var; @@ -352,6 +356,8 @@ ttn_emit_declaration(struct ttn_compile *c) var->data.mode = nir_var_shader_out; var->name = ralloc_asprintf(var, "out_%d", idx); var->data.index = 0; + var->data.interpolation = + ttn_translate_interp_mode(decl->Interp.Interpolate); if (c->scan->processor == PIPE_SHADER_FRAGMENT) { switch (semantic_name) { -- 2.30.2