mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-21 16:30:29 +01:00
i965: separate emit_op() and emit_tex_op() functions
(cherry picked from commit a79186e29e)
This commit is contained in:
parent
3217ea8a1d
commit
775d8431e9
1 changed files with 63 additions and 49 deletions
|
|
@ -180,7 +180,7 @@ static struct prog_instruction *emit_insn(struct brw_wm_compile *c,
|
|||
return inst;
|
||||
}
|
||||
|
||||
static struct prog_instruction * emit_op(struct brw_wm_compile *c,
|
||||
static struct prog_instruction * emit_tex_op(struct brw_wm_compile *c,
|
||||
GLuint op,
|
||||
struct prog_dst_register dest,
|
||||
GLuint saturate,
|
||||
|
|
@ -206,6 +206,20 @@ static struct prog_instruction * emit_op(struct brw_wm_compile *c,
|
|||
}
|
||||
|
||||
|
||||
static struct prog_instruction * emit_op(struct brw_wm_compile *c,
|
||||
GLuint op,
|
||||
struct prog_dst_register dest,
|
||||
GLuint saturate,
|
||||
struct prog_src_register src0,
|
||||
struct prog_src_register src1,
|
||||
struct prog_src_register src2 )
|
||||
{
|
||||
return emit_tex_op(c, op, dest, saturate,
|
||||
0, 0, /* tex unit, target */
|
||||
src0, src1, src2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
|
@ -227,7 +241,7 @@ static struct prog_src_register get_pixel_xy( struct brw_wm_compile *c )
|
|||
emit_op(c,
|
||||
WM_PIXELXY,
|
||||
dst_mask(pixel_xy, WRITEMASK_XY),
|
||||
0, 0, 0,
|
||||
0,
|
||||
payload_r0_depth,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -250,7 +264,7 @@ static struct prog_src_register get_delta_xy( struct brw_wm_compile *c )
|
|||
emit_op(c,
|
||||
WM_DELTAXY,
|
||||
dst_mask(delta_xy, WRITEMASK_XY),
|
||||
0, 0, 0,
|
||||
0,
|
||||
pixel_xy,
|
||||
payload_r0_depth,
|
||||
src_undef());
|
||||
|
|
@ -274,7 +288,7 @@ static struct prog_src_register get_pixel_w( struct brw_wm_compile *c )
|
|||
emit_op(c,
|
||||
WM_PIXELW,
|
||||
dst_mask(pixel_w, WRITEMASK_W),
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp_wpos,
|
||||
deltas,
|
||||
src_undef());
|
||||
|
|
@ -309,7 +323,7 @@ static void emit_interp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
WM_WPOSXY,
|
||||
dst_mask(dst, WRITEMASK_XY),
|
||||
0, 0, 0,
|
||||
0,
|
||||
get_pixel_xy(c),
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -321,7 +335,7 @@ static void emit_interp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
WM_LINTERP,
|
||||
dst,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
deltas,
|
||||
arg2);
|
||||
|
|
@ -332,7 +346,7 @@ static void emit_interp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
WM_CINTERP,
|
||||
dst,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -341,7 +355,7 @@ static void emit_interp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
WM_LINTERP,
|
||||
dst,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
deltas,
|
||||
src_undef());
|
||||
|
|
@ -351,7 +365,7 @@ static void emit_interp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
WM_PINTERP,
|
||||
dst,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
deltas,
|
||||
get_pixel_w(c));
|
||||
|
|
@ -371,7 +385,7 @@ static void emit_ddx( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_DDX,
|
||||
inst->DstReg,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
get_pixel_w(c),
|
||||
src_undef());
|
||||
|
|
@ -387,7 +401,7 @@ static void emit_ddy( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_DDY,
|
||||
inst->DstReg,
|
||||
0, 0, 0,
|
||||
0,
|
||||
interp,
|
||||
get_pixel_w(c),
|
||||
src_undef());
|
||||
|
|
@ -482,7 +496,7 @@ static void precalc_dst( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MUL,
|
||||
dst_mask(dst, WRITEMASK_Y),
|
||||
inst->SaturateMode, 0, 0,
|
||||
inst->SaturateMode,
|
||||
src0,
|
||||
src1,
|
||||
src_undef());
|
||||
|
|
@ -498,7 +512,7 @@ static void precalc_dst( struct brw_wm_compile *c,
|
|||
swz = emit_op(c,
|
||||
OPCODE_SWZ,
|
||||
dst_mask(dst, WRITEMASK_XZ),
|
||||
inst->SaturateMode, 0, 0,
|
||||
inst->SaturateMode,
|
||||
src_swizzle(src0, SWIZZLE_ONE, z, z, z),
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -511,7 +525,7 @@ static void precalc_dst( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MOV,
|
||||
dst_mask(dst, WRITEMASK_W),
|
||||
inst->SaturateMode, 0, 0,
|
||||
inst->SaturateMode,
|
||||
src1,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -533,7 +547,7 @@ static void precalc_lit( struct brw_wm_compile *c,
|
|||
swz = emit_op(c,
|
||||
OPCODE_SWZ,
|
||||
dst_mask(dst, WRITEMASK_XW),
|
||||
0, 0, 0,
|
||||
0,
|
||||
src_swizzle1(src0, SWIZZLE_ONE),
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -546,7 +560,7 @@ static void precalc_lit( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_LIT,
|
||||
dst_mask(dst, WRITEMASK_YZ),
|
||||
inst->SaturateMode, 0, 0,
|
||||
inst->SaturateMode,
|
||||
src0,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -582,7 +596,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
/* tmpcoord = src0 (i.e.: coord = src0) */
|
||||
out = emit_op(c, OPCODE_MOV,
|
||||
tmpcoord,
|
||||
0, 0, 0,
|
||||
0,
|
||||
src0,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -592,7 +606,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
/* tmp0 = MAX(coord.X, coord.Y) */
|
||||
emit_op(c, OPCODE_MAX,
|
||||
tmp0,
|
||||
0, 0, 0,
|
||||
0,
|
||||
src_swizzle1(coord, X),
|
||||
src_swizzle1(coord, Y),
|
||||
src_undef());
|
||||
|
|
@ -600,7 +614,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
/* tmp1 = MAX(tmp0, coord.Z) */
|
||||
emit_op(c, OPCODE_MAX,
|
||||
tmp1,
|
||||
0, 0, 0,
|
||||
0,
|
||||
tmp0src,
|
||||
src_swizzle1(coord, Z),
|
||||
src_undef());
|
||||
|
|
@ -608,7 +622,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
/* tmp0 = 1 / tmp1 */
|
||||
emit_op(c, OPCODE_RCP,
|
||||
tmp0,
|
||||
0, 0, 0,
|
||||
0,
|
||||
tmp1src,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -616,7 +630,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
/* tmpCoord = src0 * tmp0 */
|
||||
emit_op(c, OPCODE_MUL,
|
||||
tmpcoord,
|
||||
0, 0, 0,
|
||||
0,
|
||||
src0,
|
||||
tmp0src,
|
||||
src_undef());
|
||||
|
|
@ -639,7 +653,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MUL,
|
||||
tmpcoord,
|
||||
0, 0, 0,
|
||||
0,
|
||||
inst->SrcReg[0],
|
||||
scale,
|
||||
src_undef());
|
||||
|
|
@ -679,22 +693,22 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
|
||||
/* tmp = TEX ...
|
||||
*/
|
||||
emit_op(c,
|
||||
OPCODE_TEX,
|
||||
tmp,
|
||||
inst->SaturateMode,
|
||||
unit,
|
||||
inst->TexSrcTarget,
|
||||
coord,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
emit_tex_op(c,
|
||||
OPCODE_TEX,
|
||||
tmp,
|
||||
inst->SaturateMode,
|
||||
unit,
|
||||
inst->TexSrcTarget,
|
||||
coord,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
||||
/* tmp.xyz = ADD TMP, C0
|
||||
*/
|
||||
emit_op(c,
|
||||
OPCODE_ADD,
|
||||
dst_mask(tmp, WRITEMASK_XYZ),
|
||||
0, 0, 0,
|
||||
0,
|
||||
tmpsrc,
|
||||
C0,
|
||||
src_undef());
|
||||
|
|
@ -705,7 +719,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MUL,
|
||||
dst_mask(tmp, WRITEMASK_Y),
|
||||
0, 0, 0,
|
||||
0,
|
||||
tmpsrc,
|
||||
src_swizzle1(C0, W),
|
||||
src_undef());
|
||||
|
|
@ -720,7 +734,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MAD,
|
||||
dst_mask(dst, WRITEMASK_XYZ),
|
||||
0, 0, 0,
|
||||
0,
|
||||
swap_uv?src_swizzle(tmpsrc, Z,Z,X,X):src_swizzle(tmpsrc, X,X,Z,Z),
|
||||
C1,
|
||||
src_swizzle1(tmpsrc, Y));
|
||||
|
|
@ -730,7 +744,7 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MAD,
|
||||
dst_mask(dst, WRITEMASK_Y),
|
||||
0, 0, 0,
|
||||
0,
|
||||
src_swizzle1(tmpsrc, Z),
|
||||
src_swizzle1(C1, W),
|
||||
src_swizzle1(src_reg_from_dst(dst), Y));
|
||||
|
|
@ -739,15 +753,15 @@ static void precalc_tex( struct brw_wm_compile *c,
|
|||
}
|
||||
else {
|
||||
/* ordinary RGBA tex instruction */
|
||||
emit_op(c,
|
||||
OPCODE_TEX,
|
||||
inst->DstReg,
|
||||
inst->SaturateMode,
|
||||
unit,
|
||||
inst->TexSrcTarget,
|
||||
coord,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
emit_tex_op(c,
|
||||
OPCODE_TEX,
|
||||
inst->DstReg,
|
||||
inst->SaturateMode,
|
||||
unit,
|
||||
inst->TexSrcTarget,
|
||||
coord,
|
||||
src_undef(),
|
||||
src_undef());
|
||||
}
|
||||
|
||||
if ((inst->TexSrcTarget == TEXTURE_RECT_INDEX) ||
|
||||
|
|
@ -793,7 +807,7 @@ static void precalc_txp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_RCP,
|
||||
dst_mask(tmp, WRITEMASK_W),
|
||||
0, 0, 0,
|
||||
0,
|
||||
src_swizzle1(src0, GET_SWZ(src0.Swizzle, W)),
|
||||
src_undef(),
|
||||
src_undef());
|
||||
|
|
@ -803,7 +817,7 @@ static void precalc_txp( struct brw_wm_compile *c,
|
|||
emit_op(c,
|
||||
OPCODE_MUL,
|
||||
dst_mask(tmp, WRITEMASK_XYZ),
|
||||
0, 0, 0,
|
||||
0,
|
||||
src0,
|
||||
src_swizzle1(src_reg_from_dst(tmp), W),
|
||||
src_undef());
|
||||
|
|
@ -843,13 +857,13 @@ static void emit_fb_write( struct brw_wm_compile *c )
|
|||
for (i = 0 ; i < brw->state.nr_draw_regions; i++) {
|
||||
outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_DATA0 + i);
|
||||
last_inst = inst = emit_op(c,
|
||||
WM_FB_WRITE, dst_mask(dst_undef(),0), 0, 0, 0,
|
||||
WM_FB_WRITE, dst_mask(dst_undef(),0), 0,
|
||||
outcolor, payload_r0_depth, outdepth);
|
||||
inst->Sampler = (i<<1);
|
||||
if (c->fp_fragcolor_emitted) {
|
||||
outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR);
|
||||
last_inst = inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0),
|
||||
0, 0, 0, outcolor, payload_r0_depth, outdepth);
|
||||
0, outcolor, payload_r0_depth, outdepth);
|
||||
inst->Sampler = (i<<1);
|
||||
}
|
||||
}
|
||||
|
|
@ -863,7 +877,7 @@ static void emit_fb_write( struct brw_wm_compile *c )
|
|||
outcolor = src_reg(PROGRAM_OUTPUT, FRAG_RESULT_COLR);
|
||||
|
||||
inst = emit_op(c, WM_FB_WRITE, dst_mask(dst_undef(),0),
|
||||
0, 0, 0, outcolor, payload_r0_depth, outdepth);
|
||||
0, outcolor, payload_r0_depth, outdepth);
|
||||
inst->Sampler = 1|(0<<1);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue