diff options
author | LC <mathew1800@gmail.com> | 2021-01-28 10:53:15 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 10:53:15 -0500 |
commit | 16818e952c0e873e9531ac0448d07b62519cb13a (patch) | |
tree | 4d7556e79528ecd8d0cb41de152bfc6ace8cf356 /src | |
parent | 9f6290d2078424dce4206cd29a5709492c11c5f9 (diff) | |
parent | 9e88ad8da9c698f38e25e3d9b23feb19b30f68bd (diff) |
Merge pull request #5836 from ReinUsesLisp/unaligned-constr-sched
vk_scheduler: Fix unaligned placement new expressions
Diffstat (limited to 'src')
-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 4cd43e4253..15f2987eb4 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 { |