UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanExtensions.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 VulkanExtensions.h: Vulkan extension definitions.
5=============================================================================*/
6
7#pragma once
8
10
12
13
14#define VULKAN_EXTENSION_NOT_PROMOTED UINT32_MAX
15#define VULKAN_EXTENSION_ENABLED 1
16#define VULKAN_EXTENSION_DISABLED 0
17
18class FVulkanDevice;
19
21{
22 PreferFSR = 0, // This can be used to prefer FSR over FDM when both are available.
23 UseFSROnlyIfAvailable, // This will only print a message if FSR is not available.
24 RequireFSR, // This will print an error if FSR is not available.
25 PreferFDM, // This can be used to prefer FDM over FSR when both are available.
26 UseFDMOnlyIfAvailable, // This will only print a message if FDM is not available.
27 RequireFDM, // This will print an error if FDM is not available.
28};
29
31{
32public:
34 {
35 // If the extension is enabled in code and supported by the driver, it will automatically get used.
37
38 // The extension will not be used unless SetActivated() is called in the extension.
39 // Can be used to add engine support for an extension, but not use it by default unless externally requested.
40 // Useful for extensions only activated by plugins, or only present when a certain layer is loaded.
42 };
43
52
54
55 inline void SetSupported() { bSupported = true; }
56 inline void SetActivated() { bActivated = true; }
57 inline bool SetCore(uint32 ApiVersion) { return (bCore = (ApiVersion >= PromotedVersion)); }
58
59 inline const ANSICHAR* GetExtensionName() const { return ExtensionName; }
60 inline bool IsEnabled() const { return bEnabledInCode; }
61 inline bool IsSupported() const { return bSupported; }
62 inline bool IsCore() { return bCore; }
63
64 inline bool InUse() const
65 {
67 }
68
69 template <typename ExtensionType>
71 {
72 for (int32 Index = 0; Index < UEExtensions.Num(); ++Index)
73 {
75 {
76 return Index;
77 }
78 }
79 return INDEX_NONE;
80 }
81
82protected:
85
86 // Extension is enabled in code if the VULKAN_SUPPORTS_* define is TRUE in VulkanConfiguration.h or Vulkan*Platform.h.
88
89 // Signals if the extension is support by the driver of the device being used (evaluated at runtime).
91
92 // Signals if the runtime currently wants this extension to be loaded.
94
95 // Signals if the extension has been promoted to core Vulkan for the current instance version
96 bool bCore;
97};
98
99
100
102{
103public:
104
111
114
117
126
127 virtual void PreCreateDevice(VkDeviceCreateInfo& DeviceInfo) {}
128
129 // Holds extensions requested externally (eg plugins)
131
132protected:
134
137
138 // Signals that this extension has passed any specific feature and/or property requirements
140};
141
142
143
169
170// Helpers to create simple extensions that set a flag
171#define DEVICE_EXT_FLAG_SETTER(FLAG_NAME) [](FOptionalVulkanDeviceExtensions& ExtensionFlags) { ExtensionFlags.FLAG_NAME = 1; }
172#define INSTANCE_EXT_FLAG_SETTER(FLAG_NAME) [](FOptionalVulkanInstanceExtensions& ExtensionFlags) { ExtensionFlags.FLAG_NAME = 1; }
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
EVulkanVariableRateShadingPreference
Definition VulkanExtensions.h:21
#define VULKAN_EXTENSION_ENABLED
Definition VulkanExtensions.h:15
#define VULKAN_EXTENSION_NOT_PROMOTED
Definition VulkanExtensions.h:14
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition VulkanExtensions.h:102
static TArray< const ANSICHAR * > ExternalExtensions
Definition VulkanExtensions.h:130
static TArray< VkExtensionProperties > GetDriverSupportedDeviceExtensions(VkPhysicalDevice Gpu, const ANSICHAR *LayerName=nullptr)
Definition VulkanExtensions.cpp:167
virtual void PostPhysicalDeviceProperties(FOptionalVulkanDeviceExtensions &ExtensionFlags)
Definition VulkanExtensions.h:116
virtual void PrePhysicalDeviceFeatures(VkPhysicalDeviceFeatures2KHR &PhysicalDeviceFeatures2)
Definition VulkanExtensions.h:118
TUniqueFunction< void(FOptionalVulkanDeviceExtensions &ExtensionFlags)> FlagSetter
Definition VulkanExtensions.h:136
struct FOptionalVulkanDeviceExtensionProperties & GetDeviceExtensionProperties()
Definition VulkanExtensions.cpp:151
bool bRequirementsPassed
Definition VulkanExtensions.h:139
FVulkanDevice * Device
Definition VulkanExtensions.h:135
virtual void PrePhysicalDeviceProperties(VkPhysicalDeviceProperties2KHR &PhysicalDeviceProperties2)
Definition VulkanExtensions.h:115
static FVulkanDeviceExtensionArray GetUESupportedDeviceExtensions(FVulkanDevice *InDevice, uint32 ApiVersion)
Definition VulkanExtensions.cpp:2246
virtual void PreCreateDevice(VkDeviceCreateInfo &DeviceInfo)
Definition VulkanExtensions.h:127
FVulkanDeviceExtension(FVulkanDevice *InDevice, const ANSICHAR *InExtensionName, int32 InEnabledInCode, uint32 InPromotedVersion=VULKAN_EXTENSION_NOT_PROMOTED, TUniqueFunction< void(FOptionalVulkanDeviceExtensions &ExtensionFlags)> &&InFlagSetter=nullptr, EExtensionActivation InActivation=FVulkanExtensionBase::AutoActivate)
Definition VulkanExtensions.h:105
virtual void PostPhysicalDeviceFeatures(FOptionalVulkanDeviceExtensions &ExtensionFlags)
Definition VulkanExtensions.h:119
Definition VulkanDevice.h:279
Definition VulkanExtensions.h:31
const ANSICHAR * ExtensionName
Definition VulkanExtensions.h:83
bool SetCore(uint32 ApiVersion)
Definition VulkanExtensions.h:57
bool bSupported
Definition VulkanExtensions.h:90
static int32 FindExtension(const TArray< TUniquePtr< ExtensionType > > &UEExtensions, const ANSICHAR *ExtensionName)
Definition VulkanExtensions.h:70
bool IsEnabled() const
Definition VulkanExtensions.h:60
const ANSICHAR * GetExtensionName() const
Definition VulkanExtensions.h:59
void SetSupported()
Definition VulkanExtensions.h:55
void SetActivated()
Definition VulkanExtensions.h:56
bool bEnabledInCode
Definition VulkanExtensions.h:87
bool InUse() const
Definition VulkanExtensions.h:64
bool IsCore()
Definition VulkanExtensions.h:62
EExtensionActivation
Definition VulkanExtensions.h:34
@ ManuallyActivate
Definition VulkanExtensions.h:41
@ AutoActivate
Definition VulkanExtensions.h:36
bool bCore
Definition VulkanExtensions.h:96
bool IsSupported() const
Definition VulkanExtensions.h:61
const uint32 PromotedVersion
Definition VulkanExtensions.h:84
virtual ~FVulkanExtensionBase()
Definition VulkanExtensions.h:53
bool bActivated
Definition VulkanExtensions.h:93
FVulkanExtensionBase(const ANSICHAR *InExtensionName, int32 InEnabledInCode, uint32 InPromotedVersion, EExtensionActivation InActivation)
Definition VulkanExtensions.h:44
Definition VulkanExtensions.h:145
static FVulkanInstanceExtensionArray GetUESupportedInstanceExtensions(uint32 ApiVersion)
Definition VulkanExtensions.cpp:2462
virtual void PreCreateInstance(VkInstanceCreateInfo &CreateInfo, FOptionalVulkanInstanceExtensions &ExtensionFlags)
Definition VulkanExtensions.h:156
TUniqueFunction< void(FOptionalVulkanInstanceExtensions &ExtensionFlags)> FlagSetter
Definition VulkanExtensions.h:167
static TArray< VkExtensionProperties > GetDriverSupportedInstanceExtensions(const ANSICHAR *LayerName=nullptr)
Definition VulkanExtensions.cpp:181
FVulkanInstanceExtension(const ANSICHAR *InExtensionName, int32 InEnabledInCode, uint32 InPromotedVersion=VULKAN_EXTENSION_NOT_PROMOTED, TUniqueFunction< void(FOptionalVulkanInstanceExtensions &ExtensionFlags)> &&InFlagSetter=nullptr, EExtensionActivation InActivation=FVulkanExtensionBase::AutoActivate)
Definition VulkanExtensions.h:148
static TArray< const ANSICHAR * > ExternalExtensions
Definition VulkanExtensions.h:164
Definition Array.h:670
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition VulkanDevice.h:152
Definition VulkanDevice.h:39
Definition VulkanDynamicRHI.h:27
static UE_FORCEINLINE_HINT int32 Strcmp(const CharType *String1, const CharType *String2)
Definition CString.h:1018