Mesa (staging/20.0): st/nir: Unify inputs_read/outputs_written before serializing NIR
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Feb 19 17:20:03 UTC 2020
Module: Mesa
Branch: staging/20.0
Commit: 555cb9e7d217c14680b61cee62605c005e086ebc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=555cb9e7d217c14680b61cee62605c005e086ebc
Author: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
Date: Wed Feb 12 12:45:55 2020 +0200
st/nir: Unify inputs_read/outputs_written before serializing NIR
Otherwise input/output interfaces won't be unified when reading
NIR from a cache.
Fixes piglit test on iris:
clip-distance-vs-gs-out.shader_test
Fixes: 19ed12af
Signed-off-by: Danylo Piliaiev <danylo.piliaiev at globallogic.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3787>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3787>
(cherry picked from commit b684ba6ce7fc6cabf42132559192e1065891e67a)
---
.pick_status.json | 2 +-
src/mesa/state_tracker/st_glsl_to_nir.cpp | 41 ++++++++++++++-----------------
2 files changed, 20 insertions(+), 23 deletions(-)
diff --git a/.pick_status.json b/.pick_status.json
index e2a31ee13ad..2ac25f64c5d 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -121,7 +121,7 @@
"description": "st/nir: Unify inputs_read/outputs_written before serializing NIR",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": "19ed12afd170c97180a9cc7eb6c5589d4c427a40"
},
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 35464c982a6..796bfb0317e 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -793,6 +793,25 @@ st_link_nir(struct gl_context *ctx,
}
}
+ struct shader_info *prev_info = NULL;
+
+ for (unsigned i = 0; i < num_shaders; i++) {
+ struct gl_linked_shader *shader = linked_shader[i];
+ struct shader_info *info = &shader->Program->nir->info;
+
+ if (prev_info &&
+ ctx->Const.ShaderCompilerOptions[shader->Stage].NirOptions->unify_interfaces) {
+ prev_info->outputs_written |= info->inputs_read &
+ ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
+ info->inputs_read |= prev_info->outputs_written &
+ ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
+
+ prev_info->patch_outputs_written |= info->patch_inputs_read;
+ info->patch_inputs_read |= prev_info->patch_outputs_written;
+ }
+ prev_info = info;
+ }
+
for (unsigned i = 0; i < num_shaders; i++) {
struct gl_linked_shader *shader = linked_shader[i];
struct gl_program *prog = shader->Program;
@@ -819,28 +838,6 @@ st_link_nir(struct gl_context *ctx,
shader->ir = NULL;
}
- struct shader_info *prev_info = NULL;
-
- for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
- struct gl_linked_shader *shader = shader_program->_LinkedShaders[i];
- if (!shader)
- continue;
-
- struct shader_info *info = &shader->Program->nir->info;
-
- if (prev_info &&
- ctx->Const.ShaderCompilerOptions[i].NirOptions->unify_interfaces) {
- prev_info->outputs_written |= info->inputs_read &
- ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
- info->inputs_read |= prev_info->outputs_written &
- ~(VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER);
-
- prev_info->patch_outputs_written |= info->patch_inputs_read;
- info->patch_inputs_read |= prev_info->patch_outputs_written;
- }
- prev_info = info;
- }
-
return true;
}
More information about the mesa-commit
mailing list