revert 7b9798f84298de47066d429fd452ddfec1492fe6
All checks were successful
eden-license / license-header (pull_request) Successful in 17s
All checks were successful
eden-license / license-header (pull_request) Successful in 17s
revert Revert "[shader_recompiler/Maxwell] Unstub ISBERD completely (#160)"
This reverts commit 3f12ae1e6e
.
Found that this was not the cause of the performance issue on this PR. Reverting so it can be tested once fix for the slowdown can be merged and this PR rebased.
This commit is contained in:
parent
a2f410f9da
commit
f14db9b220
1 changed files with 47 additions and 4 deletions
|
@ -1,3 +1,6 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
@ -37,16 +40,56 @@ void TranslatorVisitor::ISBERD(u64 insn) {
|
|||
} const isberd{insn};
|
||||
|
||||
if (isberd.skew != 0) {
|
||||
throw NotImplementedException("SKEW");
|
||||
IR::U32 current_lane_id{ir.LaneId()};
|
||||
IR::U32 result{ir.IAdd(X(isberd.src_reg), current_lane_id)};
|
||||
X(isberd.dest_reg, result);
|
||||
}
|
||||
if (isberd.o != 0) {
|
||||
throw NotImplementedException("O");
|
||||
IR::U32 address{};
|
||||
IR::F32 result{};
|
||||
if (isberd.src_reg_num == 0xFF) {
|
||||
address = ir.Imm32(isberd.imm);
|
||||
result = ir.GetAttributeIndexed(address);
|
||||
} else {
|
||||
IR::U32 offset = ir.Imm32(isberd.imm);
|
||||
address = ir.IAdd(X(isberd.src_reg), offset);
|
||||
result = ir.GetAttributeIndexed(address);
|
||||
}
|
||||
X(isberd.dest_reg, ir.BitCast<IR::U32>(result));
|
||||
}
|
||||
if (isberd.mode != Mode::Default) {
|
||||
throw NotImplementedException("Mode {}", isberd.mode.Value());
|
||||
IR::F32 result{};
|
||||
IR::U32 index{};
|
||||
if (isberd.src_reg_num == 0xFF) {
|
||||
index = ir.Imm32(isberd.imm);
|
||||
} else {
|
||||
index = ir.IAdd(X(isberd.src_reg), ir.Imm32(isberd.imm));
|
||||
}
|
||||
|
||||
switch (static_cast<u64>(isberd.mode.Value())) {
|
||||
case static_cast<u64>(Mode::Patch):
|
||||
result = ir.GetPatch(index.Patch());
|
||||
break;
|
||||
case static_cast<u64>(Mode::Prim):
|
||||
result = ir.GetAttribute(index.Attribute());
|
||||
break;
|
||||
case static_cast<u64>(Mode::Attr):
|
||||
result = ir.GetAttributeIndexed(index);
|
||||
break;
|
||||
}
|
||||
X(isberd.dest_reg, ir.BitCast<IR::U32>(result));
|
||||
}
|
||||
if (isberd.shift != Shift::Default) {
|
||||
throw NotImplementedException("Shift {}", isberd.shift.Value());
|
||||
IR::U32 result{};
|
||||
switch (static_cast<u64>(isberd.shift.Value())) {
|
||||
case static_cast<u64>(Shift::U16):
|
||||
result = ir.ShiftLeftLogical(result, static_cast<IR::U32>(ir.Imm16(1)));
|
||||
break;
|
||||
case static_cast<u64>(Shift::B32):
|
||||
result = ir.ShiftLeftLogical(result, ir.Imm32(1));
|
||||
break;
|
||||
}
|
||||
X(isberd.dest_reg, result);
|
||||
}
|
||||
//LOG_DEBUG(Shader, "(STUBBED) called {}", insn);
|
||||
if (isberd.src_reg_num == 0xFF) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue