r600g: fix regression in cubemap tests since eea1d8199b
Although CUBE is a reduction inst, it writes to more than just PV.X so we need to keep the dst channel. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -355,6 +355,20 @@ static int is_alu_reduction_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
|
||||
}
|
||||
}
|
||||
|
||||
static int is_alu_cube_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
|
||||
{
|
||||
switch (bc->chiprev) {
|
||||
case CHIPREV_R600:
|
||||
case CHIPREV_R700:
|
||||
return !alu->is_op3 &&
|
||||
alu->inst == V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE;
|
||||
case CHIPREV_EVERGREEN:
|
||||
default:
|
||||
return !alu->is_op3 &&
|
||||
alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_CUBE;
|
||||
}
|
||||
}
|
||||
|
||||
static int is_alu_mova_inst(struct r600_bc *bc, struct r600_bc_alu *alu)
|
||||
{
|
||||
switch (bc->chiprev) {
|
||||
@@ -722,7 +736,8 @@ static int replace_gpr_with_pv_ps(struct r600_bc *bc,
|
||||
for (i = 0; i < 5; ++i) {
|
||||
if(prev[i] && prev[i]->dst.write && !prev[i]->dst.rel) {
|
||||
gpr[i] = prev[i]->dst.sel;
|
||||
if (is_alu_reduction_inst(bc, prev[i]))
|
||||
/* cube writes more than PV.X */
|
||||
if (!is_alu_cube_inst(bc, prev[i]) && is_alu_reduction_inst(bc, prev[i]))
|
||||
chan[i] = 0;
|
||||
else
|
||||
chan[i] = prev[i]->dst.chan;
|
||||
|
||||
@@ -923,7 +923,7 @@ uint32_t r600_translate_texformat(enum pipe_format format,
|
||||
desc->channel[1].size == 10 &&
|
||||
desc->channel[2].size == 10 &&
|
||||
desc->channel[3].size == 2) {
|
||||
result = FMT_10_10_10_2;
|
||||
result = FMT_2_10_10_10;
|
||||
goto out_word4;
|
||||
}
|
||||
goto out_unknown;
|
||||
|
||||
Reference in New Issue
Block a user