Mesa (main): radeonsi: don't pass NULL into si_get_nir_shader

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 18:36:12 UTC 2021


Module: Mesa
Branch: main
Commit: 62798d2c1f1f11e86058018c6a94c1ac50a6ca24
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=62798d2c1f1f11e86058018c6a94c1ac50a6ca24

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Oct 16 08:49:14 2021 -0400

radeonsi: don't pass NULL into si_get_nir_shader

so that we always have the shader key there

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13393>

---

 src/gallium/drivers/radeonsi/si_shader.c      |  6 ++----
 src/gallium/drivers/radeonsi/si_shader_llvm.c | 11 +++++++++--
 src/gallium/drivers/radeonsi/si_state.c       |  2 +-
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 4dc423111ab..655ffecea8b 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1369,10 +1369,8 @@ struct nir_shader *si_get_nir_shader(struct si_shader_selector *sel,
 
    bool inline_uniforms = false;
    uint32_t *inlined_uniform_values;
-   if (key) {
-      si_get_inline_uniform_state((union si_shader_key*)key, sel->pipe_shader_type,
-                                  &inline_uniforms, &inlined_uniform_values);
-   }
+   si_get_inline_uniform_state((union si_shader_key*)key, sel->pipe_shader_type,
+                               &inline_uniforms, &inlined_uniform_values);
 
    if (inline_uniforms) {
       assert(*free_nir);
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c
index 9bbb1fb95d4..bd3fe0ea326 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c
@@ -1151,14 +1151,18 @@ bool si_llvm_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler *
 
          /* VS as LS main part */
          ctx.next_shader_sel = ctx.shader->selector;
-         nir = si_get_nir_shader(ls, NULL, &free_nir);
+
          struct si_shader shader_ls = {};
          shader_ls.selector = ls;
+         shader_ls.key.ge.part.vs.prolog = shader->key.ge.part.tcs.ls_prolog;
          shader_ls.key.ge.as_ls = 1;
          shader_ls.key.ge.mono = shader->key.ge.mono;
          shader_ls.key.ge.opt = shader->key.ge.opt;
+         shader_ls.key.ge.opt.inline_uniforms = false; /* only TCS can inline uniforms */
          shader_ls.is_monolithic = true;
 
+         nir = si_get_nir_shader(ls, &shader_ls.key, &free_nir);
+
          if (!si_llvm_translate_nir(&ctx, &shader_ls, nir, free_nir, false)) {
             si_llvm_dispose(&ctx);
             return false;
@@ -1213,15 +1217,18 @@ bool si_llvm_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler *
          gs_prolog = ctx.main_fn;
 
          /* ES main part */
-         nir = si_get_nir_shader(es, NULL, &free_nir);
          struct si_shader shader_es = {};
          shader_es.selector = es;
+         shader_es.key.ge.part.vs.prolog = shader->key.ge.part.gs.vs_prolog;
          shader_es.key.ge.as_es = 1;
          shader_es.key.ge.as_ngg = shader->key.ge.as_ngg;
          shader_es.key.ge.mono = shader->key.ge.mono;
          shader_es.key.ge.opt = shader->key.ge.opt;
+         shader_es.key.ge.opt.inline_uniforms = false; /* only GS can inline uniforms */
          shader_es.is_monolithic = true;
 
+         nir = si_get_nir_shader(es, &shader_es.key, &free_nir);
+
          if (!si_llvm_translate_nir(&ctx, &shader_es, nir, free_nir, false)) {
             si_llvm_dispose(&ctx);
             return false;
diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c
index b0b2e06dd55..c2a3f2b7e2c 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -643,7 +643,7 @@ static bool si_check_blend_dst_sampler_noop(struct si_context *sctx)
       struct si_shader_selector *sel = sctx->shader.ps.cso;
       bool free_nir;
       if (unlikely(sel->info.writes_1_if_tex_is_1 == 0xff)) {
-         struct nir_shader *nir = si_get_nir_shader(sel, NULL, &free_nir);
+         struct nir_shader *nir = si_get_nir_shader(sel, &sctx->shader.ps.key, &free_nir);
 
          /* Determine if this fragment shader always writes vec4(1) if a specific texture
           * is all 1s.



More information about the mesa-commit mailing list