Mesa (master): freedreno/a5xx: fix negative branches

Rob Clark robclark at kemper.freedesktop.org
Wed Nov 30 22:33:21 UTC 2016


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

Author: Rob Clark <robdclark at gmail.com>
Date:   Wed Nov 30 16:43:42 2016 -0500

freedreno/a5xx: fix negative branches

Looks like immed branch offset size increased again.. making what we
think is a small negative number look to hw like a huge positive number.
And things go badly when shader tries to jump to hyperspace.

Signed-off-by: Rob Clark <robdclark at gmail.com>

---

 src/gallium/drivers/freedreno/ir3/instr-a3xx.h | 3 +++
 src/gallium/drivers/freedreno/ir3/ir3.c        | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/ir3/instr-a3xx.h b/src/gallium/drivers/freedreno/ir3/instr-a3xx.h
index 87083fd..0d369b6 100644
--- a/src/gallium/drivers/freedreno/ir3/instr-a3xx.h
+++ b/src/gallium/drivers/freedreno/ir3/instr-a3xx.h
@@ -296,6 +296,9 @@ typedef struct PACKED {
 			int32_t  immed    : 20;
 			uint32_t dummy1   : 12;
 		} a4xx;
+		struct PACKED {
+			uint32_t immed    : 32;
+		} a5xx;
 	};
 
 	/* dword1: */
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.c b/src/gallium/drivers/freedreno/ir3/ir3.c
index c0a39d7..7c925ee 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3.c
@@ -129,7 +129,9 @@ static int emit_cat0(struct ir3_instruction *instr, void *ptr,
 {
 	instr_cat0_t *cat0 = ptr;
 
-	if (info->gpu_id >= 400) {
+	if (info->gpu_id >= 500) {
+		cat0->a5xx.immed = instr->cat0.immed;
+	} else if (info->gpu_id >= 400) {
 		cat0->a4xx.immed = instr->cat0.immed;
 	} else {
 		cat0->a3xx.immed = instr->cat0.immed;




More information about the mesa-commit mailing list