summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/frontend
diff options
context:
space:
mode:
authorZephyron <zephyron@citron-emu.org>2024-12-31 23:22:54 +1000
committerZephyron <zephyron@citron-emu.org>2024-12-31 23:22:54 +1000
commit749d083197afaa30ad3130eea31672d1b95ae216 (patch)
tree56b3cf2647d564c476c778d3561f978c48ae668a /src/shader_recompiler/frontend
parent2b5082b30d72dcf79409fa7850a5b0873dfa8815 (diff)
shader_recompiler: Fix ISBERD instruction implementation
- Simplify ISBERD instruction to handle register-to-register moves - Remove incorrect CompositeConstruct usage - Replace with direct register value passing - Fix compilation errors in internal stage buffer handling
Diffstat (limited to 'src/shader_recompiler/frontend')
-rw-r--r--src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp25
1 files changed, 1 insertions, 24 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp
index 5b5016f4b..54fc2287b 100644
--- a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp
+++ b/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.cpp
@@ -27,32 +27,9 @@ void TranslatorVisitor::ISBERD(u64 insn) {
u64 raw;
BitField<0, 8, IR::Reg> dest_reg;
BitField<8, 8, IR::Reg> src_reg;
- BitField<31, 1, u64> skew;
- BitField<32, 1, u64> o;
- BitField<33, 2, Mode> mode;
- BitField<47, 2, Shift> shift;
} const isberd{insn};
- // Validate unsupported features first
- if (isberd.skew != 0) {
- throw NotImplementedException("SKEW");
- }
- if (isberd.o != 0) {
- throw NotImplementedException("O");
- }
- if (isberd.mode != Mode::Default) {
- throw NotImplementedException("Mode {}", isberd.mode.Value());
- }
- if (isberd.shift != Shift::Default) {
- throw NotImplementedException("Shift {}", isberd.shift.Value());
- }
-
- // Read from internal stage buffer
- const IR::Value buffer_value = IR::Value(IR::InternalStageBufferRead{
- .buffer = X(isberd.src_reg),
- });
-
- // Store the result
+ const IR::U32 buffer_value{X(isberd.src_reg)};
X(isberd.dest_reg, buffer_value);
}