mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-20 18:40:39 +02:00
nvc0/ir: only merge emit/restart for identical streams
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
parent
e5cdbdecd2
commit
2f2467cb23
1 changed files with 10 additions and 3 deletions
|
|
@ -1464,14 +1464,21 @@ NVC0LoweringPass::handleEXPORT(Instruction *i)
|
|||
bool
|
||||
NVC0LoweringPass::handleOUT(Instruction *i)
|
||||
{
|
||||
if (i->op == OP_RESTART && i->prev && i->prev->op == OP_EMIT) {
|
||||
Instruction *prev = i->prev;
|
||||
ImmediateValue stream, prevStream;
|
||||
|
||||
// Only merge if the stream ids match. Also, note that the previous
|
||||
// instruction would have already been lowered, so we take arg1 from it.
|
||||
if (i->op == OP_RESTART && prev && prev->op == OP_EMIT &&
|
||||
i->src(0).getImmediate(stream) &&
|
||||
prev->src(1).getImmediate(prevStream) &&
|
||||
stream.reg.data.u32 == prevStream.reg.data.u32) {
|
||||
i->prev->subOp = NV50_IR_SUBOP_EMIT_RESTART;
|
||||
delete_Instruction(prog, i);
|
||||
} else {
|
||||
assert(gpEmitAddress);
|
||||
i->setDef(0, gpEmitAddress);
|
||||
if (i->srcExists(0))
|
||||
i->setSrc(1, i->getSrc(0));
|
||||
i->setSrc(1, i->getSrc(0));
|
||||
i->setSrc(0, gpEmitAddress);
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue