r600/sfn: Add support for shared atomics
[mesa.git] / src / gallium / drivers / r600 / sb / sb_shader.cpp
index 87e28e9815752c0f8e609f4c83a7bbfdeea97704..321e24ea256e51a1d484b77fdfda9d5496a46adf 100644 (file)
@@ -91,6 +91,7 @@ cf_node* shader::create_clause(node_subtype nst) {
        case NST_ALU_CLAUSE: n->bc.set_op(CF_OP_ALU); break;
        case NST_TEX_CLAUSE: n->bc.set_op(CF_OP_TEX); break;
        case NST_VTX_CLAUSE: n->bc.set_op(CF_OP_VTX); break;
+       case NST_GDS_CLAUSE: n->bc.set_op(CF_OP_GDS); break;
        default: assert(!"invalid clause type"); break;
        }
 
@@ -215,7 +216,7 @@ void shader::init() {
 void shader::init_call_fs(cf_node* cf) {
        unsigned gpr = 0;
 
-       assert(target == TARGET_VS || target == TARGET_ES);
+       assert(target == TARGET_LS || target == TARGET_VS || target == TARGET_ES);
 
        for(inputs_vec::const_iterator I = inputs.begin(),
                        E = inputs.end(); I != E; ++I, ++gpr) {
@@ -436,6 +437,8 @@ const char* shader::get_shader_target_name() {
                case TARGET_ES: return "ES";
                case TARGET_PS: return "PS";
                case TARGET_GS: return "GS";
+               case TARGET_HS: return "HS";
+               case TARGET_LS: return "LS";
                case TARGET_COMPUTE: return "COMPUTE";
                case TARGET_FETCH: return "FETCH";
                default:
@@ -595,6 +598,8 @@ sched_queue_id shader::get_queue_id(node* n) {
                        fetch_node *f = static_cast<fetch_node*>(n);
                        if (ctx.is_r600() && (f->bc.op_ptr->flags & FF_VTX))
                                return SQ_VTX;
+                       if (f->bc.op_ptr->flags & FF_GDS)
+                               return SQ_GDS;
                        return SQ_TEX;
                }
                case NST_CF_INST: