#ifndef EMULATOR_SRC_GRAPHICS_HOST_GPU_VULKANCOMMON_H_ #define EMULATOR_SRC_GRAPHICS_HOST_GPU_VULKANCOMMON_H_ #define VK_NO_PROTOTYPES #define VULKAN_HPP_DISPATCH_LOADER_DYNAMIC 1 #define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1 #define VULKAN_HPP_NO_CONSTRUCTORS #define VULKAN_HPP_NO_EXCEPTIONS #define VMA_STATIC_VULKAN_FUNCTIONS 0 #define VMA_DYNAMIC_VULKAN_FUNCTIONS 1 #include "common/emulatorConfig.h" #include "graphics/guest_gpu/gpu_defs.h" #include #include #include #include #include #include #include #include namespace Libs::Graphics { vk::Format VulkanFormat(Prospero::BufferFormat guest_format); void RequireVulkanSuccess(vk::Result result, const char* operation); vk::ShaderModule CompileSPV(std::span code, vk::Device device); [[nodiscard]] constexpr bool IsHdrSwapchainFormat(vk::Format format) { switch (format) { case vk::Format::eA2B10G10R10UnormPack32: case vk::Format::eA2R10G10B10UnormPack32: return true; default: return false; } } template void SetVulkanObjectNameF(vk::Device device, Handle handle, fmt::format_string format, Args&&... args) { if (!Config::GraphicsDebugDumpEnabled() || device == nullptr || handle == nullptr || VULKAN_HPP_DEFAULT_DISPATCHER.vkSetDebugUtilsObjectNameEXT == nullptr) { return; } const auto name = fmt::format(format, std::forward(args)...); vk::DebugUtilsObjectNameInfoEXT info {}; info.objectType = Handle::objectType; info.objectHandle = static_cast( reinterpret_cast(static_cast(handle))); info.pObjectName = name.c_str(); (void)device.setDebugUtilsObjectNameEXT(&info); } template [[nodiscard]] std::vector EnumerateVulkan(const char* operation, Enumerator&& enumerate) { for (;;) { uint32_t count = 0; RequireVulkanSuccess(enumerate(&count, nullptr), operation); if (count == 0) { return {}; } std::vector values(count); const auto result = enumerate(&count, values.data()); if (result == vk::Result::eSuccess) { values.resize(count); return values; } if (result != vk::Result::eIncomplete) { RequireVulkanSuccess(result, operation); } } } } // namespace Libs::Graphics #endif // EMULATOR_SRC_GRAPHICS_HOST_GPU_VULKANCOMMON_H_