ソースを参照

i965: When emitting a src/dst read of an output, keep the swizzle and neg

Fixes i965 piglit vs-varying-array-mat[234]-row-rd.

Reviewed-by: Eric Anholt <eric@anholt.net>
tags/mesa-8.0-rc1
Ian Romanick 14年前
コミット
1d3f09f159
1個のファイルの変更16行の追加3行の削除
  1. 16
    3
      src/mesa/drivers/dri/i965/brw_vs_emit.c

+ 16
- 3
src/mesa/drivers/dri/i965/brw_vs_emit.c ファイルの表示

@@ -1980,9 +1980,22 @@ void brw_vs_emit(struct brw_vs_compile *c )
const struct prog_src_register *src = &inst->SrcReg[i];
index = src->Index;
file = src->File;
if (file == PROGRAM_OUTPUT && c->output_regs[index].used_in_src)
args[i] = c->output_regs[index].reg;
else
if (file == PROGRAM_OUTPUT && c->output_regs[index].used_in_src) {
/* Can't just make get_arg "do the right thing" here because
* other callers of get_arg and get_src_reg don't expect any
* special behavior for the c->output_regs[index].used_in_src
* case.
*/
args[i] = c->output_regs[index].reg;
args[i].dw1.bits.swizzle =
BRW_SWIZZLE4(GET_SWZ(src->Swizzle, 0),
GET_SWZ(src->Swizzle, 1),
GET_SWZ(src->Swizzle, 2),
GET_SWZ(src->Swizzle, 3));

/* Note this is ok for non-swizzle ARB_vp instructions */
args[i].negate = src->Negate ? 1 : 0;
} else
args[i] = get_arg(c, inst, i);
}


読み込み中…
キャンセル
保存