// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include #include "common/common_types.h" #include "common/settings_enums.h" #include "vulkan/vulkan_core.h" static const std::vector default_present_modes{VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_FIFO_KHR}; // Converts a setting to a present mode (or vice versa) static inline constexpr VkPresentModeKHR VSyncSettingToMode(Settings::VSyncMode mode) { switch (mode) { case Settings::VSyncMode::Immediate: return VK_PRESENT_MODE_IMMEDIATE_KHR; case Settings::VSyncMode::Mailbox: return VK_PRESENT_MODE_MAILBOX_KHR; case Settings::VSyncMode::Fifo: return VK_PRESENT_MODE_FIFO_KHR; case Settings::VSyncMode::FifoRelaxed: return VK_PRESENT_MODE_FIFO_RELAXED_KHR; default: return VK_PRESENT_MODE_FIFO_KHR; } } static inline constexpr Settings::VSyncMode PresentModeToSetting(VkPresentModeKHR mode) { switch (mode) { case VK_PRESENT_MODE_IMMEDIATE_KHR: return Settings::VSyncMode::Immediate; case VK_PRESENT_MODE_MAILBOX_KHR: return Settings::VSyncMode::Mailbox; case VK_PRESENT_MODE_FIFO_KHR: return Settings::VSyncMode::Fifo; case VK_PRESENT_MODE_FIFO_RELAXED_KHR: return Settings::VSyncMode::FifoRelaxed; default: return Settings::VSyncMode::Fifo; } } class QWindow; namespace Settings { enum class VSyncMode : u32; } namespace VkDeviceInfo { // Short class to record Vulkan driver information for configuration purposes class Record { public: explicit Record(std::string_view name, const std::vector& vsync_modes, bool has_broken_compute); ~Record(); const std::string name; const std::vector vsync_support; const bool has_broken_compute; }; // TODO(crueter): Port some configure_graphics.cpp stuff void PopulateRecords(std::vector& records, QWindow* window); } // namespace VkDeviceInfo