UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VulkanAndroidPlatform.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "RHI.h"
7
8#define VK_USE_PLATFORM_ANDROID_KHR 1
9
10#define VULKAN_ENABLE_DUMP_LAYER 0
11#define VULKAN_DYNAMICALLYLOADED 1
12#define VULKAN_SHOULD_ENABLE_DRAW_MARKERS (UE_BUILD_DEVELOPMENT || UE_BUILD_DEBUG)
13#define VULKAN_USE_IMAGE_ACQUIRE_FENCES 0
14#define VULKAN_USE_CREATE_ANDROID_SURFACE 1
15#define VULKAN_SHOULD_USE_LLM (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT) // If enabled Vulkan will report detailed allocation statistics, overrides some tags with custom ones
16#define VULKAN_SHOULD_USE_COMMANDWRAPPERS VULKAN_SHOULD_USE_LLM //LLM on Vulkan needs command wrappers to account for vkallocs
17#define VULKAN_ENABLE_LRU_CACHE 1
18#define VULKAN_SUPPORTS_GOOGLE_DISPLAY_TIMING 1
19#define VULKAN_PURGE_SHADER_MODULES 0
20#define VULKAN_SUPPORTS_DEDICATED_ALLOCATION 0
21#define VULKAN_SUPPORTS_ASTC_DECODE_MODE 1
22#define VULKAN_SUPPORTS_SCALAR_BLOCK_LAYOUT 1
23#define VULKAN_SUPPORTS_TRANSIENT_RESOURCE_ALLOCATOR 0
24#define VULKAN_SUPPORTS_DRIVER_PROPERTIES 0
25#define VULKAN_SUPPORTS_DESCRIPTOR_INDEXING 1
26#define VULKAN_SUPPORTS_RAY_TRACING_POSITION_FETCH 0
27
28#define UE_VK_API_VERSION VK_API_VERSION_1_1
29
30#if UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT
31# include "vk_enum_string_helper.h"
32# define VK_TYPE_TO_STRING(Type, Value) ANSI_TO_TCHAR(string_##Type(Value))
33//# define VK_FLAGS_TO_STRING(Type, Value) ANSI_TO_TCHAR(string_##Type(Value).c_str())
34#endif
35
36#define ENUM_VK_ENTRYPOINTS_PLATFORM_BASE(EnumMacro)
37
38#define ENUM_VK_ENTRYPOINTS_PLATFORM_INSTANCE(EnumMacro) \
39 EnumMacro(PFN_vkCreateAndroidSurfaceKHR, vkCreateAndroidSurfaceKHR) \
40 EnumMacro(PFN_vkGetAndroidHardwareBufferPropertiesANDROID, vkGetAndroidHardwareBufferPropertiesANDROID)
41
42#define ENUM_VK_ENTRYPOINTS_OPTIONAL_PLATFORM_INSTANCE(EnumMacro) \
43 EnumMacro(PFN_vkGetRefreshCycleDurationGOOGLE, vkGetRefreshCycleDurationGOOGLE) \
44 EnumMacro(PFN_vkGetPastPresentationTimingGOOGLE, vkGetPastPresentationTimingGOOGLE)
45
46// and now, include the GenericPlatform class
48
50
52{
53public:
55 {
56 AndroidWindow = (FAndroidWindow*)InWindowHandle;
57 // in this case FVulkanAndroidPlatformWindowContext owns the FNativeAccessor.
59 {
61 {
62 // the context should be locked at the beginning of the update process, this overload is used for GT initiated events.
64 WindowContainer = AndroidWindow->GetANativeAccessor(false);
65 NativeWindow = WindowContainer.IsSet() ? WindowContainer->GetANativeWindow() : nullptr;
66 }
67 }
68 }
69
71 {
72 // in this case the FNativeAccessor has come from the event thread
73 if(WindowContainerIn.IsSet())
74 {
76 // the context should be locked at the beginning of the update process, this overload is used for ET initiated events.
78 WindowContainer = MoveTemp(WindowContainerIn);
79 NativeWindow = WindowContainer->GetANativeWindow();
80 AndroidWindow = WindowContainer.GetValue().Get();
81 }
82 }
83
84 // we dont have a locked window to create swapchains during present, android will use the
85 // SetRHIOnReleaseWindowCallback / SetRHIOnReInitWindowCallback to create as required.
86 static bool CanCreateSwapchainOnDemand() { return false; }
87 bool IsValid() const
88 {
89 return FAndroidMisc::UseNewWindowBehavior() ? GetANativeWindow() != nullptr : true;
90 }
91
93 {
94 return NativeWindow;
95 }
96
97 void* GetWindowHandle() const
98 {
99 return AndroidWindow;
100 }
101
102private:
103 ANativeWindow* NativeWindow = nullptr;
104 FAndroidWindow* AndroidWindow = nullptr;
106};
107
109
111{
112public:
113 static bool LoadVulkanLibrary();
115 static void FreeVulkanLibrary();
116
117 static void InitDevice(FVulkanDevice* InDevice);
118 static void PostInitGPU(const FVulkanDevice& InDevice);
119
125
127
128 static void* GetHardwareWindowHandle();
129
130 static bool SupportsBCTextureFormats();
131 static bool SupportsASTCTextureFormats() { return true; }
132 static bool SupportsETC2TextureFormats() { return true; }
133 // GLES does not support R16Unorm, so all Android has to fallback to R16F instead
134 static bool SupportsR16UnormTextureFormat() { return false; }
135
136 static bool SupportsQuerySurfaceProperties() { return false; }
137
138 static void SetupFeatureLevels(TArrayView<EShaderPlatform> ShaderPlatformForFeatureLevel)
139 {
141 {
142 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::ES2_REMOVED] = SP_NumPlatforms;
143 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::ES3_1] = SP_VULKAN_ES3_1_ANDROID;
144 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM4_REMOVED] = SP_NumPlatforms;
145 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM5] = SP_NumPlatforms;
146 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM6] = SP_NumPlatforms;
147 }
148 else
149 {
150 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::ES2_REMOVED] = SP_NumPlatforms;
151 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::ES3_1] = SP_VULKAN_ES3_1_ANDROID;
152 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM4_REMOVED] = SP_VULKAN_SM5_ANDROID;
153 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM5] = SP_VULKAN_SM5_ANDROID;
154 ShaderPlatformForFeatureLevel[ERHIFeatureLevel::SM6] = SP_NumPlatforms;
155 }
156 }
157
158 static bool SupportsTimestampRenderQueries();
159
160 static bool SupportsDynamicResolution();
161
163 {
164 #if USE_STATIC_FEATURE_LEVEL_ENUMS
166 #else
168 #endif
169 }
170
179
180 static bool HasCustomFrameTiming();
181
182 static bool SupportsVolumeTextureRendering() { return false; }
183
184 static void OverridePlatformHandlers(bool bInit);
185
186 //#todo-rco: Detect Mali?
187 static bool RequiresPresentLayoutFix() { return true; }
188
189#if PLATFORM_ANDROID_X64
190 static bool HasUnifiedMemory();
191#else
192 static bool HasUnifiedMemory() { return true; }
193#endif
194
195 static bool RegisterGPUWork() { return false; }
196
197 // Assume most devices can't use the extra cores for running parallel tasks
198 static bool SupportParallelRenderingTasks() { return false; }
199
200 //#todo-rco: Detect Mali? Doing a clear on ColorAtt layout on empty cmd buffer causes issues
201 static bool RequiresSwapchainGeneralInitialLayout() { return true; }
202
204
205 // Does the platform allow a nullptr Pixelshader on the pipeline
206 static bool SupportsNullPixelShader() { return false; }
207
208 // Does the platform require depth to be written on stencil clear
211
212 // Does the platform require to avoid VkAttachmentDescriptionStencilLayout in favor of merged depth-stencil layouts
215
216 static bool FramePace(FVulkanDevice& Device, void* WindowHandle, VkSwapchainKHR Swapchain, uint32 PresentID, VkPresentInfoKHR& Info);
217
219
221
222 static void DestroySwapchainKHR(VkDevice Device, VkSwapchainKHR Swapchain, const VkAllocationCallbacks* Allocator);
223
224 // handle precompile of PSOs, send to an android specific precompile external process.
226
227 static FString GetCompiledPSOCacheTopFolderPath();
228
229 static bool AreRemoteCompileServicesActive();
231 static void StopRemoteCompileServices();
232
233 // Do not attempt to immediately recreate swapchain
234 static bool RecreateSwapchainOnFail() { return false; }
235
236 // original window behavior swapchain functions.
237 // ignored with the new window method.
238 static void RecreateSwapChain(void* NewNativeWindow);
239 static void DestroySwapChain();
240
247
248 // Setup platform to use a workaround to reduce textures memory requirements
250 static void SetImageMemoryRequirementWorkaround(VkImageCreateInfo& ImageCreateInfo);
251
252 // Returns the profile name to look up for a given feature level on a platform
254
256 {
257 // Many Android Vulkan implementations do not support wave ops in vertex and geometry shaders and we don't need them there.
259 }
260
261 static void OnGPUCrash(const TCHAR* Message);
262
264
265#if USE_ANDROID_VULKAN_SWAPPY
266 static bool bSwappyEnabledAtRHIInit;
267#endif
268
269protected:
270 static void* VulkanLib;
271 static bool bAttemptedLoad;
272
273#if VULKAN_SUPPORTS_GOOGLE_DISPLAY_TIMING
276#endif
277
287
290
294
296};
297
298#if VULKAN_SUPPORTS_GOOGLE_DISPLAY_TIMING
300{
301public:
303
305 {
306 return ((SyncDuration > 0) ? &PresentTimesInfo : nullptr);
307 }
308
309 void ScheduleNextFrame(uint32 InPresentID, int32 FramePace, int32 RefreshRate); // Call right before present
310
311private:
312 void UpdateSyncDuration(int32 FramePace, int32 RefreshRate);
313
314 uint64 PredictLastScheduledFramePresentTime(uint32 CurrentPresentID) const;
315 uint64 CalculateMinPresentTime(uint64 CpuPresentTime) const;
316 uint64 CalculateMaxPresentTime(uint64 CpuPresentTime) const;
317 uint64 CalculateNearestVsTime(uint64 ActualPresentTime, uint64 TargetTime) const;
318 void PollPastFrameInfo();
319
320private:
321 struct FKnownFrameInfo
322 {
323 bool bValid = false;
324 uint32 PresentID = 0;
325 uint64 ActualPresentTime = 0;
326 };
327
328private:
329 VkDevice Device;
330 VkSwapchainKHR SwapChain;
331
332 VkPresentTimesInfoGOOGLE PresentTimesInfo;
333 VkPresentTimeGOOGLE PresentTime;
334 uint64 RefreshDuration = 0;
335 uint64 HalfRefreshDuration = 0;
336
337 FKnownFrameInfo LastKnownFrameInfo;
338 uint64 LastScheduledPresentTime = 0;
339 uint64 SyncDuration = 0;
340 int32 FramePace = 0;
341};
342#endif //VULKAN_SUPPORTS_GOOGLE_DISPLAY_TIMING
343
#define UE_ANDROID_STATIC_FEATURE_LEVEL
Definition AndroidStaticFeatureLevel.inl:8
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ SP_VULKAN_SM5_ANDROID
Definition RHIShaderPlatform.h:46
@ SP_VULKAN_ES3_1_ANDROID
Definition RHIShaderPlatform.h:22
@ SP_NumPlatforms
Definition RHIShaderPlatform.h:55
CORE_API bool IsInGameThread()
Definition ThreadingBase.cpp:185
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
FVulkanAndroidPlatform FVulkanPlatform
Definition VulkanAndroidPlatform.h:344
bool IsInAndroidEventThread()
uint32_t uint32
Definition binka_ue_file_header.h:6
FAndroidWindow * Get()
Definition AndroidWindow.h:120
ANativeWindow * GetANativeWindow() const
Definition AndroidWindow.h:132
Definition AndroidWindow.h:22
FNativeAccessor GetANativeAccessor(bool bWriteAccess)
Definition AndroidWindow.h:136
Definition IConsoleManager.h:1580
Definition VulkanAndroidPlatform.h:300
void ScheduleNextFrame(uint32 InPresentID, int32 FramePace, int32 RefreshRate)
Definition VulkanAndroidPlatform.cpp:162
const VkPresentTimesInfoGOOGLE * GetPresentTimesInfo() const
Definition VulkanAndroidPlatform.h:304
EPSOPrecacheCompileType
Definition RHIResources.h:4798
Definition UnrealTemplate.h:321
Definition VulkanAndroidPlatform.h:52
FVulkanAndroidPlatformWindowContext(TOptional< FAndroidWindow::FNativeAccessor > WindowContainerIn)
Definition VulkanAndroidPlatform.h:70
FVulkanAndroidPlatformWindowContext(void *InWindowHandle)
Definition VulkanAndroidPlatform.h:54
ANativeWindow * GetANativeWindow() const
Definition VulkanAndroidPlatform.h:92
bool IsValid() const
Definition VulkanAndroidPlatform.h:87
void * GetWindowHandle() const
Definition VulkanAndroidPlatform.h:97
static bool CanCreateSwapchainOnDemand()
Definition VulkanAndroidPlatform.h:86
Definition VulkanAndroidPlatform.h:111
static bool bRequiresWaitingForFrameCompletionEvent
Definition VulkanAndroidPlatform.h:293
static void StopRemoteCompileServices()
Definition VulkanAndroidPlatform.cpp:1768
static void * GetHardwareWindowHandle()
Definition VulkanAndroidPlatform.cpp:421
static bool HasCustomFrameTiming()
Definition VulkanAndroidPlatform.cpp:401
static void PostInitGPU(const FVulkanDevice &InDevice)
Definition VulkanAndroidPlatform.cpp:1999
static void GetInstanceLayers(TArray< const ANSICHAR * > &OutLayers)
Definition VulkanAndroidPlatform.cpp:470
static int32 CachedFramePace
Definition VulkanAndroidPlatform.h:279
static void SetImageMemoryRequirementWorkaround(VkImageCreateInfo &ImageCreateInfo)
Definition VulkanAndroidPlatform.cpp:2133
static void SetupRequiresMergedDepthStencilLayoutWorkaround(const FVulkanDevice &Device)
Definition VulkanAndroidPlatform.cpp:888
static int32 UnsuccessfulRefreshRateFrames
Definition VulkanAndroidPlatform.h:283
static int32 CachedRefreshRate
Definition VulkanAndroidPlatform.h:280
static void GetDeviceLayers(TArray< const ANSICHAR * > &OutLayers)
Definition VulkanAndroidPlatform.cpp:543
static VkFormat GetPlatform5551FormatWithFallback(VkFormat &OutFallbackFormat0, VkFormat &OutFallbackFormat1)
Definition VulkanAndroidPlatform.h:241
static int32 AFBCWorkaroundOption
Definition VulkanAndroidPlatform.h:288
static void CreateSurface(FVulkanPlatformWindowContext &WindowContext, VkInstance Instance, VkSurfaceKHR *OutSurface)
Definition VulkanAndroidPlatform.cpp:446
static TArray< TArray< ANSICHAR > > SwappyRequiredExtensions
Definition VulkanAndroidPlatform.h:286
static void GetInstanceExtensions(FVulkanInstanceExtensionArray &OutExtensions)
Definition VulkanAndroidPlatform.cpp:458
static bool SupportsBCTextureFormats()
Definition VulkanAndroidPlatform.cpp:441
static VkTimeDomainKHR GetTimeDomain()
Definition VulkanAndroidPlatform.h:263
static bool FramePace(FVulkanDevice &Device, void *WindowHandle, VkSwapchainKHR Swapchain, uint32 PresentID, VkPresentInfoKHR &Info)
Definition VulkanAndroidPlatform.cpp:902
static FString GetVulkanProfileNameForFeatureLevel(ERHIFeatureLevel::Type FeatureLevel, bool bRaytracing)
Definition VulkanAndroidPlatform.cpp:2160
static bool LoadVulkanLibrary()
Definition VulkanAndroidPlatform.cpp:305
static bool RequiresMergedDepthStencilLayout()
Definition VulkanAndroidPlatform.h:213
static bool bAttemptedLoad
Definition VulkanAndroidPlatform.h:271
static bool SupportsDynamicResolution()
Definition VulkanAndroidPlatform.cpp:643
static void DestroySwapChain()
Definition VulkanAndroidPlatform.cpp:808
static VkShaderStageFlags RequiredWaveOpsShaderStageFlags(VkShaderStageFlags VulkanDeviceShaderStageFlags)
Definition VulkanAndroidPlatform.h:255
static bool SupportsETC2TextureFormats()
Definition VulkanAndroidPlatform.h:132
static void SetupFeatureLevels(TArrayView< EShaderPlatform > ShaderPlatformForFeatureLevel)
Definition VulkanAndroidPlatform.h:138
static VkResult CreateSwapchainKHR(FVulkanPlatformWindowContext &WindowContext, VkPhysicalDevice PhysicalDevice, VkDevice Device, const VkSwapchainCreateInfoKHR *CreateInfo, const VkAllocationCallbacks *Allocator, VkSwapchainKHR *Swapchain)
Definition VulkanAndroidPlatform.cpp:965
static void SetupImageMemoryRequirementWorkaround(const FVulkanDevice &InDevice)
Definition VulkanAndroidPlatform.cpp:2022
static bool SupportsTimestampRenderQueries()
Definition VulkanAndroidPlatform.cpp:634
static bool bHasGoogleDisplayTiming
Definition VulkanAndroidPlatform.h:274
static int32 CachedSyncInterval
Definition VulkanAndroidPlatform.h:281
static bool RecreateSwapchainOnFail()
Definition VulkanAndroidPlatform.h:234
static void DestroySwapchainKHR(VkDevice Device, VkSwapchainKHR Swapchain, const VkAllocationCallbacks *Allocator)
Definition VulkanAndroidPlatform.cpp:1006
static FString GetCompiledPSOCacheTopFolderPath()
Definition VulkanAndroidPlatform.cpp:1784
static void RecreateSwapChain(void *NewNativeWindow)
Definition VulkanAndroidPlatform.cpp:771
static bool HasUnifiedMemory()
Definition VulkanAndroidPlatform.h:192
static bool SupportsASTCTextureFormats()
Definition VulkanAndroidPlatform.h:131
static bool SupportsQuerySurfaceProperties()
Definition VulkanAndroidPlatform.h:136
static bool StartRemoteCompileServices(int NumServices)
Definition VulkanAndroidPlatform.cpp:1754
static TArray< TArray< ANSICHAR > > DebugVulkanInstanceLayers
Definition VulkanAndroidPlatform.h:285
static bool RequiresPresentLayoutFix()
Definition VulkanAndroidPlatform.h:187
static bool RequiresDepthStencilFullWrite()
Definition VulkanAndroidPlatform.h:209
static bool SupportParallelRenderingTasks()
Definition VulkanAndroidPlatform.h:198
static FAutoConsoleVariableRef CVarVulkanRequiresWaitingForFrameCompletionEvent
Definition VulkanAndroidPlatform.h:295
static int32 ASTCWorkaroundOption
Definition VulkanAndroidPlatform.h:289
static bool SupportsNullPixelShader()
Definition VulkanAndroidPlatform.h:206
static void InitDevice(FVulkanDevice *InDevice)
Definition VulkanAndroidPlatform.cpp:409
static bool RequiresMobileRenderer()
Definition VulkanAndroidPlatform.h:162
static VkPipelineCache PrecompilePSO(FVulkanDevice *Device, const TArrayView< uint8 > OptionalPSOCacheData, FGraphicsPipelineStateInitializer::EPSOPrecacheCompileType PSOCompileType, const VkGraphicsPipelineCreateInfo *PipelineInfo, const FGfxPipelineDesc *GfxEntry, const FVulkanRenderTargetLayout *RTLayout, TArrayView< uint32_t > VS, TArrayView< uint32_t > PS, size_t &AfterSize, FString *FailureMessageOUT=nullptr)
Definition VulkanAndroidPlatform.cpp:1794
static TArray< TArray< ANSICHAR > > DebugVulkanDeviceLayers
Definition VulkanAndroidPlatform.h:284
static int32 SuccessfulRefreshRateFrames
Definition VulkanAndroidPlatform.h:282
static bool RequiresSwapchainGeneralInitialLayout()
Definition VulkanAndroidPlatform.h:201
static bool LoadVulkanInstanceFunctions(VkInstance inInstance)
Definition VulkanAndroidPlatform.cpp:348
static bool AreRemoteCompileServicesActive()
Definition VulkanAndroidPlatform.cpp:1725
static ERHIFeatureLevel::Type GetFeatureLevel(ERHIFeatureLevel::Type RequestedFeatureLevel)
Definition VulkanAndroidPlatform.h:171
static void NotifyFoundDeviceLayersAndExtensions(VkPhysicalDevice PhysicalDevice, const TArray< const ANSICHAR * > &Layers, const TArray< const ANSICHAR * > &Extensions)
Definition VulkanAndroidPlatform.cpp:569
static bool RequiresWaitingForFrameCompletionEvent()
Definition VulkanAndroidPlatform.h:203
static bool bRequiresDepthStencilFullWrite
Definition VulkanAndroidPlatform.h:291
static TUniquePtr< struct FAndroidVulkanFramePacer > FramePacer
Definition VulkanAndroidPlatform.h:278
static void * VulkanLib
Definition VulkanAndroidPlatform.h:270
static TUniquePtr< class FGDTimingFramePacer > GDTimingFramePacer
Definition VulkanAndroidPlatform.h:275
static void SetupRequiresDepthStencilFullWriteWorkaround(const FVulkanDevice &Device)
Definition VulkanAndroidPlatform.cpp:874
static bool SupportsVolumeTextureRendering()
Definition VulkanAndroidPlatform.h:182
static void GetDeviceExtensions(FVulkanDevice *Device, FVulkanDeviceExtensionArray &OutExtensions)
Definition VulkanAndroidPlatform.cpp:504
static void OverridePlatformHandlers(bool bInit)
Definition VulkanAndroidPlatform.cpp:840
static bool bRequiresMergedRenderPassDepthStencilLayout
Definition VulkanAndroidPlatform.h:292
static bool RegisterGPUWork()
Definition VulkanAndroidPlatform.h:195
static bool SupportsR16UnormTextureFormat()
Definition VulkanAndroidPlatform.h:134
static void FreeVulkanLibrary()
Definition VulkanAndroidPlatform.cpp:386
static void OnGPUCrash(const TCHAR *Message)
Definition VulkanAndroidPlatform.cpp:2171
Definition VulkanDevice.h:279
Definition VulkanGenericPlatform.h:40
static ERHIFeatureLevel::Type GetFeatureLevel(ERHIFeatureLevel::Type RequestedFeatureLevel)
Definition VulkanGenericPlatform.cpp:39
Definition VulkanRenderTargetLayout.h:8
Definition ArrayView.h:139
Definition Array.h:670
Definition UniquePtr.h:107
Type
Definition RHIFeatureLevel.h:20
@ SM4_REMOVED
Definition RHIFeatureLevel.h:31
@ ES2_REMOVED
Definition RHIFeatureLevel.h:22
@ SM5
Definition RHIFeatureLevel.h:42
@ SM6
Definition RHIFeatureLevel.h:52
@ ES3_1
Definition RHIFeatureLevel.h:25
static CORE_API bool UseNewWindowBehavior()
Definition AndroidPlatformMisc.cpp:2526
static CORE_API bool ShouldUseDesktopVulkan()
Definition AndroidPlatformMisc.cpp:2360
Definition VulkanPipeline.h:127
Definition Optional.h:131
constexpr OptionalType & GetValue()
Definition Optional.h:443
constexpr bool IsSet() const
Definition Optional.h:69