i965/fs: Add a helper for detecting texturing opcodes.

This commit is contained in:
Eric Anholt 2011-01-18 21:10:03 -08:00
parent a124490262
commit 3f2fe31eee
2 changed files with 12 additions and 8 deletions

View file

@ -2647,10 +2647,7 @@ fs_visitor::split_virtual_grfs()
fs_inst *inst = (fs_inst *)iter.get();
/* Texturing produces 4 contiguous registers, so no splitting. */
if ((inst->opcode == FS_OPCODE_TEX ||
inst->opcode == FS_OPCODE_TXB ||
inst->opcode == FS_OPCODE_TXL) &&
inst->dst.file == GRF) {
if (inst->is_tex()) {
split_grf[inst->dst.reg] = false;
}
}
@ -2938,7 +2935,7 @@ fs_visitor::propagate_constants()
if (scan_inst->dst.file == GRF &&
scan_inst->dst.reg == inst->dst.reg &&
(scan_inst->dst.reg_offset == inst->dst.reg_offset ||
scan_inst->opcode == FS_OPCODE_TEX)) {
scan_inst->is_tex())) {
break;
}
}
@ -3033,13 +3030,13 @@ fs_visitor::register_coalesce()
if (scan_inst->dst.file == GRF) {
if (scan_inst->dst.reg == inst->dst.reg &&
(scan_inst->dst.reg_offset == inst->dst.reg_offset ||
scan_inst->opcode == FS_OPCODE_TEX)) {
scan_inst->is_tex())) {
interfered = true;
break;
}
if (scan_inst->dst.reg == inst->src[0].reg &&
(scan_inst->dst.reg_offset == inst->src[0].reg_offset ||
scan_inst->opcode == FS_OPCODE_TEX)) {
scan_inst->is_tex())) {
interfered = true;
break;
}
@ -3120,7 +3117,7 @@ fs_visitor::compute_to_mrf()
* into a compute-to-MRF.
*/
if (scan_inst->opcode == FS_OPCODE_TEX) {
if (scan_inst->is_tex()) {
/* texturing writes several continuous regs, so we can't
* compute-to-mrf that.
*/

View file

@ -306,6 +306,13 @@ public:
offset == inst->offset);
}
bool is_tex()
{
return (opcode == FS_OPCODE_TEX ||
opcode == FS_OPCODE_TXB ||
opcode == FS_OPCODE_TXL);
}
int opcode; /* BRW_OPCODE_* or FS_OPCODE_* */
fs_reg dst;
fs_reg src[3];