OSDN Git Service

r600g: add support for streams to the assembler.
authorDave Airlie <airlied@redhat.com>
Thu, 9 Jul 2015 06:30:26 +0000 (16:30 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 2 Sep 2015 05:55:47 +0000 (15:55 +1000)
This just adds support to the assembler dumper and allows
stream instructions to be generated. Also fix up the stream
debugging to add stream info.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/eg_asm.c
src/gallium/drivers/r600/r600_asm.c
src/gallium/drivers/r600/r600_asm.h
src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/sb/sb_bc_dump.cpp

index 42e8b0b..c32d317 100644 (file)
@@ -115,6 +115,7 @@ int eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf)
                                        S_SQ_CF_WORD1_BARRIER(1) |
                                        S_SQ_CF_WORD1_COND(cf->cond) |
                                        S_SQ_CF_WORD1_POP_COUNT(cf->pop_count) |
+                                       S_SQ_CF_WORD1_COUNT(cf->count) |
                                        S_SQ_CF_WORD1_END_OF_PROGRAM(cf->end_of_program);
                }
        }
index b514c58..9b356ba 100644 (file)
@@ -2029,6 +2029,8 @@ void r600_bytecode_disasm(struct r600_bytecode *bc)
                                        fprintf(stderr, "CND:%X ", cf->cond);
                                if (cf->pop_count)
                                        fprintf(stderr, "POP:%X ", cf->pop_count);
+                               if (cf->count && (cfop->flags & CF_EMIT))
+                                       fprintf(stderr, "STREAM%d ", cf->count);
                                if (cf->end_of_program)
                                        fprintf(stderr, "EOP ");
                                fprintf(stderr, "\n");
index e37d926..b282907 100644 (file)
@@ -149,6 +149,7 @@ struct r600_bytecode_cf {
        unsigned                        id;
        unsigned                        cond;
        unsigned                        pop_count;
+       unsigned                        count;
        unsigned                        cf_addr; /* control flow addr */
        struct r600_bytecode_kcache             kcache[4];
        unsigned                        r6xx_uses_waterfall;
index 1ab389c..153f9a2 100644 (file)
@@ -93,8 +93,10 @@ static void r600_dump_streamout(struct pipe_stream_output_info *so)
        for (i = 0; i < so->num_outputs; i++) {
                unsigned mask = ((1 << so->output[i].num_components) - 1) <<
                                so->output[i].start_component;
-               fprintf(stderr, "  %i: MEM_STREAM0_BUF%i[%i..%i] <- OUT[%i].%s%s%s%s%s\n",
-                       i, so->output[i].output_buffer,
+               fprintf(stderr, "  %i: MEM_STREAM%d_BUF%i[%i..%i] <- OUT[%i].%s%s%s%s%s\n",
+                       i,
+                       so->output[i].stream,
+                       so->output[i].output_buffer,
                        so->output[i].dst_offset, so->output[i].dst_offset + so->output[i].num_components - 1,
                        so->output[i].register_index,
                        mask & 1 ? "x" : "",
index e6a6c16..0fc73c4 100644 (file)
@@ -182,6 +182,9 @@ void bc_dump::dump(cf_node& n) {
 
                if (n.bc.pop_count)
                        s << " POP:" << n.bc.pop_count;
+
+               if (n.bc.count && (n.bc.op_ptr->flags & CF_EMIT))
+                       s << " STREAM" << n.bc.count;
        }
 
        if (!n.bc.barrier)