// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "RHI.h" #define VULKAN_DYNAMICALLYLOADED 1 #define VULKAN_ENABLE_DUMP_LAYER 0 #define VULKAN_SHOULD_DEBUG_IN_DEVELOPMENT 1 #define VULKAN_SHOULD_ENABLE_DRAW_MARKERS (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT) #define VULKAN_SIGNAL_UNIMPLEMENTED() checkf(false, TEXT("Unimplemented vulkan functionality: %hs"), __PRETTY_FUNCTION__) #define VULKAN_SUPPORTS_SCALAR_BLOCK_LAYOUT 1 #define VULKAN_SUPPORTS_RAY_TRACING_POSITION_FETCH 1 #define UE_VK_API_VERSION VK_API_VERSION_1_1 #if UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT # include "vk_enum_string_helper.h" # define VK_TYPE_TO_STRING(Type, Value) ANSI_TO_TCHAR(string_##Type(Value)) # define VK_FLAGS_TO_STRING(Type, Value) ANSI_TO_TCHAR(string_##Type(Value).c_str()) #endif #define ENUM_VK_ENTRYPOINTS_PLATFORM_BASE(EnumMacro) #define ENUM_VK_ENTRYPOINTS_PLATFORM_INSTANCE(EnumMacro) #define ENUM_VK_ENTRYPOINTS_OPTIONAL_PLATFORM_INSTANCE(EnumMacro) // and now, include the GenericPlatform class #include "../VulkanGenericPlatform.h" typedef FVulkanGenericPlatformWindowContext FVulkanPlatformWindowContext; class FVulkanLinuxPlatform : public FVulkanGenericPlatform { public: static bool IsSupported(); static bool LoadVulkanLibrary(); static bool LoadVulkanInstanceFunctions(VkInstance inInstance); static void FreeVulkanLibrary(); static void GetInstanceExtensions(FVulkanInstanceExtensionArray& OutExtensions); static void GetInstanceLayers(TArray& OutLayers) {} static void GetDeviceExtensions(FVulkanDevice* Device, FVulkanDeviceExtensionArray& OutExtensions); static void GetDeviceLayers(TArray& OutLayers) {} static void CreateSurface(FVulkanPlatformWindowContext& WindowContext, VkInstance Instance, VkSurfaceKHR* OutSurface); static VkTimeDomainKHR GetTimeDomain() { return VK_TIME_DOMAIN_CLOCK_MONOTONIC_KHR; } protected: static void* VulkanLib; static bool bLoadedSDLVulkanLibrary; static bool bAttemptedLoad; }; typedef FVulkanLinuxPlatform FVulkanPlatform;