Mesa (master): freedreno/ir3: disable TGSI specific hacks in nir case

Rob Clark robclark at kemper.freedesktop.org
Sun May 15 21:34:55 UTC 2016


Module: Mesa
Branch: master
Commit: 2f1581059b31a99e8f15dff6339a4bd80baebe1b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f1581059b31a99e8f15dff6339a4bd80baebe1b

Author: Rob Clark <robclark at freedesktop.org>
Date:   Mon Mar 21 11:42:04 2016 -0400

freedreno/ir3: disable TGSI specific hacks in nir case

When we got NIR directly from state tracker (vs using tgsi_to_nir) we
need to realize this and skip some TGSI specific hacks.

Signed-off-by: Rob Clark <robclark at freedesktop.org>

---

 src/gallium/drivers/freedreno/ir3/ir3_cmdline.c      | 1 +
 src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c | 4 ++--
 src/gallium/drivers/freedreno/ir3/ir3_shader.c       | 1 +
 src/gallium/drivers/freedreno/ir3/ir3_shader.h       | 3 +++
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
index 7007d20..47bcec4 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
@@ -241,6 +241,7 @@ int main(int argc, char **argv)
 		tgsi_dump(toks, 0);
 
 	nir_shader *nir = ir3_tgsi_to_nir(toks);
+	s.from_tgsi = true;
 	s.compiler = ir3_compiler_create(NULL, gpu_id);
 	s.nir = ir3_optimize_nir(&s, nir, NULL);
 
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
index a81aee3..33b2b7b 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler_nir.c
@@ -2488,8 +2488,8 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
 		/* preserve hack for depth output.. tgsi writes depth to .z,
 		 * but what we give the hw is the scalar register:
 		 */
-		if ((so->type == SHADER_FRAGMENT) &&
-			(so->outputs[i].slot == FRAG_RESULT_DEPTH))
+		if (so->shader->from_tgsi && (so->type == SHADER_FRAGMENT) &&
+				(so->outputs[i].slot == FRAG_RESULT_DEPTH))
 			so->outputs[i].regid += 2;
 	}
 
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_shader.c b/src/gallium/drivers/freedreno/ir3/ir3_shader.c
index cd596cf..ee0018f 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_shader.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_shader.c
@@ -294,6 +294,7 @@ ir3_shader_create(struct ir3_compiler *compiler,
 			tgsi_dump(cso->tokens, 0);
 		}
 		nir = ir3_tgsi_to_nir(cso->tokens);
+		shader->from_tgsi = true;
 	}
 	/* do first pass optimization, ignoring the key: */
 	shader->nir = ir3_optimize_nir(shader, nir, NULL);
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_shader.h b/src/gallium/drivers/freedreno/ir3/ir3_shader.h
index 077ba5d..c17a76b 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_shader.h
+++ b/src/gallium/drivers/freedreno/ir3/ir3_shader.h
@@ -252,6 +252,9 @@ struct ir3_shader {
 	uint32_t id;
 	uint32_t variant_count;
 
+	/* so we know when we can disable TGSI related hacks: */
+	bool from_tgsi;
+
 	struct ir3_compiler *compiler;
 
 	nir_shader *nir;




More information about the mesa-commit mailing list