From 0c32ea242b166b77d1e3f8452e4a98ab2cf10919 Mon Sep 17 00:00:00 2001 From: psucien Date: Sun, 16 Jun 2024 23:45:39 +0200 Subject: [PATCH] shader_recompiler: list all missing instructions during translation pass --- src/common/logging/filter.cpp | 1 + src/common/logging/types.h | 1 + src/shader_recompiler/frontend/structured_control_flow.cpp | 3 +++ src/shader_recompiler/frontend/translate/translate.cpp | 4 +++- src/shader_recompiler/runtime_info.h | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/logging/filter.cpp b/src/common/logging/filter.cpp index dc2e8f02..6ea076ed 100644 --- a/src/common/logging/filter.cpp +++ b/src/common/logging/filter.cpp @@ -110,6 +110,7 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) { CLS(Frontend) \ CLS(Render) \ SUB(Render, Vulkan) \ + SUB(Render, Recompiler) \ CLS(Input) \ CLS(Tty) \ CLS(Loader) diff --git a/src/common/logging/types.h b/src/common/logging/types.h index 687bcfce..3d9c87b1 100644 --- a/src/common/logging/types.h +++ b/src/common/logging/types.h @@ -77,6 +77,7 @@ enum class Class : u8 { Frontend, ///< Emulator UI Render, ///< Video Core Render_Vulkan, ///< Vulkan backend + Render_Recompiler, ///< Shader recompiler Loader, ///< ROM loader Input, ///< Input emulation Tty, ///< Debug output from emu diff --git a/src/shader_recompiler/frontend/structured_control_flow.cpp b/src/shader_recompiler/frontend/structured_control_flow.cpp index 49fe2052..8acd93d4 100644 --- a/src/shader_recompiler/frontend/structured_control_flow.cpp +++ b/src/shader_recompiler/frontend/structured_control_flow.cpp @@ -823,6 +823,9 @@ IR::AbstractSyntaxList BuildASL(ObjectPool& inst_pool, ObjectPool inst_list, Info& info) break; default: const u32 opcode = u32(inst.opcode); - UNREACHABLE_MSG("Unknown opcode {} ({})", magic_enum::enum_name(inst.opcode), opcode); + LOG_ERROR(Render_Recompiler, "Unknown opcode {} ({})", + magic_enum::enum_name(inst.opcode), opcode); + info.translation_failed = true; } } } diff --git a/src/shader_recompiler/runtime_info.h b/src/shader_recompiler/runtime_info.h index c7318460..63474958 100644 --- a/src/shader_recompiler/runtime_info.h +++ b/src/shader_recompiler/runtime_info.h @@ -127,6 +127,7 @@ struct Info { Stage stage; bool uses_group_quad{}; + bool translation_failed{}; // indicates that shader has unsupported instructions template T ReadUd(u32 ptr_index, u32 dword_offset) const noexcept {