VideoBackends: Make it possible for PrepareWindow to change the surface

Again, needed for MoltenVK.
This commit is contained in:
Stenzek 2020-03-11 23:10:28 +10:00
parent 86db015c23
commit a545344268
4 changed files with 6 additions and 5 deletions

View File

@ -233,12 +233,13 @@ bool Init(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
Host_UpdateMainFrame(); // Disable any menus or buttons at boot Host_UpdateMainFrame(); // Disable any menus or buttons at boot
// Issue any API calls which must occur on the main thread for the graphics backend. // Issue any API calls which must occur on the main thread for the graphics backend.
g_video_backend->PrepareWindow(wsi); WindowSystemInfo prepared_wsi(wsi);
g_video_backend->PrepareWindow(prepared_wsi);
// Start the emu thread // Start the emu thread
s_done_booting.Reset(); s_done_booting.Reset();
s_is_booting.Set(); s_is_booting.Set();
s_emu_thread = std::thread(EmuThread, std::move(boot), wsi); s_emu_thread = std::thread(EmuThread, std::move(boot), prepared_wsi);
return true; return true;
} }

View File

@ -18,6 +18,6 @@ public:
std::string GetName() const override { return "Vulkan"; } std::string GetName() const override { return "Vulkan"; }
std::string GetDisplayName() const override { return _trans("Vulkan"); } std::string GetDisplayName() const override { return _trans("Vulkan"); }
void InitBackendInfo() override; void InitBackendInfo() override;
void PrepareWindow(const WindowSystemInfo& wsi) override; void PrepareWindow(WindowSystemInfo& wsi) override;
}; };
} // namespace Vulkan } // namespace Vulkan

View File

@ -304,7 +304,7 @@ static bool IsRunningOnMojaveOrHigher()
} }
#endif #endif
void VideoBackend::PrepareWindow(const WindowSystemInfo& wsi) void VideoBackend::PrepareWindow(WindowSystemInfo& wsi)
{ {
#if defined(VK_USE_PLATFORM_MACOS_MVK) #if defined(VK_USE_PLATFORM_MACOS_MVK)
// This is kinda messy, but it avoids having to write Objective C++ just to create a metal layer. // This is kinda messy, but it avoids having to write Objective C++ just to create a metal layer.

View File

@ -47,7 +47,7 @@ public:
// Prepares a native window for rendering. This is called on the main thread, or the // Prepares a native window for rendering. This is called on the main thread, or the
// thread which owns the window. // thread which owns the window.
virtual void PrepareWindow(const WindowSystemInfo& wsi) {} virtual void PrepareWindow(WindowSystemInfo& wsi) {}
static std::string BadShaderFilename(const char* shader_stage, int counter); static std::string BadShaderFilename(const char* shader_stage, int counter);