summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r600/sb/sb_bc_decoder.cpp')
-rw-r--r--src/gallium/drivers/r600/sb/sb_bc_decoder.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp b/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
index d26b6b3bb6..314ad3706e 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
@@ -236,13 +236,26 @@ int bc_decoder::decode_cf_mem(unsigned & i, bc_cf& bc) {
uint32_t dw1 = dw[i++];
assert(i <= ndw);
- CF_ALLOC_EXPORT_WORD0_ALL w0(dw0);
- bc.array_base = w0.get_ARRAY_BASE();
- bc.elem_size = w0.get_ELEM_SIZE();
- bc.index_gpr = w0.get_INDEX_GPR();
- bc.rw_gpr = w0.get_RW_GPR();
- bc.rw_rel = w0.get_RW_REL();
- bc.type = w0.get_TYPE();
+ if (!(bc.op_ptr->flags & CF_RAT)) {
+ CF_ALLOC_EXPORT_WORD0_ALL w0(dw0);
+ bc.array_base = w0.get_ARRAY_BASE();
+ bc.elem_size = w0.get_ELEM_SIZE();
+ bc.index_gpr = w0.get_INDEX_GPR();
+ bc.rw_gpr = w0.get_RW_GPR();
+ bc.rw_rel = w0.get_RW_REL();
+ bc.type = w0.get_TYPE();
+ } else {
+ assert(ctx.is_egcm());
+ CF_ALLOC_EXPORT_WORD0_RAT_EGCM w0(dw0);
+ bc.elem_size = w0.get_ELEM_SIZE();
+ bc.index_gpr = w0.get_INDEX_GPR();
+ bc.rw_gpr = w0.get_RW_GPR();
+ bc.rw_rel = w0.get_RW_REL();
+ bc.type = w0.get_TYPE();
+ bc.rat_id = w0.get_RAT_ID();
+ bc.rat_inst = w0.get_RAT_INST();
+ bc.rat_index_mode = w0.get_RAT_INDEX_MODE();
+ }
if (ctx.is_evergreen()) {
CF_ALLOC_EXPORT_WORD1_BUF_EG w1(dw1);