[Mesa-dev] [PATCH RFC 2/2] nir/lower_tex: Update ->sampler_dim value before calling get_texture_size()

Boris Brezillon boris.brezillon at collabora.com
Mon Jun 17 10:21:33 UTC 2019

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.brezillon at 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)
                             nir_src_for_ssa(nir_fmul(b, coords, scale)));
-   tex->sampler_dim = GLSL_SAMPLER_DIM_2D;
 static void

More information about the mesa-dev mailing list