i965/fs: add PACK opcode

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Connor Abbott 2016-05-05 11:40:41 +02:00 committed by Samuel Iglesias Gonsálvez
parent cc3bae5cd7
commit ba582e58cd
5 changed files with 15 additions and 1 deletions

View File

@ -1013,6 +1013,15 @@ enum opcode {
*/
SHADER_OPCODE_LOAD_PAYLOAD,
/**
* Packs a number of sources into a single value. Unlike LOAD_PAYLOAD, this
* acts intra-channel, obtaining the final value for each channel by
* combining the sources values for the same channel, the first source
* occupying the lowest bits and the last source occupying the highest
* bits.
*/
FS_OPCODE_PACK,
SHADER_OPCODE_SHADER_TIME_ADD,
/**

View File

@ -4523,7 +4523,8 @@ get_lowered_simd_width(const struct brw_device_info *devinfo,
case SHADER_OPCODE_INT_QUOTIENT:
case SHADER_OPCODE_INT_REMAINDER:
case SHADER_OPCODE_SIN:
case SHADER_OPCODE_COS: {
case SHADER_OPCODE_COS:
case FS_OPCODE_PACK: {
/* According to the PRMs:
* "A. In Direct Addressing mode, a source cannot span more than 2
* adjacent GRF registers.

View File

@ -550,6 +550,7 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
switch (inst->opcode) {
case BRW_OPCODE_MOV:
case SHADER_OPCODE_LOAD_PAYLOAD:
case FS_OPCODE_PACK:
inst->src[i] = val;
progress = true;
break;

View File

@ -81,6 +81,7 @@ is_expression(const fs_visitor *v, const fs_inst *const inst)
case SHADER_OPCODE_EXTRACT_BYTE:
case SHADER_OPCODE_EXTRACT_WORD:
case SHADER_OPCODE_MOV_INDIRECT:
case FS_OPCODE_PACK:
return true;
case SHADER_OPCODE_RCP:
case SHADER_OPCODE_RSQ:

View File

@ -289,6 +289,8 @@ brw_instruction_name(const struct brw_device_info *devinfo, enum opcode op)
case SHADER_OPCODE_LOAD_PAYLOAD:
return "load_payload";
case FS_OPCODE_PACK:
return "pack";
case SHADER_OPCODE_GEN4_SCRATCH_READ:
return "gen4_scratch_read";