get_texture_size() will create a txs instruction with ->sampler_dim set to the original tex->sampler_dim. The condition to call lower_rect() only checks the value of ->sampler_dim and whether lower_rect is requested or not. This leads to an infinite loop when calling nir_lower_tex() with the same options until it returns false.
In order to avoid that, let's move the tex->sampler_dim patching before get_texture_size() is called. This way the txs instruction will have ->sampler_dim set to GLSL_SAMPLER_DIM_2D and nir_lower_tex() won't try to lower it on the subsequent passes. Signed-off-by: Boris Brezillon <boris.brezil...@collabora.com> --- Another option would be to not call lower_rect() when the instruction is a txs op. --- src/compiler/nir/nir_lower_tex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_lower_tex.c b/src/compiler/nir/nir_lower_tex.c index 73b26dbdb238..1ee961dbb90c 100644 --- a/src/compiler/nir/nir_lower_tex.c +++ b/src/compiler/nir/nir_lower_tex.c @@ -266,6 +266,8 @@ lower_offset(nir_builder *b, nir_tex_instr *tex) static void lower_rect(nir_builder *b, nir_tex_instr *tex) { + tex->sampler_dim = GLSL_SAMPLER_DIM_2D; + nir_ssa_def *txs = get_texture_size(b, tex); nir_ssa_def *scale = nir_frcp(b, txs); @@ -280,8 +282,6 @@ lower_rect(nir_builder *b, nir_tex_instr *tex) &tex->src[i].src, nir_src_for_ssa(nir_fmul(b, coords, scale))); } - - tex->sampler_dim = GLSL_SAMPLER_DIM_2D; } static void -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev