Signed-off-by: Vadim Girlin <vadimgir...@gmail.com>
---
 src/gallium/drivers/r600/sb/sb_bc.h           | 12 +++++++++++-
 src/gallium/drivers/r600/sb/sb_bc_builder.cpp |  2 +-
 src/gallium/drivers/r600/sb/sb_bc_decoder.cpp |  5 ++++-
 src/gallium/drivers/r600/sb/sb_bc_dump.cpp    | 13 +++++++++++--
 4 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_bc.h 
b/src/gallium/drivers/r600/sb/sb_bc.h
index 25255a7..9f546be 100644
--- a/src/gallium/drivers/r600/sb/sb_bc.h
+++ b/src/gallium/drivers/r600/sb/sb_bc.h
@@ -470,10 +470,16 @@ struct bc_cf {
        unsigned comp_mask:4;
 
        unsigned rat_id:4;
-       unsigned rat_inst:6;
        unsigned rat_index_mode:2;
 
+       const rat_op_info *rat_op_ptr;
+       unsigned rat_op;
+
        void set_op(unsigned op) { this->op = op; op_ptr = r600_isa_cf(op); }
+       void set_rat_op(unsigned op) {
+               this->rat_op = op;
+               rat_op_ptr = r600_isa_rat(op);
+       }
 
        bool is_alu_extended() {
                assert(op_ptr->flags & CF_ALU);
@@ -652,6 +658,10 @@ public:
                return r600_isa_cf_opcode(isa->hw_class, op);
        }
 
+       unsigned rat_opcode(unsigned op) {
+               return r600_isa_rat_opcode(isa->hw_class, op);
+       }
+
        unsigned alu_opcode(unsigned op) {
                return r600_isa_alu_opcode(isa->hw_class, op);
        }
diff --git a/src/gallium/drivers/r600/sb/sb_bc_builder.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
index 55e2a85..4322f45 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_builder.cpp
@@ -267,7 +267,7 @@ int bc_builder::build_cf_exp(cf_node* n) {
                                .INDEX_GPR(bc.index_gpr)
                                .RAT_ID(bc.rat_id)
                                .RAT_INDEX_MODE(bc.rat_index_mode)
-                               .RAT_INST(bc.rat_inst)
+                               .RAT_INST(ctx.rat_opcode(bc.rat_op))
                                .RW_GPR(bc.rw_gpr)
                                .RW_REL(bc.rw_rel)
                                .TYPE(bc.type);
diff --git a/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
index 5e233f9..0f3c57a 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_decoder.cpp
@@ -242,13 +242,16 @@ int bc_decoder::decode_cf_mem(unsigned & i, bc_cf& bc) {
        } else {
                assert(ctx.is_egcm());
                CF_ALLOC_EXPORT_WORD0_RAT_EGCM w0(dw0);
+               unsigned rat_opcode = w0.get_RAT_INST();
+
+               bc.set_rat_op(r600_isa_rat_by_opcode(ctx.isa, rat_opcode));
+
                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();
        }
 
diff --git a/src/gallium/drivers/r600/sb/sb_bc_dump.cpp 
b/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
index 9d76465..152a33f 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_dump.cpp
@@ -140,15 +140,24 @@ void bc_dump::dump(cf_node& n) {
        } else if (n.bc.op_ptr->flags & (CF_STRM | CF_RAT)) {
                static const char *exp_type[] = {"WRITE", "WRITE_IND", 
"WRITE_ACK",
                                "WRITE_IND_ACK"};
+
+               bool rat = (n.bc.op_ptr->flags & CF_RAT) != 0;
+
                fill_to(s, 18);
                s << " " << exp_type[n.bc.type] << " ";
+
+               if (rat) {
+                       s << n.bc.rat_op_ptr->name << " ";
+               }
+
                s.print_wl(n.bc.array_base, 5);
                s << " R" << n.bc.rw_gpr << ".";
                for (int k = 0; k < 4; ++k)
                        s << ((n.bc.comp_mask & (1 << k)) ? chans[k] : '_');
 
-               if ((n.bc.op_ptr->flags & CF_RAT) && (n.bc.type & 1)) {
-                       s << ", @R" << n.bc.index_gpr << ".xyz";
+               if (rat) {
+                       if (n.bc.type & 1)
+                               s << ", @R" << n.bc.index_gpr << ".xyz";
                }
 
                s << "  ES:" << n.bc.elem_size;
-- 
1.8.2.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to