r600g/sb: dump sampler/resource index modes for textures.
[mesa.git] / src / gallium / drivers / r600 / sb / sb_shader.cpp
index 5944ba66f48b072580b8267bf1e6622291cd5848..f996c0786d123bd51cb71dccb089f774dcbc3597 100644 (file)
 
 #include "sb_bc.h"
 #include "sb_shader.h"
-
 #include "sb_pass.h"
 
 namespace r600_sb {
 
-using std::cerr;
-
-shader::shader(sb_context &sctx, shader_target t, unsigned id, bool dump)
+shader::shader(sb_context &sctx, shader_target t, unsigned id)
 : ctx(sctx), next_temp_value_index(temp_regid_offset),
   prep_regs_count(), pred_sels(),
   regions(), inputs(), undef(), val_pool(sizeof(value)),
-  pool(), all_nodes(), src_stats(), opt_stats(), errors(), enable_dump(dump),
+  pool(), all_nodes(), src_stats(), opt_stats(), errors(),
   optimized(), id(id),
   coal(*this), bbs(),
   target(t), vt(ex), ex(*this), root(),
   compute_interferences(),
-  has_alu_predication(), uses_gradients(), ngpr(), nstack() {}
+  has_alu_predication(),
+  uses_gradients(), safe_math(), ngpr(), nstack(), dce_flags() {}
 
 bool shader::assign_slot(alu_node* n, alu_node *slots[5]) {
 
@@ -217,7 +215,7 @@ void shader::init() {
 void shader::init_call_fs(cf_node* cf) {
        unsigned gpr = 0;
 
-       assert(target == TARGET_VS);
+       assert(target == TARGET_VS || target == TARGET_ES);
 
        for(inputs_vec::const_iterator I = inputs.begin(),
                        E = inputs.end(); I != E; ++I, ++gpr) {
@@ -263,7 +261,6 @@ node* shader::create_node(node_type nt, node_subtype nst, node_flags flags) {
 
 alu_node* shader::create_alu() {
        alu_node* n = new (pool.allocate(sizeof(alu_node))) alu_node();
-       memset(&n->bc, 0, sizeof(bc_alu));
        all_nodes.push_back(n);
        return n;
 }
@@ -284,7 +281,6 @@ alu_packed_node* shader::create_alu_packed() {
 
 cf_node* shader::create_cf() {
        cf_node* n = new (pool.allocate(sizeof(cf_node))) cf_node();
-       memset(&n->bc, 0, sizeof(bc_cf));
        n->bc.barrier = 1;
        all_nodes.push_back(n);
        return n;
@@ -292,7 +288,6 @@ cf_node* shader::create_cf() {
 
 fetch_node* shader::create_fetch() {
        fetch_node* n = new (pool.allocate(sizeof(fetch_node))) fetch_node();
-       memset(&n->bc, 0, sizeof(bc_fetch));
        all_nodes.push_back(n);
        return n;
 }
@@ -400,7 +395,7 @@ void shader::add_gpr_array(unsigned gpr_start, unsigned gpr_count,
                        gpr_array *a = new gpr_array(
                                        sel_chan(gpr_start, chan), gpr_count);
 
-                       SB_DUMP_PASS( cerr << "add_gpr_array: @" << a->base_gpr
+                       SB_DUMP_PASS( sblog << "add_gpr_array: @" << a->base_gpr
                                 << " [" << a->array_size << "]\n";
                        );
 
@@ -429,63 +424,16 @@ cf_node* shader::create_cf(unsigned op) {
 std::string shader::get_full_target_name() {
        std::string s = get_shader_target_name();
        s += "/";
-       s += get_hw_chip_name();
+       s += ctx.get_hw_chip_name();
        s += "/";
-       s += get_hw_class_name();
+       s += ctx.get_hw_class_name();
        return s;
 }
 
-const char* shader::get_hw_class_name() {
-       switch (ctx.hw_class) {
-#define TRANSLATE_HW_CLASS(c) case HW_CLASS_##c: return #c
-               TRANSLATE_HW_CLASS(R600);
-               TRANSLATE_HW_CLASS(R700);
-               TRANSLATE_HW_CLASS(EVERGREEN);
-               TRANSLATE_HW_CLASS(CAYMAN);
-#undef TRANSLATE_HW_CLASS
-               default:
-                       return "INVALID_CHIP_CLASS";
-       }
-}
-
-const char* shader::get_hw_chip_name() {
-       switch (ctx.hw_chip) {
-#define TRANSLATE_CHIP(c) case HW_CHIP_##c: return #c
-               TRANSLATE_CHIP(R600);
-               TRANSLATE_CHIP(RV610);
-               TRANSLATE_CHIP(RV630);
-               TRANSLATE_CHIP(RV670);
-               TRANSLATE_CHIP(RV620);
-               TRANSLATE_CHIP(RV635);
-               TRANSLATE_CHIP(RS780);
-               TRANSLATE_CHIP(RS880);
-               TRANSLATE_CHIP(RV770);
-               TRANSLATE_CHIP(RV730);
-               TRANSLATE_CHIP(RV710);
-               TRANSLATE_CHIP(RV740);
-               TRANSLATE_CHIP(CEDAR);
-               TRANSLATE_CHIP(REDWOOD);
-               TRANSLATE_CHIP(JUNIPER);
-               TRANSLATE_CHIP(CYPRESS);
-               TRANSLATE_CHIP(HEMLOCK);
-               TRANSLATE_CHIP(PALM);
-               TRANSLATE_CHIP(SUMO);
-               TRANSLATE_CHIP(SUMO2);
-               TRANSLATE_CHIP(BARTS);
-               TRANSLATE_CHIP(TURKS);
-               TRANSLATE_CHIP(CAICOS);
-               TRANSLATE_CHIP(CAYMAN);
-#undef TRANSLATE_CHIP
-
-               default:
-                       assert(!"unknown chip");
-                       return "INVALID_CHIP";
-       }
-}
-
 const char* shader::get_shader_target_name() {
        switch (target) {
                case TARGET_VS: return "VS";
+               case TARGET_ES: return "ES";
                case TARGET_PS: return "PS";
                case TARGET_GS: return "GS";
                case TARGET_COMPUTE: return "COMPUTE";
@@ -696,39 +644,39 @@ void shader_stats::accumulate(shader_stats& s) {
        cf += s.cf;
 }
 
-void shader_stats::dump(std::ostream& o) {
-       o << "dw:" << ndw << ", gpr:" << ngpr << ", stk:" << nstack
+void shader_stats::dump() {
+       sblog << "dw:" << ndw << ", gpr:" << ngpr << ", stk:" << nstack
                        << ", alu groups:" << alu_groups << ", alu clauses: " << alu_clauses
                        << ", alu:" << alu << ", fetch:" << fetch
                        << ", fetch clauses:" << fetch_clauses
                        << ", cf:" << cf;
 
        if (shaders > 1)
-               o << ", shaders:" << shaders;
+               sblog << ", shaders:" << shaders;
 
-       o << "\n";
+       sblog << "\n";
 }
 
-static void print_diff(std::ostream &o, unsigned d1, unsigned d2) {
+static void print_diff(unsigned d1, unsigned d2) {
        if (d1)
-               o << ((int)d2 - (int)d1) * 100 / (int)d1 << "%";
+               sblog << ((int)d2 - (int)d1) * 100 / (int)d1 << "%";
        else if (d2)
-               o << "N/A";
+               sblog << "N/A";
        else
-               o << "0%";
-}
-
-void shader_stats::dump_diff(std::ostream& o, shader_stats& s) {
-       o << "dw:"; print_diff(o, ndw, s.ndw);
-       o << ", gpr:" ; print_diff(o, ngpr, s.ngpr);
-       o << ", stk:" ; print_diff(o, nstack, s.nstack);
-       o << ", alu groups:" ; print_diff(o, alu_groups, s.alu_groups);
-       o << ", alu clauses: " ; print_diff(o, alu_clauses, s.alu_clauses);
-       o << ", alu:" ; print_diff(o, alu, s.alu);
-       o << ", fetch:" ; print_diff(o, fetch, s.fetch);
-       o << ", fetch clauses:" ; print_diff(o, fetch_clauses, s.fetch_clauses);
-       o << ", cf:" ; print_diff(o, cf, s.cf);
-       o << "\n";
+               sblog << "0%";
+}
+
+void shader_stats::dump_diff(shader_stats& s) {
+       sblog << "dw:"; print_diff(ndw, s.ndw);
+       sblog << ", gpr:" ; print_diff(ngpr, s.ngpr);
+       sblog << ", stk:" ; print_diff(nstack, s.nstack);
+       sblog << ", alu groups:" ; print_diff(alu_groups, s.alu_groups);
+       sblog << ", alu clauses: " ; print_diff(alu_clauses, s.alu_clauses);
+       sblog << ", alu:" ; print_diff(alu, s.alu);
+       sblog << ", fetch:" ; print_diff(fetch, s.fetch);
+       sblog << ", fetch clauses:" ; print_diff(fetch_clauses, s.fetch_clauses);
+       sblog << ", cf:" ; print_diff(cf, s.cf);
+       sblog << "\n";
 }
 
 } // namespace r600_sb