Mesa (staging/21.1): gallivm: handle texture arrays in non-fragment shaders with lod.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 11 20:51:07 UTC 2021


Module: Mesa
Branch: staging/21.1
Commit: fedd681b74baf806cadcf976e90495cfd6b6c550
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fedd681b74baf806cadcf976e90495cfd6b6c550

Author: Dave Airlie <airlied at redhat.com>
Date:   Fri May  7 11:26:35 2021 +1000

gallivm: handle texture arrays in non-fragment shaders with lod.

We have to unwind the lod into the scalar path correctly.

Fixes a crash with renderdoc demo

Fixes: e168d148d76d ("gallivm/nir: handle non-uniform texture offsets")
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10676>
(cherry picked from commit 83a05caaf2ce4fa9d6605eddd5658bf400f642fb)

---

 .pick_status.json                              | 2 +-
 src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 6a39f1b8b03..5003624615d 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1300,7 +1300,7 @@
         "description": "gallivm: handle texture arrays in non-fragment shaders with lod.",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "e168d148d76d780eda6f9aaa6c66608c4df3096c"
     },
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
index 6a390ecbc55..05e52083b6f 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c
@@ -1421,10 +1421,10 @@ static void emit_tex(struct lp_build_nir_context *bld_base,
                                  LLVMGetUndef(bld_base->base.vec_type),
                                  LLVMGetUndef(bld_base->base.vec_type),
                                  LLVMGetUndef(bld_base->base.vec_type) };
-      LLVMValueRef texel[4], orig_offset;
+      LLVMValueRef texel[4], orig_offset, orig_lod;
       unsigned i;
       orig_texel_ptr = params->texel;
-
+      orig_lod = params->lod;
       for (i = 0; i < 5; i++) {
          coords[i] = params->coords[i];
       }
@@ -1443,6 +1443,8 @@ static void emit_tex(struct lp_build_nir_context *bld_base,
                                                                 idx, "");
          params->type = lp_elem_type(bld_base->base.type);
 
+         if (orig_lod)
+            params->lod = LLVMBuildExtractElement(gallivm->builder, orig_lod, idx, "");
          params->texel = texel;
          bld->sampler->emit_tex_sample(bld->sampler,
                                        gallivm,



More information about the mesa-commit mailing list