diff options
author | Rob Clark <[email protected]> | 2015-04-09 12:55:49 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2015-04-11 11:40:28 -0400 |
commit | 6e8160d6e3ea7b000de112538dcbb0e29a6c3838 (patch) | |
tree | f9f8b2e9d4d22c66badd9371ae0daa503d7ae711 /src/gallium/drivers/freedreno/ir3/ir3.h | |
parent | d5357c16cc0ccd84c3475778fcc08a025b8c24f7 (diff) |
freedreno/ir3/nir: simplify emit_tex()
Just build up arrays for src0/src1, and use create_collect()..
Also add back missing .3d flag for 3d/cube textures.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3/ir3.h')
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index 1a8beade25b..85daf106535 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -908,6 +908,34 @@ INSTR1(4, SQRT) INSTR1(5, DSX) INSTR1(5, DSY) +static inline struct ir3_instruction * +ir3_SAM(struct ir3_block *block, opc_t opc, type_t type, + unsigned wrmask, unsigned flags, unsigned samp, unsigned tex, + struct ir3_instruction *src0, struct ir3_instruction *src1) +{ + struct ir3_instruction *sam; + struct ir3_register *reg; + + sam = ir3_instr_create(block, 5, opc); + sam->flags |= flags; + ir3_reg_create(sam, 0, 0)->wrmask = wrmask; + if (src0) { + reg = ir3_reg_create(sam, 0, IR3_REG_SSA); + reg->wrmask = (1 << (src0->regs_count - 1)) - 1; + reg->instr = src0; + } + if (src1) { + reg = ir3_reg_create(sam, 0, IR3_REG_SSA); + reg->instr = src1; + reg->wrmask = (1 << (src1->regs_count - 1)) - 1; + } + sam->cat5.samp = samp; + sam->cat5.tex = tex; + sam->cat5.type = type; + + return sam; +} + /* cat6 instructions: */ INSTR2(6, LDLV) |