summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r600/sb/sb_bc_builder.cpp')
-rw-r--r--src/gallium/drivers/r600/sb/sb_bc_builder.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_bc_builder.cpp b/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
index b9c05e6aa0..e62e007774 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
@@ -274,14 +274,28 @@ int bc_builder::build_cf_exp(cf_node* n) {
const bc_cf &bc = n->bc;
const cf_op_info *cfop = bc.op_ptr;
- bb << CF_ALLOC_EXPORT_WORD0_ALL()
- .ARRAY_BASE(bc.array_base)
- .ELEM_SIZE(bc.elem_size)
- .INDEX_GPR(bc.index_gpr)
- .RW_GPR(bc.rw_gpr)
- .RW_REL(bc.rw_rel)
- .TYPE(bc.type);
+ if (cfop->flags & CF_RAT) {
+ assert(ctx.is_egcm());
+
+ bb << CF_ALLOC_EXPORT_WORD0_RAT_EGCM()
+ .ELEM_SIZE(bc.elem_size)
+ .INDEX_GPR(bc.index_gpr)
+ .RAT_ID(bc.rat_id)
+ .RAT_INDEX_MODE(bc.rat_index_mode)
+ .RAT_INST(bc.rat_inst)
+ .RW_GPR(bc.rw_gpr)
+ .RW_REL(bc.rw_rel)
+ .TYPE(bc.type);
+ } else {
+ bb << CF_ALLOC_EXPORT_WORD0_ALL()
+ .ARRAY_BASE(bc.array_base)
+ .ELEM_SIZE(bc.elem_size)
+ .INDEX_GPR(bc.index_gpr)
+ .RW_GPR(bc.rw_gpr)
+ .RW_REL(bc.rw_rel)
+ .TYPE(bc.type);
+ }
if (cfop->flags & CF_EXP) {