mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 11:00:11 +01:00
i965: add a new virtual opcode: SHADER_OPCODE_TXF_MS
This is very similar to the TXF opcode, but lowers to `ld2dms` rather
than `ld` on Gen7.
V4: - add SHADER_OPCODE_TXF_MS to is_tex() functions, so regalloc thinks
it actually writes the correct number of registers. Otherwise in
nontrivial shaders some of the registers tend to get clobbered,
producing bad results.
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
parent
555dc6d74d
commit
f52ce6a0ca
5 changed files with 18 additions and 0 deletions
|
|
@ -709,6 +709,7 @@ enum opcode {
|
|||
SHADER_OPCODE_TXL,
|
||||
SHADER_OPCODE_TXS,
|
||||
FS_OPCODE_TXB,
|
||||
SHADER_OPCODE_TXF_MS,
|
||||
|
||||
SHADER_OPCODE_SHADER_TIME_ADD,
|
||||
|
||||
|
|
|
|||
|
|
@ -336,6 +336,7 @@ fs_inst::is_tex()
|
|||
opcode == FS_OPCODE_TXB ||
|
||||
opcode == SHADER_OPCODE_TXD ||
|
||||
opcode == SHADER_OPCODE_TXF ||
|
||||
opcode == SHADER_OPCODE_TXF_MS ||
|
||||
opcode == SHADER_OPCODE_TXL ||
|
||||
opcode == SHADER_OPCODE_TXS);
|
||||
}
|
||||
|
|
@ -740,6 +741,7 @@ fs_visitor::implied_mrf_writes(fs_inst *inst)
|
|||
case FS_OPCODE_TXB:
|
||||
case SHADER_OPCODE_TXD:
|
||||
case SHADER_OPCODE_TXF:
|
||||
case SHADER_OPCODE_TXF_MS:
|
||||
case SHADER_OPCODE_TXL:
|
||||
case SHADER_OPCODE_TXS:
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -398,6 +398,12 @@ fs_generator::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src
|
|||
case SHADER_OPCODE_TXF:
|
||||
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LD;
|
||||
break;
|
||||
case SHADER_OPCODE_TXF_MS:
|
||||
if (intel->gen >= 7)
|
||||
msg_type = GEN7_SAMPLER_MESSAGE_SAMPLE_LD2DMS;
|
||||
else
|
||||
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LD;
|
||||
break;
|
||||
default:
|
||||
assert(!"not reached");
|
||||
break;
|
||||
|
|
@ -1236,6 +1242,7 @@ fs_generator::generate_code(exec_list *instructions)
|
|||
case FS_OPCODE_TXB:
|
||||
case SHADER_OPCODE_TXD:
|
||||
case SHADER_OPCODE_TXF:
|
||||
case SHADER_OPCODE_TXF_MS:
|
||||
case SHADER_OPCODE_TXL:
|
||||
case SHADER_OPCODE_TXS:
|
||||
generate_tex(inst, dst, src[0]);
|
||||
|
|
|
|||
|
|
@ -146,6 +146,7 @@ vec4_instruction::is_tex()
|
|||
return (opcode == SHADER_OPCODE_TEX ||
|
||||
opcode == SHADER_OPCODE_TXD ||
|
||||
opcode == SHADER_OPCODE_TXF ||
|
||||
opcode == SHADER_OPCODE_TXF_MS ||
|
||||
opcode == SHADER_OPCODE_TXL ||
|
||||
opcode == SHADER_OPCODE_TXS);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -289,6 +289,12 @@ vec4_generator::generate_tex(vec4_instruction *inst,
|
|||
case SHADER_OPCODE_TXF:
|
||||
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LD;
|
||||
break;
|
||||
case SHADER_OPCODE_TXF_MS:
|
||||
if (intel->gen >= 7)
|
||||
msg_type = GEN7_SAMPLER_MESSAGE_SAMPLE_LD2DMS;
|
||||
else
|
||||
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LD;
|
||||
break;
|
||||
case SHADER_OPCODE_TXS:
|
||||
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_RESINFO;
|
||||
break;
|
||||
|
|
@ -645,6 +651,7 @@ vec4_generator::generate_vs_instruction(vec4_instruction *instruction,
|
|||
case SHADER_OPCODE_TEX:
|
||||
case SHADER_OPCODE_TXD:
|
||||
case SHADER_OPCODE_TXF:
|
||||
case SHADER_OPCODE_TXF_MS:
|
||||
case SHADER_OPCODE_TXL:
|
||||
case SHADER_OPCODE_TXS:
|
||||
generate_tex(inst, dst, src[0]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue