From dbd022f2ab43ff0a9ecc05c61123467e25f109de Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 16 May 2022 18:37:17 -0700 Subject: [PATCH] nir: spirv: Allow 32-bit version of nir_intrinsic_is_sparse_texels_resident MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This intrinsic returns a Boolean. Both 1-bit and 32-bit versions must be allowed. Otherwise, size mismatches will occur after lowering 1-bit Booleans to 32-bit. Fixes: 4cbdf9ec4d4 ("nir,spirv: implement SpvOpImageSparseTexelsResident") Reviewed-by: Jason Ekstrand Reviewed-by: Marek Olšák Part-of: --- src/compiler/nir/nir_intrinsics.py | 2 +- src/compiler/spirv/spirv_to_nir.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 838adb16a23..81066ad09ba 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -319,7 +319,7 @@ intrinsic("deref_mode_is", src_comp=[-1], dest_comp=1, intrinsic("addr_mode_is", src_comp=[-1], dest_comp=1, indices=[MEMORY_MODES], flags=[CAN_ELIMINATE, CAN_REORDER]) -intrinsic("is_sparse_texels_resident", dest_comp=1, src_comp=[1], bit_sizes=[1], +intrinsic("is_sparse_texels_resident", dest_comp=1, src_comp=[1], bit_sizes=[1,32], flags=[CAN_ELIMINATE, CAN_REORDER]) # result code is resident only if both inputs are resident intrinsic("sparse_residency_code_and", dest_comp=1, src_comp=[1, 1], bit_sizes=[32], diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index a2794da84fc..7ddb6130274 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2701,7 +2701,7 @@ vtn_handle_texture(struct vtn_builder *b, SpvOp opcode, return; } else if (opcode == SpvOpImageSparseTexelsResident) { nir_ssa_def *code = vtn_get_nir_ssa(b, w[3]); - vtn_push_nir_ssa(b, w[2], nir_is_sparse_texels_resident(&b->nb, code)); + vtn_push_nir_ssa(b, w[2], nir_is_sparse_texels_resident(&b->nb, 1, code)); return; }