UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MetalRHIRenderQuery.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 MetalRHIRenderQuery.h: Metal RHI Render Query Definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "MetalRHIPrivate.h"
10#include "RHIResources.h"
11#include "MetalSubmission.h"
12
13//------------------------------------------------------------------------------
14
15#pragma mark - Metal RHI Private Query Buffer Forward Declarations
16
17
21class FMetalDevice;
22class FMetalBuffer;
24
25//------------------------------------------------------------------------------
26
27#pragma mark - Metal RHI Private Query Buffer Resource Class -
28
29
42
44
45//------------------------------------------------------------------------------
46
47#pragma mark - Metal RHI Private Query Buffer Pool Class -
48
49
78
79
80//------------------------------------------------------------------------------
81
82#pragma mark - Metal RHI Private Query Result Class -
83
84
86{
87public:
88 FMetalQueryResult() = default;
89 ~FMetalQueryResult() = default;
90
91 void Reset();
93
96 bool bCompleted = false;
97 bool bBatchFence = false;
98};
99
100
101//------------------------------------------------------------------------------
102
103#pragma mark - Metal RHI Render Query Class -
104
106{
107 friend class FMetalDynamicRHI;
108public:
110 virtual ~FMetalRHIRenderQuery();
111
112 void Begin_TopOfPipe();
113 void End_TopOfPipe();
114
119
124
129
133 bool GetResult(uint64& OutNumPixels, bool bWait, uint32 GPUIndex);
134
135private:
136 FMetalDevice& Device;
137
138 // The type of query
139 ERenderQueryType Type;
140
141 // Query buffer allocation details as the buffer is already set on the command-encoder
143
144 // Query result.
145 volatile uint64 Result;
146
147 // Result availability - if not set the first call to acquire it will read the buffer & cache
148 std::atomic<bool> bAvailable;
149
150 // Signaled when the result is available. Nullptr if the query has never been used.
151 FMetalSyncPointRef SyncPoint;
152
153 // Temporary
154 FMetalCommandBuffer* CommandBuffer = nullptr;
155};
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
TSharedPtr< FMetalBuffer, ESPMode::ThreadSafe > FMetalBufferPtr
Definition MetalRHIRenderQuery.h:23
TRefCountPtr< FMetalQueryBuffer > FMetalQueryBufferRef
Definition MetalRHIRenderQuery.h:43
ERenderQueryType
Definition RHIDefinitions.h:258
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MetalResources.h:54
Definition MetalCommandBuffer.h:17
Definition MetalDevice.h:102
Definition MetalDynamicRHI.h:74
Definition MetalRHIRenderQuery.h:51
void ReleaseCurrentQueryBuffer()
Definition MetalRHIRenderQuery.cpp:172
FMetalQueryBufferRef GetCurrentQueryBuffer()
Definition MetalRHIRenderQuery.cpp:167
uint32_t BufferSize
Definition MetalRHIRenderQuery.h:72
void ReleaseQueryBuffer(FMetalBufferPtr Buffer)
Definition MetalRHIRenderQuery.cpp:184
@ EQueryBufferAlignment
Definition MetalRHIRenderQuery.h:55
@ EQueryResultMaxSize
Definition MetalRHIRenderQuery.h:56
void Allocate(FMetalQueryResult &NewQuery)
Definition MetalRHIRenderQuery.cpp:93
TArray< FMetalBufferPtr > Buffers
Definition MetalRHIRenderQuery.h:75
~FMetalQueryBufferPool()
Definition MetalRHIRenderQuery.cpp:88
FMetalQueryBufferPool()=delete
FMetalQueryBufferRef AcquireQueryBuffer(uint32_t NumOcclusionQueries)
Definition MetalRHIRenderQuery.cpp:109
FMetalQueryBufferRef CurrentBuffer
Definition MetalRHIRenderQuery.h:74
FMetalDevice & Device
Definition MetalRHIRenderQuery.h:76
Definition MetalRHIRenderQuery.h:31
uint64 GetResult(uint32 Offset)
Definition MetalRHIRenderQuery.cpp:53
virtual ~FMetalQueryBuffer()
Definition MetalRHIRenderQuery.cpp:39
FMetalQueryBufferPool * Pool
Definition MetalRHIRenderQuery.h:38
uint32 WriteOffset
Definition MetalRHIRenderQuery.h:40
FMetalBufferPtr Buffer
Definition MetalRHIRenderQuery.h:39
Definition MetalRHIRenderQuery.h:86
FMetalQueryBufferRef SourceBuffer
Definition MetalRHIRenderQuery.h:94
uint32 Offset
Definition MetalRHIRenderQuery.h:95
bool bBatchFence
Definition MetalRHIRenderQuery.h:97
bool bCompleted
Definition MetalRHIRenderQuery.h:96
void Reset()
Definition MetalRHIRenderQuery.cpp:201
uint64 GetResult()
Definition MetalRHIRenderQuery.cpp:206
FMetalQueryResult()=default
~FMetalQueryResult()=default
Definition MetalRHIContext.h:48
Definition MetalRHIRenderQuery.h:106
void End_TopOfPipe()
Definition MetalRHIRenderQuery.cpp:319
bool GetResult(uint64 &OutNumPixels, bool bWait, uint32 GPUIndex)
Definition MetalRHIRenderQuery.cpp:414
void SampleOcclusionResult()
Definition MetalRHIRenderQuery.cpp:405
virtual ~FMetalRHIRenderQuery()
Definition MetalRHIRenderQuery.cpp:308
void Begin_TopOfPipe()
Definition MetalRHIRenderQuery.cpp:313
Definition RHIResources.h:2444
Definition RHIResources.h:54
Definition Array.h:670
Definition RefCounting.h:454
Definition SharedPointer.h:692