summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r600/r600_compiler_r700.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-05-27 22:55:18 +0200
committerJerome Glisse <jglisse@redhat.com>2010-05-27 23:24:17 +0200
commite68b4e50536b3438a3bb8c3d12acebc6845461a8 (patch)
treec1ff582f893a4d58392cf29fd232b2a0bda0eb71 /src/gallium/drivers/r600/r600_compiler_r700.c
parentaeee52691ccb3afd24591ab3df30d7f243bc3eeb (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.c15
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;