summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLC <mathew1800@gmail.com>2021-01-28 16:53:15 +0100
committerGitHub <noreply@github.com>2021-01-28 16:53:15 +0100
commit16818e952c0e873e9531ac0448d07b62519cb13a (patch)
tree4d7556e79528ecd8d0cb41de152bfc6ace8cf356
parentMerge pull request #5840 from Morph1984/prepo-fix (diff)
parentvk_scheduler: Fix unaligned placement new expressions (diff)
downloadyuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar.gz
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar.bz2
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar.lz
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar.xz
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.tar.zst
yuzu-16818e952c0e873e9531ac0448d07b62519cb13a.zip
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h
index 4cd43e425..15f2987eb 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.h
+++ b/src/video_core/renderer_vulkan/vk_scheduler.h
@@ -6,10 +6,12 @@
#include <atomic>
#include <condition_variable>
+#include <cstddef>
#include <memory>
#include <stack>
#include <thread>
#include <utility>
+#include "common/alignment.h"
#include "common/common_types.h"
#include "common/threadsafe_queue.h"
#include "video_core/vulkan_common/vulkan_wrapper.h"
@@ -130,12 +132,11 @@ private:
using FuncType = TypedCommand<T>;
static_assert(sizeof(FuncType) < sizeof(data), "Lambda is too large");
+ command_offset = Common::AlignUp(command_offset, alignof(FuncType));
if (command_offset > sizeof(data) - sizeof(FuncType)) {
return false;
}
-
- Command* current_last = last;
-
+ Command* const current_last = last;
last = new (data.data() + command_offset) FuncType(std::move(command));
if (current_last) {
@@ -143,7 +144,6 @@ private:
} else {
first = last;
}
-
command_offset += sizeof(FuncType);
return true;
}
@@ -156,8 +156,8 @@ private:
Command* first = nullptr;
Command* last = nullptr;
- std::size_t command_offset = 0;
- std::array<u8, 0x8000> data{};
+ size_t command_offset = 0;
+ alignas(std::max_align_t) std::array<u8, 0x8000> data{};
};
struct State {