summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2016-11-30 16:43:42 -0500
committerRob Clark <robdclark@gmail.com>2016-11-30 17:32:54 -0500
commit45eef9af03639a409ef54b136bb4902b9825864b (patch)
tree4977d4a9bb70ba1be4bcf5192eb9ac6514936773 /src
parentef30e91fe657438828a9a41b5da1170ceee2d913 (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 <robdclark@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/freedreno/ir3/instr-a3xx.h3
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3.c4
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;