From 2aaa1564ad0620724eaf38d66cec85dafad4613e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alejandro=20Pi=C3=B1eiro?= Date: Tue, 15 Sep 2020 23:53:14 +0200 Subject: [PATCH] nir/lower_io: don't reduce range if parent length is zero When handling arrays, range is increased based on the array size minus one. But if such is zero, it has the effect of reducing the range. Handle that case by returning the unknown range value. v2: * Add missing braces. * Return unknown range in this case, instead of keeping the initial range. v3: Simplify code, using existing "fail" label. (Jason) Fixes the following using v3dv: dEQP-VK.graphicsfuzz.cov-simplify-clamp-max-itself Reviewed-by: Jason Ekstrand Reviewed-by: Eric Anholt Part-of: --- src/compiler/nir/nir_lower_io.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 52c22ad..986c4c0 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -982,10 +982,13 @@ nir_get_explicit_deref_range(nir_deref_instr *deref, goto fail; if (deref->deref_type != nir_deref_type_array_wildcard && - nir_src_is_const(deref->arr.index)) + nir_src_is_const(deref->arr.index)) { base += stride * nir_src_as_uint(deref->arr.index); - else + } else { + if (glsl_get_length(parent->type) == 0) + goto fail; range += stride * (glsl_get_length(parent->type) - 1); + } break; } -- 2.7.4