gallium: remove PIPE_CAP_USER_CONSTANT_BUFFERS
[mesa.git] / src / gallium / drivers / r600 / r600_asm.c
index a0f28d2776b786e616def4938ed8264a14197168..92c2bdf27ca6b6a6461fd28a3280390d77e41005 100644 (file)
@@ -1008,6 +1008,7 @@ static int r600_bytecode_alloc_inst_kcache_lines(struct r600_bytecode *bc,
                        continue;
 
                bank = alu->src[i].kc_bank;
+               assert(bank < R600_MAX_HW_CONST_BUFFERS);
                line = (sel-512)>>4;
                index_mode = alu->src[i].kc_rel ? 1 : 0; // V_SQ_CF_INDEX_0 / V_SQ_CF_INDEX_NONE
 
@@ -1509,7 +1510,8 @@ int cm_bytecode_add_cf_end(struct r600_bytecode *bc)
 /* common to all 3 families */
 static int r600_bytecode_vtx_build(struct r600_bytecode *bc, struct r600_bytecode_vtx *vtx, unsigned id)
 {
-       bc->bytecode[id] = S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id) |
+       bc->bytecode[id] = S_SQ_VTX_WORD0_VTX_INST(vtx->op) |
+                       S_SQ_VTX_WORD0_BUFFER_ID(vtx->buffer_id) |
                        S_SQ_VTX_WORD0_FETCH_TYPE(vtx->fetch_type) |
                        S_SQ_VTX_WORD0_SRC_GPR(vtx->src_gpr) |
                        S_SQ_VTX_WORD0_SRC_SEL_X(vtx->src_sel_x);
@@ -1625,7 +1627,8 @@ static void r600_bytecode_cf_vtx_build(uint32_t *bytecode, const struct r600_byt
        *bytecode++ = S_SQ_CF_WORD0_ADDR(cf->addr >> 1);
        *bytecode++ = S_SQ_CF_WORD1_CF_INST(r600_isa_cf_opcode(ISA_CC_R600, cf->op)) |
                        S_SQ_CF_WORD1_BARRIER(1) |
-                       S_SQ_CF_WORD1_COUNT((cf->ndw / 4) - 1);
+                       S_SQ_CF_WORD1_COUNT((cf->ndw / 4) - 1)|
+                       S_SQ_CF_WORD1_END_OF_PROGRAM(cf->end_of_program);
 }
 
 /* common for r600/r700 - eg in eg_asm.c */
@@ -1969,6 +1972,15 @@ static int print_src(struct r600_bytecode_alu *alu, unsigned idx)
                        o += fprintf(stderr, "LDS_OQ_B_POP");
                        need_chan = 1;
                        break;
+               case EG_V_SQ_ALU_SRC_SE_ID:
+                       o += fprintf(stderr, "SE_ID");
+                       break;
+               case EG_V_SQ_ALU_SRC_SIMD_ID:
+                       o += fprintf(stderr, "SIMD_ID");
+                       break;
+               case EG_V_SQ_ALU_SRC_HW_WAVE_ID:
+                       o += fprintf(stderr, "HW_WAVE_ID");
+                       break;
                case V_SQ_ALU_SRC_PS:
                        o += fprintf(stderr, "PS");
                        break;
@@ -2088,6 +2100,8 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
                                                bc->bytecode[id + 1], cfop->name);
                                fprintf(stderr, "%d @%d ", cf->ndw / 4, cf->addr);
                                fprintf(stderr, "\n");
+                               if (cf->end_of_program)
+                                       fprintf(stderr, "EOP ");
                        } else if (cfop->flags & CF_EXP) {
                                int o = 0;
                                const char *exp_type[] = {"PIXEL", "POS  ", "PARAM"};
@@ -2116,6 +2130,8 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
                                print_indent(o, 67);
 
                                fprintf(stderr, " ES:%X ", cf->output.elem_size);
+                               if (cf->mark)
+                                       fprintf(stderr, "MARK ");
                                if (!cf->barrier)
                                        fprintf(stderr, "NO_BARRIER ");
                                if (cf->end_of_program)
@@ -2129,6 +2145,15 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
                                                bc->bytecode[id], bc->bytecode[id + 1], cfop->name);
                                o += print_indent(o, 43);
                                o += fprintf(stderr, "%s ", exp_type[cf->output.type]);
+
+                               if (r600_isa_cf(cf->op)->flags & CF_RAT) {
+                                       o += fprintf(stderr, "RAT%d", cf->rat.id);
+                                       if (cf->rat.index_mode) {
+                                               o += fprintf(stderr, "[IDX%d]", cf->rat.index_mode - 1);
+                                       }
+                                       o += fprintf(stderr, " INST: %d ", cf->rat.inst);
+                               }
+
                                if (cf->output.burst_count > 1) {
                                        o += fprintf(stderr, "%d-%d ", cf->output.array_base,
                                                        cf->output.array_base + cf->output.burst_count - 1);
@@ -2156,6 +2181,8 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
                                fprintf(stderr, " ES:%i ", cf->output.elem_size);
                                if (cf->output.array_size != 0xFFF)
                                        fprintf(stderr, "AS:%i ", cf->output.array_size);
+                               if (cf->mark)
+                                       fprintf(stderr, "MARK ");
                                if (!cf->barrier)
                                        fprintf(stderr, "NO_BARRIER ");
                                if (cf->end_of_program)