diff options
| -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); | 
