Mesa (main): freedreno+ir3: Enable INT16
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 30 00:25:49 UTC 2021
Module: Mesa
Branch: main
Commit: 140ce4f8ede44b743b11772c84d912065174af42
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=140ce4f8ede44b743b11772c84d912065174af42
Author: Rob Clark <robdclark at chromium.org>
Date: Mon Jun 21 14:21:00 2021 -0700
freedreno+ir3: Enable INT16
Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11545>
---
src/freedreno/ci/traces-freedreno.yml | 4 ++--
src/freedreno/ir3/ir3_nir.c | 14 ++++++++++++++
src/gallium/drivers/freedreno/freedreno_screen.c | 2 +-
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/freedreno/ci/traces-freedreno.yml b/src/freedreno/ci/traces-freedreno.yml
index 2d528fcff82..199cf43ec9a 100644
--- a/src/freedreno/ci/traces-freedreno.yml
+++ b/src/freedreno/ci/traces-freedreno.yml
@@ -67,7 +67,7 @@ traces:
# - device: freedreno-a530
# checksum: 1ae49af7017ae2a08fbb1caf377ada91
- device: freedreno-a630
- checksum: fede0e29fa22a625be6adbd86e70c8c6
+ checksum: eb89b63087f6f252923f567228035b4b
- path: 0ad/0ad.trace
expectations:
# triggers hangcheck on db410c
@@ -268,7 +268,7 @@ traces:
- device: freedreno-a306
checksum: c31e4b18d29e87751e4c30760ddfef18
- device: freedreno-a530
- checksum: a68a23264fb802d59c92b3a58753e6a4
+ checksum: 3272ac6018600da9cc61636416ed387e
- device: freedreno-a630
checksum: 2570e22fbb4ad1a68b45e4caf682d77d
- path: glmark2/jellyfish.trace
diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c
index 4fdbabb72cc..0f13f5b25ee 100644
--- a/src/freedreno/ir3/ir3_nir.c
+++ b/src/freedreno/ir3/ir3_nir.c
@@ -223,6 +223,20 @@ ir3_optimize_loop(struct ir3_compiler *compiler, nir_shader *s)
progress |= OPT(s, nir_opt_gcm, false);
progress |= OPT(s, nir_opt_peephole_select, 16, true, true);
progress |= OPT(s, nir_opt_intrinsics);
+ /* NOTE: GS lowering inserts an output var with varying slot that
+ * is larger than VARYING_SLOT_MAX (ie. GS_VERTEX_FLAGS_IR3),
+ * which triggers asserts in nir_shader_gather_info(). To work
+ * around that skip lowering phi precision for GS.
+ *
+ * Calling nir_shader_gather_info() late also seems to cause
+ * problems for tess lowering, for now since we only enable
+ * fp16/int16 for frag and compute, skip phi precision lowering
+ * for other stages.
+ */
+ if ((s->info.stage == MESA_SHADER_FRAGMENT) ||
+ (s->info.stage == MESA_SHADER_COMPUTE)) {
+ progress |= OPT(s, nir_opt_phi_precision);
+ }
progress |= OPT(s, nir_opt_algebraic);
progress |= OPT(s, nir_lower_alu);
progress |= OPT(s, nir_lower_pack);
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index cfd368db2e4..72fe7112d3a 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -641,9 +641,9 @@ fd_screen_get_shader_param(struct pipe_screen *pscreen,
case PIPE_SHADER_CAP_INT64_ATOMICS:
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
- case PIPE_SHADER_CAP_INT16:
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
return 0;
+ case PIPE_SHADER_CAP_INT16:
case PIPE_SHADER_CAP_FP16:
return (
(is_a5xx(screen) || is_a6xx(screen)) &&
More information about the mesa-commit
mailing list