diff options
| author | 2020-01-21 17:41:09 -0300 | |
|---|---|---|
| committer | 2020-01-29 17:53:11 -0300 | |
| commit | c29584a0906e4d9a624b58467a74ff9d04c8d5de (patch) | |
| tree | 3a763858b1fca87ba99d6001a3dfbd7a6852500f /src | |
| parent | yuzu: Implement Vulkan frontend (diff) | |
| download | yuzu-c29584a0906e4d9a624b58467a74ff9d04c8d5de.tar.gz yuzu-c29584a0906e4d9a624b58467a74ff9d04c8d5de.tar.xz yuzu-c29584a0906e4d9a624b58467a74ff9d04c8d5de.zip | |
yuzu_cmd: Fix memcpy on Vulkan handlers
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp | 15 | ||||
| -rw-r--r-- | src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h | 4 |
2 files changed, 10 insertions, 9 deletions
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp index 89e736ef6..a203f0da9 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp | |||
| @@ -82,19 +82,19 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(bool fullscreen) : EmuWindow_SDL2(fullscree | |||
| 82 | const auto vkCreateInstance = | 82 | const auto vkCreateInstance = |
| 83 | reinterpret_cast<PFN_vkCreateInstance>(vkGetInstanceProcAddr(nullptr, "vkCreateInstance")); | 83 | reinterpret_cast<PFN_vkCreateInstance>(vkGetInstanceProcAddr(nullptr, "vkCreateInstance")); |
| 84 | if (vkCreateInstance == nullptr || | 84 | if (vkCreateInstance == nullptr || |
| 85 | vkCreateInstance(&instance_ci, nullptr, &instance) != VK_SUCCESS) { | 85 | vkCreateInstance(&instance_ci, nullptr, &vk_instance) != VK_SUCCESS) { |
| 86 | LOG_CRITICAL(Frontend, "Failed to create Vulkan instance!"); | 86 | LOG_CRITICAL(Frontend, "Failed to create Vulkan instance!"); |
| 87 | exit(EXIT_FAILURE); | 87 | exit(EXIT_FAILURE); |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>( | 90 | vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>( |
| 91 | vkGetInstanceProcAddr(instance, "vkDestroyInstance")); | 91 | vkGetInstanceProcAddr(vk_instance, "vkDestroyInstance")); |
| 92 | if (vkDestroyInstance == nullptr) { | 92 | if (vkDestroyInstance == nullptr) { |
| 93 | LOG_CRITICAL(Frontend, "Failed to retrieve Vulkan function pointer!"); | 93 | LOG_CRITICAL(Frontend, "Failed to retrieve Vulkan function pointer!"); |
| 94 | exit(EXIT_FAILURE); | 94 | exit(EXIT_FAILURE); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | if (!SDL_Vulkan_CreateSurface(render_window, instance, &surface)) { | 97 | if (!SDL_Vulkan_CreateSurface(render_window, vk_instance, &vk_surface)) { |
| 98 | LOG_CRITICAL(Frontend, "Failed to create Vulkan surface! {}", SDL_GetError()); | 98 | LOG_CRITICAL(Frontend, "Failed to create Vulkan surface! {}", SDL_GetError()); |
| 99 | exit(EXIT_FAILURE); | 99 | exit(EXIT_FAILURE); |
| 100 | } | 100 | } |
| @@ -107,7 +107,7 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(bool fullscreen) : EmuWindow_SDL2(fullscree | |||
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | EmuWindow_SDL2_VK::~EmuWindow_SDL2_VK() { | 109 | EmuWindow_SDL2_VK::~EmuWindow_SDL2_VK() { |
| 110 | vkDestroyInstance(instance, nullptr); | 110 | vkDestroyInstance(vk_instance, nullptr); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | void EmuWindow_SDL2_VK::SwapBuffers() {} | 113 | void EmuWindow_SDL2_VK::SwapBuffers() {} |
| @@ -122,9 +122,10 @@ void EmuWindow_SDL2_VK::DoneCurrent() { | |||
| 122 | 122 | ||
| 123 | void EmuWindow_SDL2_VK::RetrieveVulkanHandlers(void* get_instance_proc_addr, void* instance, | 123 | void EmuWindow_SDL2_VK::RetrieveVulkanHandlers(void* get_instance_proc_addr, void* instance, |
| 124 | void* surface) const { | 124 | void* surface) const { |
| 125 | std::memcpy(get_instance_proc_addr, vkGetInstanceProcAddr, sizeof(vkGetInstanceProcAddr)); | 125 | const auto instance_proc_addr = vkGetInstanceProcAddr; |
| 126 | std::memcpy(instance, &this->instance, sizeof(this->instance)); | 126 | std::memcpy(get_instance_proc_addr, &instance_proc_addr, sizeof(instance_proc_addr)); |
| 127 | std::memcpy(surface, &this->surface, sizeof(this->surface)); | 127 | std::memcpy(instance, &vk_instance, sizeof(vk_instance)); |
| 128 | std::memcpy(surface, &vk_surface, sizeof(vk_surface)); | ||
| 128 | } | 129 | } |
| 129 | 130 | ||
| 130 | std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_VK::CreateSharedContext() const { | 131 | std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_VK::CreateSharedContext() const { |
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h index f7234841b..2a7c06a24 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.h | |||
| @@ -31,8 +31,8 @@ public: | |||
| 31 | private: | 31 | private: |
| 32 | bool UseStandardLayers(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr) const; | 32 | bool UseStandardLayers(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr) const; |
| 33 | 33 | ||
| 34 | VkInstance instance{}; | 34 | VkInstance vk_instance{}; |
| 35 | VkSurfaceKHR surface{}; | 35 | VkSurfaceKHR vk_surface{}; |
| 36 | 36 | ||
| 37 | PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr{}; | 37 | PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr{}; |
| 38 | PFN_vkDestroyInstance vkDestroyInstance{}; | 38 | PFN_vkDestroyInstance vkDestroyInstance{}; |