From 1f071db43a676c17c1765434ed0abfcf3d659815 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 22 Apr 2020 10:05:59 +1000 Subject: [PATCH] llvmpipe: fix d32 unorm depth conversions. When the depth value was 1.0 and was being converted to Z32_UNORM the conversion would scale it up to INT32_MAX + 1 which would cause FPToSI to give incorrect results, changing it to use FPToUI for the unsigned 32-bit case only fixes it. Fixes: GTF-GL45.gtf30.GL3Tests.depth_texture.depth_texture_fbo_clear Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/auxiliary/gallivm/lp_bld_conv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_conv.c b/src/gallium/auxiliary/gallivm/lp_bld_conv.c index c688965a73e..579801ca93a 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_conv.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_conv.c @@ -321,7 +321,10 @@ lp_build_clamped_float_to_unsigned_norm(struct gallivm_state *gallivm, res = LLVMBuildFMul(builder, src, lp_build_const_vec(gallivm, src_type, scale), ""); - res = LLVMBuildFPToSI(builder, res, int_vec_type, ""); + if (!src_type.sign && src_type.width == 32) + res = LLVMBuildFPToUI(builder, res, int_vec_type, ""); + else + res = LLVMBuildFPToSI(builder, res, int_vec_type, ""); /* * Align the most significant bit to its final place. -- 2.30.2