diff options
author | Rob Clark <[email protected]> | 2016-11-30 16:43:42 -0500 |
---|---|---|
committer | Rob Clark <[email protected]> | 2016-11-30 17:32:54 -0500 |
commit | 45eef9af03639a409ef54b136bb4902b9825864b (patch) | |
tree | 4977d4a9bb70ba1be4bcf5192eb9ac6514936773 | |
parent | ef30e91fe657438828a9a41b5da1170ceee2d913 (diff) |
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 <[email protected]>
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/instr-a3xx.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3.c | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/instr-a3xx.h b/src/gallium/drivers/freedreno/ir3/instr-a3xx.h index 87083fd1e81..0d369b605f7 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 c0a39d70def..7c925ee7cb0 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; |