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