i965: separate emit_op() and emit_tex_op() functions

(cherry picked from commit a79186e29e)
This commit is contained in:
Brian Paul 2009-02-20 12:23:25 -07:00 committed by Ian Romanick
parent 3217ea8a1d
commit 775d8431e9

View file

@ -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);
}
}