Mesa (master): freedreno/ir3: need different compiler options for a5xx

Rob Clark robclark at kemper.freedesktop.org
Tue May 23 16:37:13 UTC 2017


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

Author: Rob Clark <robdclark at gmail.com>
Date:   Tue May 23 09:09:41 2017 -0400

freedreno/ir3: need different compiler options for a5xx

vertex_id_zero_based differs..

Signed-off-by: Rob Clark <robdclark at gmail.com>

---

 src/gallium/drivers/freedreno/freedreno_screen.c |  2 +-
 src/gallium/drivers/freedreno/ir3/ir3_cmdline.c  |  8 ++++++--
 src/gallium/drivers/freedreno/ir3/ir3_nir.c      | 21 ++++++++++++++++++++-
 src/gallium/drivers/freedreno/ir3/ir3_nir.h      |  2 +-
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index e8ed082a61..a783d20454 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -676,7 +676,7 @@ fd_get_compiler_options(struct pipe_screen *pscreen,
 	struct fd_screen *screen = fd_screen(pscreen);
 
 	if (is_ir3(screen))
-		return ir3_get_compiler_options();
+		return ir3_get_compiler_options(screen->compiler);
 
 	return NULL;
 }
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
index ba1bfa8b3b..10cf9c4556 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_cmdline.c
@@ -96,6 +96,8 @@ fixup_varying_slots(struct exec_list *var_list)
 	}
 }
 
+static struct ir3_compiler *compiler;
+
 static nir_shader *
 load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
 {
@@ -109,7 +111,7 @@ load_glsl(unsigned num_files, char* const* files, gl_shader_stage stage)
 	if (!prog)
 		errx(1, "couldn't parse `%s'", files[0]);
 
-	nir_shader *nir = glsl_to_nir(prog, stage, ir3_get_compiler_options());
+	nir_shader *nir = glsl_to_nir(prog, stage, ir3_get_compiler_options(compiler));
 
 	standalone_compiler_cleanup(prog);
 
@@ -366,6 +368,8 @@ int main(int argc, char **argv)
 
 	nir_shader *nir;
 
+	compiler = ir3_compiler_create(NULL, gpu_id);
+
 	if (s.from_tgsi) {
 		struct tgsi_token toks[65536];
 
@@ -392,7 +396,7 @@ int main(int argc, char **argv)
 		return -1;
 	}
 
-	s.compiler = ir3_compiler_create(NULL, gpu_id);
+	s.compiler = compiler;
 	s.nir = ir3_optimize_nir(&s, nir, NULL);
 
 	v.key = key;
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_nir.c b/src/gallium/drivers/freedreno/ir3/ir3_nir.c
index d0083d8fc8..9fb41fcce0 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_nir.c
@@ -52,6 +52,23 @@ static const nir_shader_compiler_options options = {
 		.lower_extract_word = true,
 };
 
+static const nir_shader_compiler_options options_5xx = {
+		.lower_fpow = true,
+		.lower_fsat = true,
+		.lower_scmp = true,
+		.lower_flrp32 = true,
+		.lower_flrp64 = true,
+		.lower_ffract = true,
+		.lower_fmod32 = true,
+		.lower_fmod64 = true,
+		.lower_fdiv = true,
+		.fuse_ffma = true,
+		.native_integers = true,
+		.vertex_id_zero_based = false,
+		.lower_extract_byte = true,
+		.lower_extract_word = true,
+};
+
 struct nir_shader *
 ir3_tgsi_to_nir(const struct tgsi_token *tokens)
 {
@@ -59,8 +76,10 @@ ir3_tgsi_to_nir(const struct tgsi_token *tokens)
 }
 
 const nir_shader_compiler_options *
-ir3_get_compiler_options(void)
+ir3_get_compiler_options(struct ir3_compiler *compiler)
 {
+	if (compiler->gpu_id >= 500)
+		return &options_5xx;
 	return &options;
 }
 
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_nir.h b/src/gallium/drivers/freedreno/ir3/ir3_nir.h
index e1e95238c2..2e2e093b09 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_nir.h
+++ b/src/gallium/drivers/freedreno/ir3/ir3_nir.h
@@ -38,7 +38,7 @@ bool ir3_nir_lower_if_else(nir_shader *shader);
 bool ir3_nir_apply_trig_workarounds(nir_shader *shader);
 
 struct nir_shader * ir3_tgsi_to_nir(const struct tgsi_token *tokens);
-const nir_shader_compiler_options * ir3_get_compiler_options(void);
+const nir_shader_compiler_options * ir3_get_compiler_options(struct ir3_compiler *compiler);
 bool ir3_key_lowers_nir(const struct ir3_shader_key *key);
 struct nir_shader * ir3_optimize_nir(struct ir3_shader *shader, nir_shader *s,
 		const struct ir3_shader_key *key);




More information about the mesa-commit mailing list