Module: Mesa
Branch: staging/23.2
Commit: 68cf3ae3e113e4e6dec2d6827d791f48461ff9cb
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=68cf3ae3e113e4e6dec2d6827d791f48461ff9cb

Author: Karol Herbst <[email protected]>
Date:   Thu Jul 27 00:23:20 2023 +0200

nv50/ir/nir: fix txq emission on MS textures

In GL and a lot of Vulkan if we end up with either a lod or an ms index.

Sadly in Vulkan we can end up with both and have to choose properly. For
TXQ we have to emit a zero LOD. For TXF we have to emit the ms index.

Fixes: bb032d8b629 ("nv50/ir/nir: implement nir_instr_type_tex")
Signed-off-by: Karol Herbst <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24343>
(cherry picked from commit 85a31fa1fc906d500e10a7fa5c9973aa17e7f1d6)

---

 .pick_status.json                        | 2 +-
 src/nouveau/codegen/nv50_ir_from_nir.cpp | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 4f7ce294d2e..c0a8cbe0dda 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -22894,7 +22894,7 @@
         "description": "nv50/ir/nir: fix txq emission on MS textures",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "bb032d8b629cd42c8b7767d9f2156530b1b746f9",
         "notes": null
diff --git a/src/nouveau/codegen/nv50_ir_from_nir.cpp 
b/src/nouveau/codegen/nv50_ir_from_nir.cpp
index 95e1869f456..b1aa76add75 100644
--- a/src/nouveau/codegen/nv50_ir_from_nir.cpp
+++ b/src/nouveau/codegen/nv50_ir_from_nir.cpp
@@ -2970,8 +2970,12 @@ Converter::visit(nir_tex_instr *insn)
          srcs.push_back(loadImm(NULL, 0));
       if (biasIdx != -1)
          srcs.push_back(getSrc(&insn->src[biasIdx].src, 0));
-      if (lodIdx != -1)
+      // TXQ requires a lod argument for all queries we care about here.
+      // For other ops on MS textures we skip it.
+      if (lodIdx != -1 && !target.isMS())
          srcs.push_back(getSrc(&insn->src[lodIdx].src, 0));
+      else if (op == OP_TXQ)
+         srcs.push_back(zero); // TXQ always needs an LOD
       else if (op == OP_TXF)
          lz = true;
       if (msIdx != -1)
@@ -3038,6 +3042,7 @@ Converter::visit(nir_tex_instr *insn)
          texi->tex.mask = 0x8;
          texi->tex.query = TXQ_DIMS;
          break;
+      // TODO: TXQ_SAMPLE_POSITION needs the sample id instead of the LOD 
emited further up.
       default:
          break;
       }

Reply via email to