intel/nir: Fix txs for null surfaces

Closes: #4860
Fixes: 05a37e2422 ("intel/nir: Set lower txs with non-zero LOD")

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11435>
(cherry picked from commit 4c67924251)
This commit is contained in:
Iván Briano 2021-06-16 15:49:25 -07:00 committed by Eric Engestrom
parent 46d222c2ab
commit c0d172016d
2 changed files with 8 additions and 4 deletions

View file

@ -445,7 +445,7 @@
"description": "intel/nir: Fix txs for null surfaces",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "05a37e2422080278a668f048cd8bc7a0e4d5d644"
},

View file

@ -1091,10 +1091,14 @@ nir_lower_txs_lod(nir_builder *b, nir_tex_instr *tex)
nir_instr_rewrite_src(&tex->instr, &tex->src[lod_idx].src,
nir_src_for_ssa(nir_imm_int(b, 0)));
/* TXS(LOD) = max(TXS(0) >> LOD, 1) */
/* TXS(LOD) = max(TXS(0) >> LOD, 1)
* But we do min(TXS(0), TXS(LOD)) to catch the case of a null surface,
* which should return 0, not 1.
*/
b->cursor = nir_after_instr(&tex->instr);
nir_ssa_def *minified = nir_imax(b, nir_ushr(b, &tex->dest.ssa, lod),
nir_imm_int(b, 1));
nir_ssa_def *minified = nir_imin(b, &tex->dest.ssa,
nir_imax(b, nir_ushr(b, &tex->dest.ssa, lod),
nir_imm_int(b, 1)));
/* Make sure the component encoding the array size (if any) is not
* minified.