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