[Mesa-dev] [PATCH 1/5] st/mesa: stop using TGSI_OPCODE_CLAMP
Marek Olšák
maraeo at gmail.com
Thu Feb 16 22:00:40 UTC 2017
From: Marek Olšák <marek.olsak at amd.com>
---
src/mesa/state_tracker/st_atifs_to_tgsi.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/src/mesa/state_tracker/st_atifs_to_tgsi.c b/src/mesa/state_tracker/st_atifs_to_tgsi.c
index 9c4218e..64879f1 100644
--- a/src/mesa/state_tracker/st_atifs_to_tgsi.c
+++ b/src/mesa/state_tracker/st_atifs_to_tgsi.c
@@ -612,21 +612,20 @@ st_init_atifs_prog(struct gl_context *ctx, struct gl_program *prog)
prog->arb.NumParameters = MAX_NUM_FRAGMENT_CONSTANTS_ATI + 2; /* 2 state variables for fog */
}
struct tgsi_atifs_transform {
struct tgsi_transform_context base;
struct tgsi_shader_info info;
const struct st_fp_variant_key *key;
bool first_instruction_emitted;
unsigned fog_factor_temp;
- unsigned fog_clamp_imm;
};
static inline struct tgsi_atifs_transform *
tgsi_atifs_transform(struct tgsi_transform_context *tctx)
{
return (struct tgsi_atifs_transform *)tctx;
}
/* copied from st_cb_drawpixels_shader.c */
static void
@@ -669,24 +668,20 @@ transform_instr(struct tgsi_transform_context *tctx,
if (ctx->first_instruction_emitted)
goto transform_inst;
ctx->first_instruction_emitted = true;
if (ctx->key->fog) {
/* add a new temp for the fog factor */
ctx->fog_factor_temp = ctx->info.file_max[TGSI_FILE_TEMPORARY] + 1;
tgsi_transform_temp_decl(tctx, ctx->fog_factor_temp);
-
- /* add immediates for clamp */
- ctx->fog_clamp_imm = ctx->info.immediate_count;
- tgsi_transform_immediate_decl(tctx, 1.0f, 0.0f, 0.0f, 0.0f);
}
transform_inst:
if (current_inst->Instruction.Opcode == TGSI_OPCODE_TEX) {
/* fix texture target */
unsigned newtarget = ctx->key->texture_targets[current_inst->Src[1].Register.Index];
if (newtarget)
current_inst->Texture.Texture = newtarget;
} else if (ctx->key->fog && current_inst->Instruction.Opcode == TGSI_OPCODE_MOV &&
@@ -783,31 +778,30 @@ transform_inst:
inst.Instruction.Opcode = TGSI_OPCODE_EX2;
inst.Instruction.NumDstRegs = 1;
inst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
inst.Dst[0].Register.Index = ctx->fog_factor_temp;
inst.Dst[0].Register.WriteMask = TGSI_WRITEMASK_XYZW;
inst.Instruction.NumSrcRegs = 1;
SET_SRC(&inst, 0, TGSI_FILE_TEMPORARY, ctx->fog_factor_temp, X, Y, Z, W);
inst.Src[0].Register.Negate ^= 1;
tctx->emit_instruction(tctx, &inst);
}
- /* f = CLAMP(f, 0.0, 1.0) */
+ /* f = saturate(f) */
inst = tgsi_default_full_instruction();
- inst.Instruction.Opcode = TGSI_OPCODE_CLAMP;
+ inst.Instruction.Opcode = TGSI_OPCODE_MOV;
inst.Instruction.NumDstRegs = 1;
+ inst.Instruction.Saturate = 1;
inst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
inst.Dst[0].Register.Index = ctx->fog_factor_temp;
inst.Dst[0].Register.WriteMask = TGSI_WRITEMASK_XYZW;
- inst.Instruction.NumSrcRegs = 3;
+ inst.Instruction.NumSrcRegs = 1;
SET_SRC(&inst, 0, TGSI_FILE_TEMPORARY, ctx->fog_factor_temp, X, Y, Z, W);
- SET_SRC(&inst, 1, TGSI_FILE_IMMEDIATE, ctx->fog_clamp_imm, Y, Y, Y, Y); // 0.0
- SET_SRC(&inst, 2, TGSI_FILE_IMMEDIATE, ctx->fog_clamp_imm, X, X, X, X); // 1.0
tctx->emit_instruction(tctx, &inst);
/* REG0 = LRP(f, REG0, fogcolor) */
inst = tgsi_default_full_instruction();
inst.Instruction.Opcode = TGSI_OPCODE_LRP;
inst.Instruction.NumDstRegs = 1;
inst.Dst[0].Register.File = TGSI_FILE_TEMPORARY;
inst.Dst[0].Register.Index = reg0_index;
inst.Dst[0].Register.WriteMask = TGSI_WRITEMASK_XYZW;
inst.Instruction.NumSrcRegs = 3;
--
2.7.4
More information about the mesa-dev
mailing list