tctx->emit_instruction(tctx, &inst);
/* DP3 dst.x, tmpA, imm[0] */
- inst = dp3_instruction();
- reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_X);
- reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
- reg_src(&inst.Src[1], &ctx->imm[0], SWIZ(X, Y, Z, W));
- tctx->emit_instruction(tctx, &inst);
+ if (dst->Register.WriteMask & TGSI_WRITEMASK_X) {
+ inst = dp3_instruction();
+ reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_X);
+ reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
+ reg_src(&inst.Src[1], &ctx->imm[0], SWIZ(X, Y, Z, W));
+ tctx->emit_instruction(tctx, &inst);
+ }
/* DP3 dst.y, tmpA, imm[1] */
- inst = dp3_instruction();
- reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Y);
- reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
- reg_src(&inst.Src[1], &ctx->imm[1], SWIZ(X, Y, Z, W));
- tctx->emit_instruction(tctx, &inst);
+ if (dst->Register.WriteMask & TGSI_WRITEMASK_Y) {
+ inst = dp3_instruction();
+ reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Y);
+ reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
+ reg_src(&inst.Src[1], &ctx->imm[1], SWIZ(X, Y, Z, W));
+ tctx->emit_instruction(tctx, &inst);
+ }
/* DP3 dst.z, tmpA, imm[2] */
- inst = dp3_instruction();
- reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Z);
- reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
- reg_src(&inst.Src[1], &ctx->imm[2], SWIZ(X, Y, Z, W));
- tctx->emit_instruction(tctx, &inst);
+ if (dst->Register.WriteMask & TGSI_WRITEMASK_Z) {
+ inst = dp3_instruction();
+ reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_Z);
+ reg_src(&inst.Src[0], &ctx->tmp[A].src, SWIZ(X, Y, Z, W));
+ reg_src(&inst.Src[1], &ctx->imm[2], SWIZ(X, Y, Z, W));
+ tctx->emit_instruction(tctx, &inst);
+ }
/* MOV dst.w, imm[0].x */
- inst = mov_instruction();
- reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_W);
- reg_src(&inst.Src[0], &ctx->imm[3], SWIZ(_, _, _, W));
- tctx->emit_instruction(tctx, &inst);
+ if (dst->Register.WriteMask & TGSI_WRITEMASK_W) {
+ inst = mov_instruction();
+ reg_dst(&inst.Dst[0], dst, TGSI_WRITEMASK_W);
+ reg_src(&inst.Src[0], &ctx->imm[3], SWIZ(_, _, _, W));
+ tctx->emit_instruction(tctx, &inst);
+ }
}
static void
/* TODO better job of figuring out how many extra tokens we need..
* this is a pain about tgsi_transform :-/
*/
- newlen = tgsi_num_tokens(tokens) + 120;
+ newlen = tgsi_num_tokens(tokens) + 300;
newtoks = tgsi_alloc_tokens(newlen);
if (!newtoks)
return NULL;