From 83a05caaf2ce4fa9d6605eddd5658bf400f642fb Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 7 May 2021 11:26:35 +1000 Subject: [PATCH] gallivm: handle texture arrays in non-fragment shaders with lod. We have to unwind the lod into the scalar path correctly. Fixes a crash with renderdoc demo Fixes: e168d148d76d ("gallivm/nir: handle non-uniform texture offsets") Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c index 6a390ecbc55..05e52083b6f 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_nir_soa.c @@ -1421,10 +1421,10 @@ static void emit_tex(struct lp_build_nir_context *bld_base, LLVMGetUndef(bld_base->base.vec_type), LLVMGetUndef(bld_base->base.vec_type), LLVMGetUndef(bld_base->base.vec_type) }; - LLVMValueRef texel[4], orig_offset; + LLVMValueRef texel[4], orig_offset, orig_lod; unsigned i; orig_texel_ptr = params->texel; - + orig_lod = params->lod; for (i = 0; i < 5; i++) { coords[i] = params->coords[i]; } @@ -1443,6 +1443,8 @@ static void emit_tex(struct lp_build_nir_context *bld_base, idx, ""); params->type = lp_elem_type(bld_base->base.type); + if (orig_lod) + params->lod = LLVMBuildExtractElement(gallivm->builder, orig_lod, idx, ""); params->texel = texel; bld->sampler->emit_tex_sample(bld->sampler, gallivm,