mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-17 15:40:20 +01:00
i965/vs: Add a function for how many MRFs get written as part of a SEND.
This will be used for compute-to-mrf, which needs to know when MRFs get overwritten.
This commit is contained in:
parent
63bc443f8a
commit
160848d8ef
2 changed files with 39 additions and 0 deletions
|
|
@ -43,6 +43,43 @@ vec4_instruction::is_math()
|
|||
opcode == SHADER_OPCODE_COS ||
|
||||
opcode == SHADER_OPCODE_POW);
|
||||
}
|
||||
/**
|
||||
* Returns how many MRFs an opcode will write over.
|
||||
*
|
||||
* Note that this is not the 0 or 1 implied writes in an actual gen
|
||||
* instruction -- the generate_* functions generate additional MOVs
|
||||
* for setup.
|
||||
*/
|
||||
int
|
||||
vec4_visitor::implied_mrf_writes(vec4_instruction *inst)
|
||||
{
|
||||
if (inst->mlen == 0)
|
||||
return 0;
|
||||
|
||||
switch (inst->opcode) {
|
||||
case SHADER_OPCODE_RCP:
|
||||
case SHADER_OPCODE_RSQ:
|
||||
case SHADER_OPCODE_SQRT:
|
||||
case SHADER_OPCODE_EXP2:
|
||||
case SHADER_OPCODE_LOG2:
|
||||
case SHADER_OPCODE_SIN:
|
||||
case SHADER_OPCODE_COS:
|
||||
return 1;
|
||||
case SHADER_OPCODE_POW:
|
||||
return 2;
|
||||
case VS_OPCODE_URB_WRITE:
|
||||
return 1;
|
||||
case VS_OPCODE_PULL_CONSTANT_LOAD:
|
||||
return 2;
|
||||
case VS_OPCODE_SCRATCH_READ:
|
||||
return 2;
|
||||
case VS_OPCODE_SCRATCH_WRITE:
|
||||
return 3;
|
||||
default:
|
||||
assert(!"not reached");
|
||||
return inst->mlen;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
src_reg::equals(src_reg *r)
|
||||
|
|
|
|||
|
|
@ -441,6 +441,8 @@ public:
|
|||
vec4_instruction *SCRATCH_READ(dst_reg dst, src_reg index);
|
||||
vec4_instruction *SCRATCH_WRITE(dst_reg dst, src_reg src, src_reg index);
|
||||
|
||||
int implied_mrf_writes(vec4_instruction *inst);
|
||||
|
||||
bool try_rewrite_rhs_to_dst(ir_assignment *ir,
|
||||
dst_reg dst,
|
||||
src_reg src,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue