UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MetalDynamicRHI.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MetalDynamicRHI.h: Public Metal RHI definitions..
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "IMetalDynamicRHI.h"
11
12// Metal RHI public headers.
13#include "MetalThirdParty.h"
14#include "MetalState.h"
15#include "MetalResources.h"
16#include "MetalRHIContext.h"
17#include "MetalViewport.h"
18#include "MetalSubmission.h"
19
20class FMetalDevice;
21
22#if METAL_RHI_RAYTRACING
24#endif // METAL_RHI_RAYTRACING
25
68
69struct FMetalFinalizedCommands final : public IRHIPlatformCommandList, public TArray<FMetalPayload*>
70{};
71
74{
75 static inline FMetalDynamicRHI* Singleton = nullptr;
76public:
77 enum class EQueueStatus
78 {
79 None = 0,
80
81 // Work was processed through the queue.
82 Processed = 1 << 0,
83
84 // The queue has further, unprocessed work.
85 Pending = 1 << 1
86 };
88
93
94 static inline FMetalDynamicRHI& Get() { return *Singleton; }
95
98
101
102 // FDynamicRHI interface.
103 virtual void Init();
104 virtual void Shutdown() {}
105 virtual const TCHAR* GetName() override { return TEXT("Metal"); }
106
107 virtual void RHIEndFrame_RenderThread(FRHICommandListImmediate& RHICmdList) final override;
108 virtual void RHIEndFrame(const FRHIEndFrameArgs& Args) final override;
109
110 virtual FRHIShaderLibraryRef RHICreateShaderLibrary(EShaderPlatform Platform, FString const& FilePath, FString const& Name) final override;
120#if PLATFORM_SUPPORTS_MESH_SHADERS
123#endif
128
129 [[nodiscard]] virtual FRHIBufferInitializer RHICreateBufferInitializer(FRHICommandListBase& RHICmdList, const FRHIBufferCreateDesc& CreateDesc) final override;
130
132
133 virtual void * RHILockBuffer(class FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer, uint32 Offset, uint32 SizeRHI, EResourceLockMode LockMode) final override;
134 virtual void RHIUnlockBuffer(class FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer) final override;
135 virtual void* LockBuffer_BottomOfPipe(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer, uint32 Offset, uint32 SizeRHI, EResourceLockMode LockMode) final override;
136 virtual void UnlockBuffer_BottomOfPipe(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer) final override;
137
138#if ENABLE_LOW_LEVEL_MEM_TRACKER || UE_MEMORY_TRACE_ENABLED
139 virtual void RHIUpdateAllocationTags(FRHICommandListBase& RHICmdList, FRHIBuffer* Buffer) final override;
140#endif
141
142 // SRV / UAV creation functions
143 virtual FShaderResourceViewRHIRef RHICreateShaderResourceView (class FRHICommandListBase& RHICmdList, FRHIViewableResource* Resource, FRHIViewDesc const& ViewDesc) final override;
144 virtual FUnorderedAccessViewRHIRef RHICreateUnorderedAccessView(class FRHICommandListBase& RHICmdList, FRHIViewableResource* Resource, FRHIViewDesc const& ViewDesc) final override;
145
146#if PLATFORM_SUPPORTS_BINDLESS_RENDERING
149#endif
150
151 virtual FRHICalcTextureSizeResult RHICalcTexturePlatformSize(FRHITextureDesc const& Desc, uint32 FirstMipIndex) final override;
153 virtual void RHIGetTextureMemoryStats(FTextureMemoryStats& OutStats) final override;
154 virtual bool RHIGetTextureMemoryVisualizeData(FColor* TextureData,int32 SizeX,int32 SizeY,int32 Pitch,int32 PixelSize) final override;
155 [[nodiscard]] virtual FRHITextureInitializer RHICreateTextureInitializer(FRHICommandListBase& RHICmdList, const FRHITextureCreateDesc& CreateDesc) final override;
157 virtual uint32 RHIComputeMemorySize(FRHITexture* TextureRHI) final override;
159
160 virtual FRHILockTextureResult RHILockTexture(FRHICommandListImmediate& RHICmdList, const FRHILockTextureArgs& Arguments) final override;
161 virtual void RHIUnlockTexture(FRHICommandListImmediate& RHICmdList, const FRHILockTextureArgs& Arguments) final override;
162
163 virtual void RHIUpdateTexture2D(FRHICommandListBase& RHICmdList, FRHITexture* Texture, uint32 MipIndex, const struct FUpdateTextureRegion2D& UpdateRegion, uint32 SourcePitch, const uint8* SourceData) final override;
164 virtual void RHIUpdateTexture3D(FRHICommandListBase& RHICmdList, FRHITexture* Texture, uint32 MipIndex, const struct FUpdateTextureRegion3D& UpdateRegion, uint32 SourceRowPitch, uint32 SourceDepthPitch, const uint8* SourceData) final override;
165 virtual void RHIBindDebugLabelName(FRHICommandListBase& RHICmdList, FRHITexture* Texture, const TCHAR* Name) final override;
167 virtual void RHIReadSurfaceData(FRHITexture* TextureRHI, FIntRect InRect, TArray<FLinearColor>& OutData, FReadSurfaceDataFlags InFlags) final override;
168#if PLATFORM_IOS
169 virtual void RHIReadSurfaceDataDirect(FRHITexture* TextureRHI, FIntRect Rect, TArray<FColor>& OutData) final override;
170#endif // PLATFORM_IOS
171 virtual void RHIMapStagingSurface(FRHITexture* Texture, FRHIGPUFence* Fence, void*& OutData, int32& OutWidth, int32& OutHeight, uint32 GPUIndex = 0) final override;
180 virtual FViewportRHIRef RHICreateViewport(void* WindowHandle, uint32 SizeX, uint32 SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) final override;
181 virtual void RHIResizeViewport(FRHIViewport* Viewport, uint32 SizeX, uint32 SizeY, bool bIsFullscreen) final override;
182 virtual void RHIResizeViewport(FRHIViewport* Viewport, uint32 SizeX, uint32 SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) final override;
183 virtual void RHITick(float DeltaTime) final override;
186 virtual void RHIGetSupportedResolution(uint32& Width, uint32& Height) final override;
191
194
197
199 virtual void RHIFinalizeContext(FRHIFinalizeContextArgs&& Args, TRHIPipelineArray<IRHIPlatformCommandList*>& Output) final override;
201
202 virtual void RHISubmitCommandLists(FRHISubmitCommandListsArgs&& Args) final override;
203
205
208
209 virtual void RHICreateTransition(FRHITransition* Transition, const FRHITransitionCreateInfo& CreateInfo) final override;
210 virtual void RHIReleaseTransition(FRHITransition* Transition) final override;
211
214
217 virtual void RHIUnlockStagingBuffer(FRHIStagingBuffer* StagingBuffer) final override;
218
220
221 virtual void RHIUpdateUniformBuffer(FRHICommandListBase& RHICmdList, FRHIUniformBuffer* UniformBufferRHI, const void* Contents) final override;
222
224
225#if METAL_RHI_RAYTRACING
228
233
235#endif // METAL_RHI_RAYTRACING
236
239
240
243
246
247 virtual void RHIBeginRenderQueryBatch_TopOfPipe(FRHICommandListBase& RHICmdList, ERenderQueryType QueryType) final override;
248 virtual void RHIEndRenderQueryBatch_TopOfPipe(FRHICommandListBase& RHICmdList, ERenderQueryType QueryType) final override;
249
250 virtual void RHIRunOnQueue(TFunction<void(MTL::CommandQueue*)>&& CodeToRun, bool bWaitForSubmission) final override;
251
253
254 template <typename ...Args>
255 void DeferredDelete(Args&&... InArgs)
256 {
258 FScopeLock Lock(&ObjectsToDeleteCS);
259 ObjectsToDelete.Emplace(Forward<Args>(InArgs)...);
260 }
261
263 void SubmitPayloads(TArray<FMetalPayload*>&& Payloads);
264
265 // Ensures all prior batched command lists have reached the MetalQueue
267
268 // Processes the interrupt queue on the calling thread, until the specified GraphEvent is signaled.
269 // If the GraphEvent is nullptr, processes the queue until no further progress is made.
270 void ProcessInterruptQueueUntil(FGraphEvent* GraphEvent);
271
273
274 // Called when the GPU has crashed. This function will not return.
276
277#if RHI_NEW_GPU_PROFILER
278 struct FMetalTimingArray : public TArray<TUniquePtr<FMetalTiming>, TInlineAllocator<GMetalMaxNumQueues>>
279 {
280 FMetalTiming* CreateNew(FMetalCommandQueue& Queue)
281 {
282 return Emplace_GetRef(MakeUnique<FMetalTiming>(Queue)).Get();
283 }
284 };
285
286 FMetalTimingArray CurrentTimingPerQueue;
287#endif
288
291
292 // Inserts a task graph task which is executed once all previously submitted GPU work has completed (across all queues, device and adapters).
295
298
301
302 // Enumerates all queues across all devices and active adapters
303 void ForEachQueue(TFunctionRef<void(FMetalCommandQueue&)> Callback);
304
305private:
306 FMetalDevice* Device;
307 FTextureMemoryStats MemoryStats;
308 FMetalRHICommandContext ImmediateContext;
309 TMap<uint32, FVertexDeclarationRHIRef> VertexDeclarationCache;
311
312 FCriticalSection ObjectsToDeleteCS;
314
315 TArray<FMetalCommandBuffer*> CmdBuffersPendingCompletion;
316
317#if METAL_USE_METAL_SHADER_CONVERTER
319#endif
320
321 friend class FMetalThread;
322 class FMetalThread* SubmissionThread = nullptr;
323 class FMetalThread* InterruptThread = nullptr;
324
325 TQueue<TArray<FMetalPayload*>*, EQueueMode::Mpsc> PendingPayloadsForSubmission;
326};
327
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define TEXT(x)
Definition Platform.h:1272
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
TSharedPtr< FMetalBuffer, ESPMode::ThreadSafe > FMetalBufferPtr
Definition MetalBuffer.h:14
EPixelFormat
Definition PixelFormat.h:16
ERHIAccess
Definition RHIAccess.h:11
bool IsRunningRHIInSeparateThread()
Definition RHICommandList.h:159
EShaderFrequency
Definition RHIDefinitions.h:202
EUniformBufferUsage
Definition RHIDefinitions.h:536
ECubeFace
Definition RHIDefinitions.h:525
EResourceLockMode
Definition RHIDefinitions.h:785
EUniformBufferValidation
Definition RHIDefinitions.h:546
ETextureCreateFlags
Definition RHIDefinitions.h:1091
ERenderQueryType
Definition RHIDefinitions.h:258
ERHIPipeline
Definition RHIPipeline.h:13
EShaderPlatform
Definition RHIShaderPlatform.h:11
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
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition TaskGraphInterfaces.h:471
Definition RHI.h:403
Definition RHIResources.h:4820
virtual void RHIUpdateResourceCollection(FRHICommandListBase &RHICmdList, FRHIResourceCollection *InResourceCollection, uint32 InStartIndex, TConstArrayView< FRHIResourceCollectionMember > InMemberUpdates)
Definition DynamicRHI.h:534
virtual FRayTracingShaderRHIRef RHICreateRayTracingShader(TArrayView< const uint8 > Code, const FSHAHash &Hash, EShaderFrequency ShaderFrequency)
Definition DynamicRHI.h:1022
virtual FShaderBindingTableRHIRef RHICreateShaderBindingTable(FRHICommandListBase &RHICmdList, const FRayTracingShaderBindingTableInitializer &Initializer)
Definition DynamicRHI.h:1034
virtual FRayTracingSceneRHIRef RHICreateRayTracingScene(FRayTracingSceneInitializer Initializer)
Definition DynamicRHI.h:1016
virtual FAmplificationShaderRHIRef RHICreateAmplificationShader(TArrayView< const uint8 > Code, const FSHAHash &Hash)
Definition DynamicRHI.h:282
virtual FRHIResourceCollectionRef RHICreateResourceCollection(FRHICommandListBase &RHICmdList, TConstArrayView< FRHIResourceCollectionMember > InMembers)
Definition DynamicRHI.h:529
virtual FRayTracingGeometryRHIRef RHICreateRayTracingGeometry(FRHICommandListBase &RHICmdList, const FRayTracingGeometryInitializer &Initializer)
Definition DynamicRHI.h:1010
virtual FRayTracingAccelerationStructureSize RHICalcRayTracingGeometrySize(const FRayTracingGeometryInitializer &Initializer)
Definition DynamicRHI.h:992
virtual FRayTracingAccelerationStructureSize RHICalcRayTracingSceneSize(const FRayTracingSceneInitializer &Initializer)
Definition DynamicRHI.h:986
virtual FMeshShaderRHIRef RHICreateMeshShader(TArrayView< const uint8 > Code, const FSHAHash &Hash)
Definition DynamicRHI.h:276
virtual FRayTracingPipelineStateRHIRef RHICreateRayTracingPipelineState(const FRayTracingPipelineStateInitializer &Initializer)
Definition DynamicRHI.h:1028
Definition Float16Color.h:13
Definition RHIResources.h:4572
Definition MetalCommandQueue.h:39
Definition MetalDevice.h:102
Definition MetalDynamicRHI.h:74
FCriticalSection InterruptCS
Definition MetalDynamicRHI.h:297
virtual uint64 RHIComputePrecachePSOHash(const FGraphicsPipelineStateInitializer &Initializer) final override
Definition MetalDynamicRHI.cpp:182
void DeferredDelete(Args &&... InArgs)
Definition MetalDynamicRHI.h:255
virtual bool RHIGetAvailableResolutions(FScreenResolutionArray &Resolutions, bool bIgnoreRefreshRate) final override
Definition MetalRHI.cpp:1510
virtual uint64 RHIGetMinimumAlignmentForBufferBackedSRV(EPixelFormat Format) final override
Definition MetalRHI.cpp:1309
virtual void RHIUnmapStagingSurface(FRHITexture *Texture, uint32 GPUIndex=0) final override
Definition MetalRenderTarget.cpp:337
FGraphEventRef EopTask
Definition MetalDynamicRHI.h:294
~FMetalDynamicRHI()
Definition MetalRHI.cpp:1279
virtual FSamplerStateRHIRef RHICreateSamplerState(const FSamplerStateInitializerRHI &Initializer) final override
Definition MetalState.cpp:539
void ProcessPendingCommandBuffers()
Definition MetalSubmission.cpp:719
virtual class IRHICommandContext *METALRHI_API RHIGetDefaultContext() final override
Definition MetalRHI.cpp:1669
virtual void RHIReadSurfaceFloatData(FRHITexture *Texture, FIntRect Rect, TArray< FFloat16Color > &OutData, ECubeFace CubeFace, int32 ArrayIndex, int32 MipIndex) final override
Definition MetalRenderTarget.cpp:345
virtual void *METALRHI_API RHIGetNativeGraphicsQueue() final override
Definition MetalRHI.cpp:1605
virtual void *METALRHI_API RHIGetNativeComputeQueue() final override
Definition MetalRHI.cpp:1610
FCriticalSection SubmissionCS
Definition MetalDynamicRHI.h:296
virtual void RHIUpdateTexture3D(FRHICommandListBase &RHICmdList, FRHITexture *Texture, uint32 MipIndex, const struct FUpdateTextureRegion3D &UpdateRegion, uint32 SourceRowPitch, uint32 SourceDepthPitch, const uint8 *SourceData) final override
Definition MetalTexture.cpp:1921
virtual FRHITextureInitializer RHICreateTextureInitializer(FRHICommandListBase &RHICmdList, const FRHITextureCreateDesc &CreateDesc) final override
Definition MetalTexture.cpp:1519
virtual void RHIReplaceResources(FRHICommandListBase &RHICmdList, TArray< FRHIResourceReplaceInfo > &&ReplaceInfos) final override
Definition MetalRHI.cpp:1831
virtual void RHIWriteGPUFence_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIGPUFence *FenceRHI) final override
Definition MetalUAV.cpp:791
virtual void RHIAdvanceFrameForGetViewportBackBuffer(FRHIViewport *Viewport, bool bPresent) final override
Definition MetalViewport.cpp:949
void ProcessInterruptQueueOnGPUCrash()
virtual FUnorderedAccessViewRHIRef RHICreateUnorderedAccessView(class FRHICommandListBase &RHICmdList, FRHIViewableResource *Resource, FRHIViewDesc const &ViewDesc) final override
Definition MetalUAV.cpp:609
EQueueStatus
Definition MetalDynamicRHI.h:78
virtual bool RHIMatchPrecachePSOInitializers(const FGraphicsPipelineStateInitializer &LHS, const FGraphicsPipelineStateInitializer &RHS) final override
Definition MetalDynamicRHI.cpp:216
virtual void RHIEndUpdateTexture3D(FRHICommandListBase &RHICmdList, FUpdateTexture3DData &UpdateData) final override
Definition MetalTexture.cpp:1912
virtual void RHIRead3DSurfaceFloatData(FRHITexture *Texture, FIntRect Rect, FIntPoint ZMinMax, TArray< FFloat16Color > &OutData) final override
Definition MetalRenderTarget.cpp:429
virtual FRHIBufferInitializer RHICreateBufferInitializer(FRHICommandListBase &RHICmdList, const FRHIBufferCreateDesc &CreateDesc) final override
Definition MetalRHIBuffer.cpp:583
virtual void RHIUnlockStagingBuffer(FRHIStagingBuffer *StagingBuffer) final override
Definition MetalDynamicRHI.cpp:136
virtual void RHIFlushResources() final override
Definition MetalRHI.cpp:1594
virtual void RHIUpdateUniformBuffer(FRHICommandListBase &RHICmdList, FRHIUniformBuffer *UniformBufferRHI, const void *Contents) final override
Definition MetalUniformBufferCommands.cpp:13
virtual void Init()
Definition MetalRHI.cpp:1314
virtual FTextureReferenceRHIRef RHICreateTextureReference(FRHICommandListBase &RHICmdList, FRHITexture *InReferencedTexture) final override
Definition MetalTexture.cpp:2132
virtual void RHIEndRenderQueryBatch_TopOfPipe(FRHICommandListBase &RHICmdList, ERenderQueryType QueryType) final override
Definition MetalRHIRenderQuery.cpp:261
virtual FViewportRHIRef RHICreateViewport(void *WindowHandle, uint32 SizeX, uint32 SizeY, bool bIsFullscreen, EPixelFormat PreferredPixelFormat) final override
Definition MetalViewport.cpp:846
virtual void RHIEndFrame(const FRHIEndFrameArgs &Args) final override
Definition MetalRHI.cpp:1355
virtual FTextureRHIRef AsyncReallocateTexture2D_RenderThread(class FRHICommandListImmediate &RHICmdList, FRHITexture *Texture2D, int32 NewMipCount, int32 NewSizeX, int32 NewSizeY, FThreadSafeCounter *RequestStatus) final override
Definition MetalTexture.cpp:1567
void ForEachQueue(TFunctionRef< void(FMetalCommandQueue &)> Callback)
Definition MetalRHI.cpp:1904
virtual void RHIUpdateTextureReference(FRHICommandListBase &RHICmdList, FRHITextureReference *TextureRef, FRHITexture *NewTexture) final override
Definition MetalTexture.cpp:2158
virtual void RHIBindDebugLabelName(FRHICommandListBase &RHICmdList, FRHITexture *Texture, const TCHAR *Name) final override
Definition MetalTexture.cpp:1940
virtual FRenderQueryRHIRef RHICreateRenderQuery(ERenderQueryType QueryType) final override
Definition MetalDynamicRHI.cpp:166
void InitializeSubmissionPipe()
Definition MetalSubmission.cpp:93
virtual FBoundShaderStateRHIRef RHICreateBoundShaderState(FRHIVertexDeclaration *VertexDeclaration, FRHIVertexShader *VertexShader, FRHIPixelShader *PixelShader, FRHIGeometryShader *GeometryShader) final override
Definition MetalDynamicRHI_Shaders.cpp:242
virtual void RHIUnlockBuffer(class FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer) final override
Definition MetalRHIBuffer.cpp:676
virtual FPixelShaderRHIRef RHICreatePixelShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition MetalDynamicRHI_Shaders.cpp:28
virtual FStagingBufferRHIRef RHICreateStagingBuffer() final override
Definition MetalDynamicRHI.cpp:117
virtual FVertexDeclarationRHIRef RHICreateVertexDeclaration(const FVertexDeclarationElementList &Elements) final override
Definition MetalDynamicRHI.cpp:20
virtual FUpdateTexture3DData RHIBeginUpdateTexture3D(FRHICommandListBase &RHICmdList, FRHITexture *Texture, uint32 MipIndex, const struct FUpdateTextureRegion3D &UpdateRegion) final override
Definition MetalTexture.cpp:1900
virtual void RHIReadSurfaceData(FRHITexture *Texture, FIntRect Rect, TArray< FColor > &OutData, FReadSurfaceDataFlags InFlags) final override
Definition MetalRenderTarget.cpp:127
virtual FShaderResourceViewRHIRef RHICreateShaderResourceView(class FRHICommandListBase &RHICmdList, FRHIViewableResource *Resource, FRHIViewDesc const &ViewDesc) final override
Definition MetalUAV.cpp:604
virtual FRasterizerStateRHIRef RHICreateRasterizerState(const FRasterizerStateInitializerRHI &Initializer) final override
Definition MetalState.cpp:545
void SubmitPayloads(TArray< FMetalPayload * > &&Payloads)
Definition MetalSubmission.cpp:287
virtual void RHIGetTextureMemoryStats(FTextureMemoryStats &OutStats) final override
Definition MetalTexture.cpp:1344
virtual FBlendStateRHIRef RHICreateBlendState(const FBlendStateInitializerRHI &Initializer) final override
Definition MetalState.cpp:558
virtual IRHIComputeContext * RHIGetCommandContext(ERHIPipeline Pipeline, FRHIGPUMask GPUMask) final override
Definition MetalRHI.cpp:1674
virtual void RHIReleaseTransition(FRHITransition *Transition) final override
Definition MetalDynamicRHI.cpp:154
virtual uint16 RHIGetPlatformTextureMaxSampleCount() override
Definition MetalRHI.cpp:1620
virtual void * RHILockBuffer(class FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer, uint32 Offset, uint32 SizeRHI, EResourceLockMode LockMode) final override
Definition MetalRHIBuffer.cpp:631
virtual void Shutdown()
Definition MetalDynamicRHI.h:104
void FlushBatchedPayloads(FMetalCommandQueue::FPayloadArray &PayloadsToHandDown)
Definition MetalSubmission.cpp:512
void ShutdownSubmissionPipe()
Definition MetalSubmission.cpp:140
virtual FUniformBufferRHIRef RHICreateUniformBuffer(const void *Contents, const FRHIUniformBufferLayout *Layout, EUniformBufferUsage Usage, EUniformBufferValidation Validation) final override
Definition MetalUniformBufferCommands.cpp:8
virtual FTextureRHIRef RHIAsyncReallocateTexture2D(FRHITexture *Texture2D, int32 NewMipCount, int32 NewSizeX, int32 NewSizeY, FThreadSafeCounter *RequestStatus) final override
Definition MetalTexture.cpp:1572
virtual FRHIShaderLibraryRef RHICreateShaderLibrary_RenderThread(class FRHICommandListImmediate &RHICmdList, EShaderPlatform Platform, FString FilePath, FString Name) final override
Definition MetalDynamicRHI_Shaders.cpp:252
virtual FGraphicsPipelineStateRHIRef RHICreateGraphicsPipelineState(const FGraphicsPipelineStateInitializer &Initializer) final override
Definition MetalDynamicRHI.cpp:43
virtual void *METALRHI_API RHIGetNativeDevice() final override
Definition MetalRHI.cpp:1600
virtual void RHIUpdateTexture2D(FRHICommandListBase &RHICmdList, FRHITexture *Texture, uint32 MipIndex, const struct FUpdateTextureRegion2D &UpdateRegion, uint32 SourcePitch, const uint8 *SourceData) final override
Definition MetalTexture.cpp:1796
virtual void RHIUnlockTexture(FRHICommandListImmediate &RHICmdList, const FRHILockTextureArgs &Arguments) final override
Definition MetalTexture.cpp:1653
void EnqueueEndOfPipeTask(TUniqueFunction< void()> TaskFunc, TUniqueFunction< void(FMetalPayload &)> ModifyPayloadCallback={})
Definition MetalRHI.cpp:1796
FProcessResult ProcessSubmissionQueue()
Definition MetalSubmission.cpp:323
virtual void * LockBuffer_BottomOfPipe(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer, uint32 Offset, uint32 SizeRHI, EResourceLockMode LockMode) final override
Definition MetalRHIBuffer.cpp:732
virtual void RHICreateTransition(FRHITransition *Transition, const FRHITransitionCreateInfo &CreateInfo) final override
Definition MetalDynamicRHI.cpp:148
virtual void RHIGetSupportedResolution(uint32 &Width, uint32 &Height) final override
Definition MetalRHI.cpp:1495
virtual TRefCountPtr< FRHIComputePipelineState > RHICreateComputePipelineState(const FComputePipelineStateInitializer &Initializer) final override
Definition MetalDynamicRHI.cpp:105
virtual void RHISubmitCommandLists(FRHISubmitCommandListsArgs &&Args) final override
Definition MetalSubmission.cpp:218
virtual void RHIFinalizeContext(FRHIFinalizeContextArgs &&Args, TRHIPipelineArray< IRHIPlatformCommandList * > &Output) final override
Definition MetalSubmission.cpp:168
virtual FTextureRHIRef RHIGetViewportBackBuffer(FRHIViewport *Viewport) final override
Definition MetalViewport.cpp:941
virtual FGPUFenceRHIRef RHICreateGPUFence(const FName &Name) final override
Definition MetalUAV.cpp:814
static FMetalDynamicRHI & Get()
Definition MetalDynamicRHI.h:94
virtual void RHIRunOnQueue(TFunction< void(MTL::CommandQueue *)> &&CodeToRun, bool bWaitForSubmission) final override
Definition MetalDynamicRHI.cpp:271
virtual void RHIResizeViewport(FRHIViewport *Viewport, uint32 SizeX, uint32 SizeY, bool bIsFullscreen) final override
Definition MetalViewport.cpp:861
virtual void * RHILockStagingBuffer(FRHIStagingBuffer *StagingBuffer, FRHIGPUFence *Fence, uint32 Offset, uint32 SizeRHI) final override
Definition MetalDynamicRHI.cpp:122
virtual FTextureRHIRef RHICreateTexture2DFromCVMetalTexture(EPixelFormat Format, ETextureCreateFlags TexCreateFlags, const FClearValueBinding &ClearValueBinding, CVMetalTextureRef Resource) final override
Definition MetalTexture.cpp:801
virtual void RHIEndFrame_RenderThread(FRHICommandListImmediate &RHICmdList) final override
Definition MetalRHI.cpp:1320
virtual FRHILockTextureResult RHILockTexture(FRHICommandListImmediate &RHICmdList, const FRHILockTextureArgs &Arguments) final override
Definition MetalTexture.cpp:1638
virtual FDepthStencilStateRHIRef RHICreateDepthStencilState(const FDepthStencilStateInitializerRHI &Initializer) final override
Definition MetalState.cpp:551
virtual bool RHIGetRenderQueryResult(FRHIRenderQuery *RenderQuery, uint64 &OutResult, bool bWait, uint32 GPUIndex=INDEX_NONE) final override
Definition MetalDynamicRHI.cpp:174
virtual void RHIBeginRenderQueryBatch_TopOfPipe(FRHICommandListBase &RHICmdList, ERenderQueryType QueryType) final override
Definition MetalRHIRenderQuery.cpp:252
virtual bool RHIGetTextureMemoryVisualizeData(FColor *TextureData, int32 SizeX, int32 SizeY, int32 Pitch, int32 PixelSize) final override
Definition MetalTexture.cpp:1359
virtual void RHIBeginRenderQuery_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIRenderQuery *RenderQuery) override
Definition MetalRHIRenderQuery.cpp:219
virtual const TCHAR * GetName() override
Definition MetalDynamicRHI.h:105
virtual FComputeShaderRHIRef RHICreateComputeShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition MetalDynamicRHI_Shaders.cpp:47
virtual FTextureRHIRef RHIAsyncCreateTexture2D(uint32 SizeX, uint32 SizeY, uint8 Format, uint32 NumMips, ETextureCreateFlags Flags, ERHIAccess InResourceState, void **InitialMipData, uint32 NumInitialMips, const TCHAR *DebugName, FGraphEventRef &OutCompletionEvent) final override
Definition MetalTexture.cpp:1561
virtual void *METALRHI_API RHIGetNativeInstance() final override
Definition MetalRHI.cpp:1615
virtual FRHIShaderLibraryRef RHICreateShaderLibrary(EShaderPlatform Platform, FString const &FilePath, FString const &Name) final override
Definition MetalDynamicRHI_Shaders.cpp:79
virtual void RHIEndRenderQuery_TopOfPipe(FRHICommandListBase &RHICmdList, FRHIRenderQuery *RenderQuery) override
Definition MetalRHIRenderQuery.cpp:227
virtual FRHICalcTextureSizeResult RHICalcTexturePlatformSize(FRHITextureDesc const &Desc, uint32 FirstMipIndex) final override
Definition MetalRHI.cpp:1301
virtual void RHIProcessDeleteQueue() final override
Definition MetalRHI.cpp:1712
virtual void RHIMapStagingSurface(FRHITexture *Texture, FRHIGPUFence *Fence, void *&OutData, int32 &OutWidth, int32 &OutHeight, uint32 GPUIndex=0) final override
Definition MetalRenderTarget.cpp:316
virtual void UnlockBuffer_BottomOfPipe(FRHICommandListBase &RHICmdList, FRHIBuffer *Buffer) final override
Definition MetalRHIBuffer.cpp:742
FProcessResult ProcessInterruptQueue()
Definition MetalSubmission.cpp:773
void ProcessInterruptQueueUntil(FGraphEvent *GraphEvent)
Definition MetalSubmission.cpp:676
virtual void RHITick(float DeltaTime) final override
Definition MetalViewport.cpp:882
virtual FVertexShaderRHIRef RHICreateVertexShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition MetalDynamicRHI_Shaders.cpp:20
void SubmitCommands(TConstArrayView< struct FMetalFinalizedCommands * > Commands)
Definition MetalSubmission.cpp:223
virtual IRHIUploadContext * RHIGetUploadContext() final override
Definition MetalSubmission.cpp:157
virtual FGeometryShaderRHIRef RHICreateGeometryShader(TArrayView< const uint8 > Code, const FSHAHash &Hash) final override
Definition MetalDynamicRHI_Shaders.cpp:36
virtual void RHIBlockUntilGPUIdle() final override
Definition MetalRHI.cpp:1640
virtual IRHIComputeContext * RHIGetParallelCommandContext(FRHIParallelRenderPassInfo const &ParallelRenderPass, FRHIGPUMask GPUMask) final override
Definition MetalRHI.cpp:1689
virtual IRHIPlatformCommandList * RHIFinalizeParallelContext(IRHIComputeContext *Context) final override
Definition MetalSubmission.cpp:204
virtual uint32 RHIComputeMemorySize(FRHITexture *TextureRHI) final override
Definition MetalTexture.cpp:1365
FRIEND_ENUM_CLASS_FLAGS(EQueueStatus)
Definition MetalFence.h:12
Definition MetalRHIContext.h:48
Definition MetalSubmission.cpp:32
Definition NameTypes.h:617
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHIResources.h:2387
Definition RHIResources.h:978
Definition RHIResources.h:972
Definition RHIResources.h:2444
Definition RHIResourceCollection.h:46
Definition RHIResources.h:3981
Definition RHITextureReference.h:8
Definition RHIResources.h:2153
Definition RHIResources.h:1232
Definition RHIResources.h:725
Definition RHIResources.h:954
Definition RHIResources.h:1265
Definition RHIResources.h:2515
Definition RHIResources.h:5023
Definition RHITypes.h:16
Definition SecureHash.h:226
Definition ScopeLock.h:141
Definition ThreadSafeCounter.h:14
Definition RHIContext.h:693
Definition RHIContext.h:257
Definition RHIContext.h:234
Definition RHIContext.h:573
Definition ArrayView.h:139
Definition Array.h:670
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition LockFreeList.h:904
Definition UnrealString.h.inl:34
Definition Queue.h:48
Definition RHIPipeline.h:55
Definition FunctionFwd.h:19
Definition TVariant.h:48
Type
Definition RHIFeatureLevel.h:20
Definition RHIResources.h:246
Definition Color.h:486
Definition MetalDynamicRHI.h:27
FMetalDeferredDeleteObject(FMetalFence *InFence)
Definition MetalDynamicRHI.h:56
FMetalDeferredDeleteObject(MTLTexturePtr InTexture)
Definition MetalDynamicRHI.h:45
TVariant< FMetalBufferPtr, MTLTexturePtr, NS::Object *, FMetalFence *, TUniqueFunction< void()> * > TObjectStorage
Definition MetalDynamicRHI.h:38
FMetalDeferredDeleteObject(TUniqueFunction< void()> &&Func)
Definition MetalDynamicRHI.h:64
FMetalDeferredDeleteObject(FMetalBufferPtr InBuffer)
Definition MetalDynamicRHI.h:42
TObjectStorage Storage
Definition MetalDynamicRHI.h:40
FMetalDeferredDeleteObject(NS::Object *InObject)
Definition MetalDynamicRHI.h:48
Definition MetalDynamicRHI.h:90
EQueueStatus Status
Definition MetalDynamicRHI.h:91
Definition MetalDynamicRHI.h:70
Definition MetalSubmission.h:155
Definition RHIResources.h:1417
Definition RHIBufferInitializer.h:12
Definition DynamicRHI.h:120
Definition RHIDefinitions.h:1401
Definition MultiGPU.h:33
Definition DynamicRHI.h:149
Definition DynamicRHI.h:198
Definition RHIResources.h:5548
Definition RHIResources.h:1938
Definition RHIResources.h:1689
Definition RHITextureInitializer.h:50
Definition RHITransition.h:382
Definition RHITransition.h:475
Definition RHIResources.h:1150
Definition RHIResources.h:2648
Definition RHI.h:278
Definition RHIResources.h:3693
Definition RHIResources.h:3496
Definition RHIResources.h:3669
Definition RHIResources.h:3635
Definition RHI.h:232
Definition RHIStats.h:12
Definition RHICommandList.h:220
Definition RHITypes.h:127
Definition RHITypes.h:155
Definition IMetalDynamicRHI.h:9
Definition LinuxPlatformSplash.cpp:43
Definition TVariant.h:13
Definition IntPoint.h:25