#pragma once /** ****************************************************************************** * Xenia : Xbox 360 Emulator Research Project * ****************************************************************************** * Copyright 2025 Ben Vanik. All rights reserved. * * Released under the BSD license - see LICENSE in the root for more details. * ****************************************************************************** * * @modified Tom Clay, 2026 - Adapted for ReXGlue runtime */ #include #include #include #include #include namespace rex { namespace ui { namespace vulkan { class VulkanProvider : public GraphicsProvider { public: static std::unique_ptr Create(bool with_gpu_emulation, bool with_presentation); VulkanInstance* vulkan_instance() const { return vulkan_instance_.get(); } VulkanDevice* vulkan_device() const { return vulkan_device_.get(); } // nullptr if created without presentation support. const UISamplers* ui_samplers() const { return ui_samplers_.get(); } std::unique_ptr CreatePresenter(Presenter::HostGpuLossCallback host_gpu_loss_callback = Presenter::FatalErrorHostGpuLossCallback) override; std::unique_ptr CreateImmediateDrawer() override; private: explicit VulkanProvider() = default; std::unique_ptr vulkan_instance_; // Depends on the instance. std::unique_ptr vulkan_device_; // Depends on the device. std::unique_ptr ui_samplers_; }; } // namespace vulkan } // namespace ui } // namespace rex