diff options
author | Jerome Glisse <jglisse@redhat.com> | 2010-05-27 22:55:18 +0200 |
---|---|---|
committer | Jerome Glisse <jglisse@redhat.com> | 2010-05-27 23:24:17 +0200 |
commit | e68b4e50536b3438a3bb8c3d12acebc6845461a8 (patch) | |
tree | c1ff582f893a4d58392cf29fd232b2a0bda0eb71 /src/gallium/drivers/r600/r600_compiler_r700.c | |
parent | aeee52691ccb3afd24591ab3df30d7f243bc3eeb (diff) |
r600g: fix driver + shader compiler backend change
Change the way we translate from c_compiler to the
asic specific representation. Should make things
simpler.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Diffstat (limited to 'src/gallium/drivers/r600/r600_compiler_r700.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_compiler_r700.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/gallium/drivers/r600/r600_compiler_r700.c b/src/gallium/drivers/r600/r600_compiler_r700.c index 2cc2951f94..809a57ae5c 100644 --- a/src/gallium/drivers/r600/r600_compiler_r700.c +++ b/src/gallium/drivers/r600/r600_compiler_r700.c @@ -37,6 +37,7 @@ static int r700_shader_cf_node_bytecode(struct r600_shader *rshader, if (rnode->nfetch) { rshader->bcode[id++] = S_SQ_CF_WORD0_ADDR(rnode->cf_addr >> 1); rshader->bcode[id++] = S_SQ_CF_WORD1_CF_INST(V_SQ_CF_WORD1_SQ_CF_INST_VTX) | + S_SQ_CF_WORD1_BARRIER(1) | S_SQ_CF_WORD1_COUNT(rnode->nfetch - 1); } else { rshader->bcode[id++] = S_SQ_CF_ALU_WORD0_ADDR(rnode->cf_addr >> 1); @@ -53,14 +54,14 @@ static int r700_shader_cf_output_bytecode(struct r600_shader *rshader, unsigned *cid, unsigned end) { - unsigned gpr, chan; + struct r600_shader_operand out; unsigned id = *cid; int r; - r = r600_shader_find_gpr(rshader, v, 0, &gpr, &chan); + r = r600_shader_find_gpr(rshader, v, 0, &out); if (r) return r; - rshader->bcode[id + 0] = S_SQ_CF_ALLOC_EXPORT_WORD0_RW_GPR(gpr) | + rshader->bcode[id + 0] = S_SQ_CF_ALLOC_EXPORT_WORD0_RW_GPR(out.sel) | S_SQ_CF_ALLOC_EXPORT_WORD0_ELEM_SIZE(3); rshader->bcode[id + 1] = S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_X(0) | S_SQ_CF_ALLOC_EXPORT_WORD1_SWIZ_SEL_Y(1) | @@ -76,7 +77,7 @@ static int r700_shader_cf_output_bytecode(struct r600_shader *rshader, break; case C_SEMANTIC_COLOR: if (rshader->cshader.type == C_PROGRAM_TYPE_VS) { - rshader->output[rshader->noutput].gpr = gpr; + rshader->output[rshader->noutput].gpr = out.sel; rshader->output[rshader->noutput].sid = v->sid; rshader->output[rshader->noutput].name = v->name; rshader->bcode[id + 0] |= S_SQ_CF_ALLOC_EXPORT_WORD0_ARRAY_BASE(rshader->noutput++) | @@ -87,7 +88,7 @@ static int r700_shader_cf_output_bytecode(struct r600_shader *rshader, } break; case C_SEMANTIC_GENERIC: - rshader->output[rshader->noutput].gpr = gpr; + rshader->output[rshader->noutput].gpr = out.sel; rshader->output[rshader->noutput].sid = v->sid; rshader->output[rshader->noutput].name = v->name; rshader->bcode[id + 0] |= S_SQ_CF_ALLOC_EXPORT_WORD0_ARRAY_BASE(rshader->noutput++) | @@ -120,7 +121,7 @@ static int r700_shader_alu_bytecode(struct r600_shader *rshader, S_SQ_ALU_WORD1_OP3_SRC2_SEL(alu->src[2].sel) | S_SQ_ALU_WORD1_OP3_SRC2_CHAN(alu->src[2].chan) | S_SQ_ALU_WORD1_OP3_SRC2_NEG(alu->src[2].neg) | - S_SQ_ALU_WORD1_OP3_ALU_INST(alu->inst) | + S_SQ_ALU_WORD1_OP3_ALU_INST(alu->opcode) | S_SQ_ALU_WORD1_BANK_SWIZZLE(0); } else { rshader->bcode[id++] = S_SQ_ALU_WORD0_SRC0_SEL(alu->src[0].sel) | @@ -135,7 +136,7 @@ static int r700_shader_alu_bytecode(struct r600_shader *rshader, S_SQ_ALU_WORD1_OP2_SRC0_ABS(alu->src[0].abs) | S_SQ_ALU_WORD1_OP2_SRC1_ABS(alu->src[1].abs) | S_SQ_ALU_WORD1_OP2_WRITE_MASK(1) | - S_SQ_ALU_WORD1_OP2_ALU_INST(alu->inst) | + S_SQ_ALU_WORD1_OP2_ALU_INST(alu->opcode) | S_SQ_ALU_WORD1_BANK_SWIZZLE(0); } *cid = id; |