Mesa (master): freedreno/ir3: Fix loading half-float immediate vectors

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 3 19:44:33 UTC 2019


Module: Mesa
Branch: master
Commit: 8cd1b76b7d9e5190b74653c4f40672c2024839a1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8cd1b76b7d9e5190b74653c4f40672c2024839a1

Author: Neil Roberts <nroberts at igalia.com>
Date:   Sun Dec  2 18:15:52 2018 +0100

freedreno/ir3: Fix loading half-float immediate vectors

Previously the code to load from a constant instruction was always
using the u32 pointer. If the constant is actually a 16-bit source
this would end up with the wrong values because the pointer would be
offset by the wrong size. This fixes it to use the u16 pointer.

Signed-off-by: Rob Clark <robdclark at chromium.org>

---

 src/freedreno/ir3/ir3_compiler_nir.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index f4192b961d7..0a97c42159f 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -1586,10 +1586,19 @@ emit_load_const(struct ir3_context *ctx, nir_load_const_instr *instr)
 {
 	struct ir3_instruction **dst = ir3_get_dst_ssa(ctx, &instr->def,
 			instr->def.num_components);
-	type_t type = (instr->def.bit_size < 32) ? TYPE_U16 : TYPE_U32;
 
-	for (int i = 0; i < instr->def.num_components; i++)
-		dst[i] = create_immed_typed(ctx->block, instr->value[i].u32, type);
+	if (instr->def.bit_size < 32) {
+		for (int i = 0; i < instr->def.num_components; i++)
+			dst[i] = create_immed_typed(ctx->block,
+										instr->value[i].u16,
+										TYPE_U16);
+	} else {
+		for (int i = 0; i < instr->def.num_components; i++)
+			dst[i] = create_immed_typed(ctx->block,
+										instr->value[i].u32,
+										TYPE_U32);
+	}
+
 }
 
 static void




More information about the mesa-commit mailing list