From 6643c7a68b3dcf37f1833aca78563f8b4c6ee016 Mon Sep 17 00:00:00 2001 From: SDK Chan Date: Wed, 6 Aug 2025 19:04:41 +0000 Subject: [PATCH] [shader_recompiler] ISBERD minor cleanups --- src/shader_recompiler/CMakeLists.txt | 2 +- .../frontend/maxwell/translate/impl/impl.cpp | 14 ++++---- .../frontend/maxwell/translate/impl/impl.h | 30 ++++++++++++++-- .../impl/internal_stage_buffer_entry_read.cpp | 15 ++++---- .../impl/internal_stage_buffer_entry_read.h | 34 ------------------- 5 files changed, 42 insertions(+), 53 deletions(-) delete mode 100644 src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index 626c1c7a8b..5d896db93d 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt @@ -243,7 +243,7 @@ add_library(shader_recompiler STATIC runtime_info.h shader_info.h varying_state.h - frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h + ) target_link_libraries(shader_recompiler PUBLIC common fmt::fmt sirit SPIRV-Tools-opt SPIRV-Tools SPIRV-Tools-link) diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/impl.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/impl.cpp index 49e722e0fa..157e5dfaaf 100644 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/impl.cpp +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/impl.cpp @@ -271,21 +271,21 @@ void TranslatorVisitor::ResetOFlag() { SetOFlag(ir.Imm1(false)); } -IR::U32 TranslatorVisitor::apply_ISBERD_shift(IR::U32 result, isberd::Shift shift_value) { - if (shift_value != isberd::Shift::Default) { +IR::U32 TranslatorVisitor::apply_ISBERD_shift(IR::U32 result, Isberd::Shift shift_value) { + if (shift_value != Isberd::Shift::Default) { return ir.ShiftLeftLogical(result, ir.Imm32(1)); } return result; } -IR::U32 TranslatorVisitor::apply_ISBERD_size_read(IR::U32 address, isberd::SZ sz) { +IR::U32 TranslatorVisitor::apply_ISBERD_size_read(IR::U32 address, Isberd::SZ sz) { switch (sz) { - case isberd::SZ::U8: + case Isberd::SZ::U8: return ir.LoadGlobalU8(ir.UConvert(64, address)); - case isberd::SZ::U16: + case Isberd::SZ::U16: return ir.LoadGlobalU16(ir.UConvert(64, address)); - case isberd::SZ::U32: - case isberd::SZ::F32: + case Isberd::SZ::U32: + case Isberd::SZ::F32: return ir.LoadGlobal32(ir.UConvert(64, address)); default: UNREACHABLE(); diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/impl.h b/src/shader_recompiler/frontend/maxwell/translate/impl/impl.h index b901b3a8b9..1b2547a1bd 100644 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/impl.h +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/impl.h @@ -10,7 +10,6 @@ #include "shader_recompiler/frontend/ir/basic_block.h" #include "shader_recompiler/frontend/ir/ir_emitter.h" #include "shader_recompiler/frontend/maxwell/instruction.h" -#include "shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h" namespace Shader::Maxwell { @@ -57,6 +56,30 @@ enum class FPCompareOp : u64 { T, }; +namespace Isberd { +enum class Mode : u64 { + Default, + Patch, + Prim, + Attr, +}; + +enum class Shift : u64 { + Default, + U16, + B32, +}; + +enum class SZ : u64 { + U8, + U16, + U32, + F32, +}; + +} // namespace Isberd + + class TranslatorVisitor { public: explicit TranslatorVisitor(Environment& env_, IR::Block& block) : env{env_}, ir(block) {} @@ -386,9 +409,10 @@ public: void ResetCFlag(); void ResetOFlag(); +private: // Helper functions for various translator visitors - IR::U32 apply_ISBERD_shift(IR::U32 result, isberd::Shift shift_value); - IR::U32 apply_ISBERD_size_read(IR::U32 address, isberd::SZ sz_value); + IR::U32 apply_ISBERD_shift(IR::U32 result, Isberd::Shift shift_value); + IR::U32 apply_ISBERD_size_read(IR::U32 address, Isberd::SZ sz_value); IR::U32 compute_ISBERD_address(IR::Reg src_reg, u32 src_reg_num, u32 imm, u64 skew_value); }; 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 43f4729b72..2aaf85772d 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 @@ -7,7 +7,6 @@ #include "common/bit_field.h" #include "common/common_types.h" #include "shader_recompiler/frontend/maxwell/translate/impl/impl.h" -#include "shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h" namespace Shader::Maxwell { @@ -21,9 +20,9 @@ void TranslatorVisitor::ISBERD(u64 insn) { BitField<24, 8, u32> imm; BitField<31, 1, u64> skew; BitField<32, 1, u64> o; - BitField<33, 2, isberd::Mode> mode; - BitField<36, 4, isberd::SZ> sz; - BitField<47, 2, isberd::Shift> shift; + BitField<33, 2, Isberd::Mode> mode; + BitField<36, 4, Isberd::SZ> sz; + BitField<47, 2, Isberd::Shift> shift; } const isberd{insn}; auto address = compute_ISBERD_address(isberd.src_reg, isberd.src_reg_num, isberd.imm, isberd.skew); @@ -34,16 +33,16 @@ void TranslatorVisitor::ISBERD(u64 insn) { return; } - if (isberd.mode != isberd::Mode::Default) { + if (isberd.mode != Isberd::Mode::Default) { IR::F32 result_f32{}; switch (isberd.mode.Value()) { - case isberd::Mode::Patch: + case Isberd::Mode::Patch: result_f32 = ir.GetPatch(address.Patch()); break; - case isberd::Mode::Prim: + case Isberd::Mode::Prim: result_f32 = ir.GetAttribute(address.Attribute()); break; - case isberd::Mode::Attr: + case Isberd::Mode::Attr: result_f32 = ir.GetAttributeIndexed(address); break; default: diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h b/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h deleted file mode 100644 index ead0f7efe8..0000000000 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/internal_stage_buffer_entry_read.h +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - -#pragma once -#include "shader_recompiler/environment.h" -#include "shader_recompiler/frontend/ir/basic_block.h" -#include "shader_recompiler/frontend/ir/ir_emitter.h" -#include "shader_recompiler/frontend/maxwell/instruction.h" - -namespace Shader::Maxwell { -namespace isberd { -enum class Mode : u64 { - Default, - Patch, - Prim, - Attr, -}; - -enum class Shift : u64 { - Default, - U16, - B32, -}; - -enum class SZ : u64 { - U8, - U16, - U32, - F32, -}; - -} // Anonymous namespace - -} // namespace Shader::Maxwell