summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2019-05-14 08:41:51 -0400
committerGravatar Lioncash2019-05-14 08:47:56 -0400
commitc212fc9b2c6a389dfe7ea59bc66c745397c349fd (patch)
tree57334dcfdfb201ee4e982010ce5e1144b19d8b62 /src
parentMerge pull request #2462 from lioncash/video-mm (diff)
downloadyuzu-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.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/engines/maxwell_3d.h2
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 {