i965/fs: Add builder emit method taking a variable number of source registers.

And start using it in fs_builder::LOAD_PAYLOAD().  This will be used
to emit logical send message opcodes which have an unusually large
number of arguments.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Francisco Jerez 2015-07-14 19:32:03 +03:00
parent 1dd3543ac1
commit 5a5607a16c

View file

@ -306,6 +306,17 @@ namespace brw {
}
}
/**
* Create and insert an instruction with a variable number of sources
* into the program.
*/
instruction *
emit(enum opcode opcode, const dst_reg &dst, const src_reg srcs[],
unsigned n) const
{
return emit(instruction(opcode, dispatch_width(), dst, srcs, n));
}
/**
* Insert a preallocated instruction into the program.
*/
@ -518,9 +529,7 @@ namespace brw {
LOAD_PAYLOAD(const dst_reg &dst, const src_reg *src,
unsigned sources, unsigned header_size) const
{
instruction *inst = emit(instruction(SHADER_OPCODE_LOAD_PAYLOAD,
dispatch_width(), dst,
src, sources));
instruction *inst = emit(SHADER_OPCODE_LOAD_PAYLOAD, dst, src, sources);
inst->header_size = header_size;
inst->regs_written = header_size +
(sources - header_size) * (dispatch_width() / 8);