forked from ShuriZma/suyu
yuzu_cmd: Fix memcpy on Vulkan handlers
This commit is contained in:
parent
f92cbc5501
commit
c29584a090
|
@ -82,19 +82,19 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(bool fullscreen) : EmuWindow_SDL2(fullscree
|
||||||
const auto vkCreateInstance =
|
const auto vkCreateInstance =
|
||||||
reinterpret_cast<PFN_vkCreateInstance>(vkGetInstanceProcAddr(nullptr, "vkCreateInstance"));
|
reinterpret_cast<PFN_vkCreateInstance>(vkGetInstanceProcAddr(nullptr, "vkCreateInstance"));
|
||||||
if (vkCreateInstance == nullptr ||
|
if (vkCreateInstance == nullptr ||
|
||||||
vkCreateInstance(&instance_ci, nullptr, &instance) != VK_SUCCESS) {
|
vkCreateInstance(&instance_ci, nullptr, &vk_instance) != VK_SUCCESS) {
|
||||||
LOG_CRITICAL(Frontend, "Failed to create Vulkan instance!");
|
LOG_CRITICAL(Frontend, "Failed to create Vulkan instance!");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(
|
vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(
|
||||||
vkGetInstanceProcAddr(instance, "vkDestroyInstance"));
|
vkGetInstanceProcAddr(vk_instance, "vkDestroyInstance"));
|
||||||
if (vkDestroyInstance == nullptr) {
|
if (vkDestroyInstance == nullptr) {
|
||||||
LOG_CRITICAL(Frontend, "Failed to retrieve Vulkan function pointer!");
|
LOG_CRITICAL(Frontend, "Failed to retrieve Vulkan function pointer!");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!SDL_Vulkan_CreateSurface(render_window, instance, &surface)) {
|
if (!SDL_Vulkan_CreateSurface(render_window, vk_instance, &vk_surface)) {
|
||||||
LOG_CRITICAL(Frontend, "Failed to create Vulkan surface! {}", SDL_GetError());
|
LOG_CRITICAL(Frontend, "Failed to create Vulkan surface! {}", SDL_GetError());
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(bool fullscreen) : EmuWindow_SDL2(fullscree
|
||||||
}
|
}
|
||||||
|
|
||||||
EmuWindow_SDL2_VK::~EmuWindow_SDL2_VK() {
|
EmuWindow_SDL2_VK::~EmuWindow_SDL2_VK() {
|
||||||
vkDestroyInstance(instance, nullptr);
|
vkDestroyInstance(vk_instance, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmuWindow_SDL2_VK::SwapBuffers() {}
|
void EmuWindow_SDL2_VK::SwapBuffers() {}
|
||||||
|
@ -122,9 +122,10 @@ void EmuWindow_SDL2_VK::DoneCurrent() {
|
||||||
|
|
||||||
void EmuWindow_SDL2_VK::RetrieveVulkanHandlers(void* get_instance_proc_addr, void* instance,
|
void EmuWindow_SDL2_VK::RetrieveVulkanHandlers(void* get_instance_proc_addr, void* instance,
|
||||||
void* surface) const {
|
void* surface) const {
|
||||||
std::memcpy(get_instance_proc_addr, vkGetInstanceProcAddr, sizeof(vkGetInstanceProcAddr));
|
const auto instance_proc_addr = vkGetInstanceProcAddr;
|
||||||
std::memcpy(instance, &this->instance, sizeof(this->instance));
|
std::memcpy(get_instance_proc_addr, &instance_proc_addr, sizeof(instance_proc_addr));
|
||||||
std::memcpy(surface, &this->surface, sizeof(this->surface));
|
std::memcpy(instance, &vk_instance, sizeof(vk_instance));
|
||||||
|
std::memcpy(surface, &vk_surface, sizeof(vk_surface));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_VK::CreateSharedContext() const {
|
std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_VK::CreateSharedContext() const {
|
||||||
|
|
|
@ -31,8 +31,8 @@ public:
|
||||||
private:
|
private:
|
||||||
bool UseStandardLayers(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr) const;
|
bool UseStandardLayers(PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr) const;
|
||||||
|
|
||||||
VkInstance instance{};
|
VkInstance vk_instance{};
|
||||||
VkSurfaceKHR surface{};
|
VkSurfaceKHR vk_surface{};
|
||||||
|
|
||||||
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr{};
|
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr{};
|
||||||
PFN_vkDestroyInstance vkDestroyInstance{};
|
PFN_vkDestroyInstance vkDestroyInstance{};
|
||||||
|
|
Loading…
Reference in New Issue