draw: use new tgsi_transform inst/decl helpers in pstipple code
Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
parent
493ab77551
commit
9ce72ac1fa
|
@ -197,8 +197,6 @@ static void
|
|||
pstip_transform_prolog(struct tgsi_transform_context *ctx)
|
||||
{
|
||||
struct pstip_transform_context *pctx = (struct pstip_transform_context *) ctx;
|
||||
struct tgsi_full_declaration decl;
|
||||
struct tgsi_full_instruction newInst;
|
||||
uint i;
|
||||
int wincoordInput;
|
||||
|
||||
|
@ -226,47 +224,21 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
|
|||
|
||||
if (pctx->wincoordInput < 0) {
|
||||
/* declare new position input reg */
|
||||
decl = tgsi_default_full_declaration();
|
||||
decl.Declaration.File = TGSI_FILE_INPUT;
|
||||
decl.Declaration.Interpolate = 1;
|
||||
decl.Declaration.Semantic = 1;
|
||||
decl.Semantic.Name = TGSI_SEMANTIC_POSITION;
|
||||
decl.Semantic.Index = 0;
|
||||
decl.Range.First =
|
||||
decl.Range.Last = wincoordInput;
|
||||
decl.Interp.Interpolate = TGSI_INTERPOLATE_LINEAR; /* XXX? */
|
||||
ctx->emit_declaration(ctx, &decl);
|
||||
tgsi_transform_input_decl(ctx, wincoordInput,
|
||||
TGSI_SEMANTIC_POSITION, 1,
|
||||
TGSI_INTERPOLATE_LINEAR);
|
||||
}
|
||||
|
||||
/* declare new sampler */
|
||||
decl = tgsi_default_full_declaration();
|
||||
decl.Declaration.File = TGSI_FILE_SAMPLER;
|
||||
decl.Range.First =
|
||||
decl.Range.Last = pctx->freeSampler;
|
||||
ctx->emit_declaration(ctx, &decl);
|
||||
tgsi_transform_sampler_decl(ctx, pctx->freeSampler);
|
||||
|
||||
/* declare new temp regs */
|
||||
decl = tgsi_default_full_declaration();
|
||||
decl.Declaration.File = TGSI_FILE_TEMPORARY;
|
||||
decl.Range.First =
|
||||
decl.Range.Last = pctx->texTemp;
|
||||
ctx->emit_declaration(ctx, &decl);
|
||||
tgsi_transform_temp_decl(ctx, pctx->texTemp);
|
||||
|
||||
/* emit immediate = {1/32, 1/32, 1, 1}
|
||||
* The index/position of this immediate will be pctx->numImmed
|
||||
*/
|
||||
{
|
||||
static const float value[4] = { 1.0/32, 1.0/32, 1.0, 1.0 };
|
||||
struct tgsi_full_immediate immed;
|
||||
uint size = 4;
|
||||
immed = tgsi_default_full_immediate();
|
||||
immed.Immediate.NrTokens = 1 + size; /* one for the token itself */
|
||||
immed.u[0].Float = value[0];
|
||||
immed.u[1].Float = value[1];
|
||||
immed.u[2].Float = value[2];
|
||||
immed.u[3].Float = value[3];
|
||||
ctx->emit_immediate(ctx, &immed);
|
||||
}
|
||||
tgsi_transform_immediate_decl(ctx, 1.0/32.0, 1.0/32.0, 1.0, 1.0);
|
||||
|
||||
/*
|
||||
* Insert new MUL/TEX/KILL_IF instructions at start of program
|
||||
|
@ -279,42 +251,21 @@ pstip_transform_prolog(struct tgsi_transform_context *ctx)
|
|||
*/
|
||||
|
||||
/* MUL texTemp, INPUT[wincoord], 1/32; */
|
||||
newInst = tgsi_default_full_instruction();
|
||||
newInst.Instruction.Opcode = TGSI_OPCODE_MUL;
|
||||
newInst.Instruction.NumDstRegs = 1;
|
||||
newInst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
|
||||
newInst.Dst[0].Register.Index = pctx->texTemp;
|
||||
newInst.Instruction.NumSrcRegs = 2;
|
||||
newInst.Src[0].Register.File = TGSI_FILE_INPUT;
|
||||
newInst.Src[0].Register.Index = wincoordInput;
|
||||
newInst.Src[1].Register.File = TGSI_FILE_IMMEDIATE;
|
||||
newInst.Src[1].Register.Index = pctx->numImmed;
|
||||
ctx->emit_instruction(ctx, &newInst);
|
||||
tgsi_transform_op2_inst(ctx, TGSI_OPCODE_MUL,
|
||||
TGSI_FILE_TEMPORARY, pctx->texTemp,
|
||||
TGSI_WRITEMASK_XYZW,
|
||||
TGSI_FILE_INPUT, wincoordInput,
|
||||
TGSI_FILE_IMMEDIATE, pctx->numImmed);
|
||||
|
||||
/* TEX texTemp, texTemp, sampler; */
|
||||
newInst = tgsi_default_full_instruction();
|
||||
newInst.Instruction.Opcode = TGSI_OPCODE_TEX;
|
||||
newInst.Instruction.NumDstRegs = 1;
|
||||
newInst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
|
||||
newInst.Dst[0].Register.Index = pctx->texTemp;
|
||||
newInst.Instruction.NumSrcRegs = 2;
|
||||
newInst.Instruction.Texture = TRUE;
|
||||
newInst.Texture.Texture = TGSI_TEXTURE_2D;
|
||||
newInst.Src[0].Register.File = TGSI_FILE_TEMPORARY;
|
||||
newInst.Src[0].Register.Index = pctx->texTemp;
|
||||
newInst.Src[1].Register.File = TGSI_FILE_SAMPLER;
|
||||
newInst.Src[1].Register.Index = pctx->freeSampler;
|
||||
ctx->emit_instruction(ctx, &newInst);
|
||||
tgsi_transform_tex_2d_inst(ctx,
|
||||
TGSI_FILE_TEMPORARY, pctx->texTemp,
|
||||
TGSI_FILE_TEMPORARY, pctx->texTemp,
|
||||
pctx->freeSampler);
|
||||
|
||||
/* KILL_IF -texTemp; # if -texTemp < 0, KILL fragment */
|
||||
newInst = tgsi_default_full_instruction();
|
||||
newInst.Instruction.Opcode = TGSI_OPCODE_KILL_IF;
|
||||
newInst.Instruction.NumDstRegs = 0;
|
||||
newInst.Instruction.NumSrcRegs = 1;
|
||||
newInst.Src[0].Register.File = TGSI_FILE_TEMPORARY;
|
||||
newInst.Src[0].Register.Index = pctx->texTemp;
|
||||
newInst.Src[0].Register.Negate = 1;
|
||||
ctx->emit_instruction(ctx, &newInst);
|
||||
/* KILL_IF -texTemp.wwww; # if -texTemp < 0, KILL fragment */
|
||||
tgsi_transform_kill_inst(ctx,
|
||||
TGSI_FILE_TEMPORARY, pctx->texTemp, TGSI_SWIZZLE_W);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue