r600g: Add ar_chan member to struct r600_bytecode
authorTom Stellard <thomas.stellard@amd.com>
Tue, 22 Jan 2013 20:22:11 +0000 (21:22 +0100)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 28 Jan 2013 18:30:38 +0000 (18:30 +0000)
r600_bytecode::ar_chan stores the register channel for the value that
will be loaded into the AR register.

At the moment, this field is only used by the LLVM backend.  The default
backend always sets ar_chan = 0.

src/gallium/drivers/r600/r600_asm.c
src/gallium/drivers/r600/r600_asm.h
src/gallium/drivers/r600/r600_shader.c

index 123a9f88e766d1cda14b860ba9055edba488ba89..1a501f62cbaca656511aa5b739f96108e4339ce5 100644 (file)
@@ -1421,6 +1421,7 @@ static int load_ar_r6xx(struct r600_bytecode *bc)
        memset(&alu, 0, sizeof(alu));
        alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_GPR_INT;
        alu.src[0].sel = bc->ar_reg;
+       alu.src[0].chan = bc->ar_chan;
        alu.last = 1;
        alu.index_mode = INDEX_MODE_LOOP;
        r = r600_bytecode_add_alu(bc, &alu);
@@ -1451,6 +1452,7 @@ static int load_ar(struct r600_bytecode *bc)
        memset(&alu, 0, sizeof(alu));
        alu.inst = BC_INST(bc, V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_INT);
        alu.src[0].sel = bc->ar_reg;
+       alu.src[0].chan = bc->ar_chan;
        alu.last = 1;
        r = r600_bytecode_add_alu(bc, &alu);
        if (r)
index 182f403aa773ec7bb323540d5f596f1790e84d58..0b33c380098410d9c3807d3175ae74513a142a4e 100644 (file)
@@ -213,6 +213,7 @@ struct r600_bytecode {
        struct r600_cf_callstack        callstack[SQ_MAX_CALL_DEPTH];
        unsigned        ar_loaded;
        unsigned        ar_reg;
+       unsigned        ar_chan;
        unsigned        ar_handling;
        unsigned        r6xx_nop_after_rel_dst;
 };
index 727fac959cd8a23a46c4911c6b12fdb85cec309f..c16e467c853bbcb489aec1ca5b94f230c87ea359 100644 (file)
@@ -377,6 +377,7 @@ static unsigned r600_alu_from_byte_stream(struct r600_shader_ctx *ctx,
 
        if (alu.inst == CTX_INST(V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOVA_INT)) {
                ctx->bc->ar_reg = alu.src[0].sel;
+               ctx->bc->ar_chan = alu.src[0].chan;
                ctx->bc->ar_loaded = 0;
                return bytes_read;
        }