diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/file_util.cpp | 6 | ||||
-rw-r--r-- | src/common/file_util.h | 14 | ||||
-rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 7 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/common/file_util.cpp b/src/common/file_util.cpp index cd852bfd8..2d0b81c6e 100644 --- a/src/common/file_util.cpp +++ b/src/common/file_util.cpp @@ -809,16 +809,16 @@ IOFile::~IOFile() { Close(); } -IOFile::IOFile(IOFile&& other) { +IOFile::IOFile(IOFile&& other) noexcept { Swap(other); } -IOFile& IOFile::operator=(IOFile&& other) { +IOFile& IOFile::operator=(IOFile&& other) noexcept { Swap(other); return *this; } -void IOFile::Swap(IOFile& other) { +void IOFile::Swap(IOFile& other) noexcept { std::swap(m_file, other.m_file); std::swap(m_good, other.m_good); } diff --git a/src/common/file_util.h b/src/common/file_util.h index 4c11849ee..fc6b3ea46 100644 --- a/src/common/file_util.h +++ b/src/common/file_util.h @@ -160,10 +160,10 @@ public: ~IOFile(); - IOFile(IOFile&& other); - IOFile& operator=(IOFile&& other); + IOFile(IOFile&& other) noexcept; + IOFile& operator=(IOFile&& other) noexcept; - void Swap(IOFile& other); + void Swap(IOFile& other) noexcept; bool Open(const std::string& filename, const char openmode[]); bool Close(); @@ -202,11 +202,15 @@ public: return items_written; } - size_t ReadBytes(void* data, size_t length) { + template <typename T> + size_t ReadBytes(T* data, size_t length) { + static_assert(std::is_trivially_copyable<T>(), "T must be trivially copyable"); return ReadArray(reinterpret_cast<char*>(data), length); } - size_t WriteBytes(const void* data, size_t length) { + template <typename T> + size_t WriteBytes(const T* data, size_t length) { + static_assert(std::is_trivially_copyable<T>(), "T must be trivially copyable"); return WriteArray(reinterpret_cast<const char*>(data), length); } diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index 539aa87f9..abbf0893d 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp @@ -888,6 +888,9 @@ private: case PredCondition::Equal: SetPredicate(instr.fsetp.pred3, '(' + op_a + ") == (" + op_b + ')'); break; + case PredCondition::LessEqual: + SetPredicate(instr.fsetp.pred3, '(' + op_a + ") <= (" + op_b + ')'); + break; default: NGLOG_CRITICAL(HW_GPU, "Unhandled predicate condition: {} (a: {}, b: {})", static_cast<unsigned>(instr.fsetp.cond.Value()), op_a, op_b); @@ -939,6 +942,10 @@ private: regs.SetRegisterToFloat(instr.gpr0, 0, "((" + op_a + ") == (" + op_b + ")) ? 1.0 : 0", 1, 1); break; + case PredCondition::LessEqual: + regs.SetRegisterToFloat(instr.gpr0, 0, + "((" + op_a + ") <= (" + op_b + ")) ? 1.0 : 0", 1, 1); + break; case PredCondition::GreaterThan: regs.SetRegisterToFloat(instr.gpr0, 0, "((" + op_a + ") > (" + op_b + ")) ? 1.0 : 0", 1, 1); |