diff options
Diffstat (limited to 'src/gallium/drivers/r600/sb/sb_bc_decoder.cpp')
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_bc_decoder.cpp | 27 |
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); |