diff options
author | LC <mathew1800@gmail.com> | 2021-01-28 16:53:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 16:53:15 +0100 |
commit | 16818e952c0e873e9531ac0448d07b62519cb13a (patch) | |
tree | 4d7556e79528ecd8d0cb41de152bfc6ace8cf356 | |
parent | Merge pull request #5840 from Morph1984/prepo-fix (diff) | |
parent | vk_scheduler: Fix unaligned placement new expressions (diff) | |
download | yuzu-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.h | 12 |
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 { |