i965: add low-level support for send to pixel interpolator

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Chris Forbes 2013-11-17 21:47:22 +13:00
parent 0b0572a2ad
commit d732598b63
2 changed files with 38 additions and 0 deletions

View File

@ -372,6 +372,16 @@ brw_untyped_surface_read(struct brw_compile *p,
unsigned msg_length,
unsigned response_length);
void
brw_pixel_interpolator_query(struct brw_compile *p,
struct brw_reg dest,
struct brw_reg mrf,
bool noperspective,
unsigned mode,
unsigned data,
unsigned msg_length,
unsigned response_length);
/***********************************************************************
* brw_eu_util.c:
*/

View File

@ -2633,6 +2633,34 @@ brw_untyped_surface_read(struct brw_compile *p,
brw_inst_access_mode(brw, insn) == BRW_ALIGN_1);
}
void
brw_pixel_interpolator_query(struct brw_compile *p,
struct brw_reg dest,
struct brw_reg mrf,
bool noperspective,
unsigned mode,
unsigned data,
unsigned msg_length,
unsigned response_length)
{
const struct brw_context *brw = p->brw;
struct brw_inst *insn = next_insn(p, BRW_OPCODE_SEND);
brw_set_dest(p, insn, dest);
brw_set_src0(p, insn, mrf);
brw_set_message_descriptor(p, insn, GEN7_SFID_PIXEL_INTERPOLATOR,
msg_length, response_length,
false /* header is never present for PI */,
false);
brw_inst_set_pi_simd_mode(
brw, insn, brw_inst_exec_size(brw, insn) == BRW_EXECUTE_16);
brw_inst_set_pi_slot_group(brw, insn, 0); /* zero unless 32/64px dispatch */
brw_inst_set_pi_nopersp(brw, insn, noperspective);
brw_inst_set_pi_message_type(brw, insn, mode);
brw_inst_set_pi_message_data(brw, insn, data);
}
/**
* This instruction is generated as a single-channel align1 instruction by
* both the VS and FS stages when using INTEL_DEBUG=shader_time.