diff options
| author | 2019-05-14 08:41:51 -0400 | |
|---|---|---|
| committer | 2019-05-14 08:47:56 -0400 | |
| commit | c212fc9b2c6a389dfe7ea59bc66c745397c349fd (patch) | |
| tree | 57334dcfdfb201ee4e982010ce5e1144b19d8b62 | |
| parent | Merge pull request #2462 from lioncash/video-mm (diff) | |
| download | yuzu-c212fc9b2c6a389dfe7ea59bc66c745397c349fd.tar.gz yuzu-c212fc9b2c6a389dfe7ea59bc66c745397c349fd.tar.xz yuzu-c212fc9b2c6a389dfe7ea59bc66c745397c349fd.zip | |
video_core/engines/maxwell_3d: Add is_trivially_copyable_v check for Regs
std::memset is used to clear the entire register structure, which
requires that the Regs struct be trivially copyable (otherwise undefined
behavior is invoked). This prevents the case where a non-trivial type is
potentially added to the struct.
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 4883b582a..48e4fec33 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <bitset> | 8 | #include <bitset> |
| 9 | #include <type_traits> | ||
| 9 | #include <unordered_map> | 10 | #include <unordered_map> |
| 10 | #include <vector> | 11 | #include <vector> |
| 11 | 12 | ||
| @@ -1107,6 +1108,7 @@ public: | |||
| 1107 | } regs{}; | 1108 | } regs{}; |
| 1108 | 1109 | ||
| 1109 | static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Maxwell3D Regs has wrong size"); | 1110 | static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Maxwell3D Regs has wrong size"); |
| 1111 | static_assert(std::is_trivially_copyable_v<Regs>, "Maxwell3D Regs must be trivially copyable"); | ||
| 1110 | 1112 | ||
| 1111 | struct State { | 1113 | struct State { |
| 1112 | struct ConstBufferInfo { | 1114 | struct ConstBufferInfo { |