UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MetalBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3
4#pragma once
5
6#include "MetalRHIPrivate.h"
7#include "MetalResources.h"
9#include "ResourcePool.h"
10
12class FMetalDevice;
13class FMetalBuffer;
15
35
37{
38public:
39 virtual void ReleaseBuffer(FMetalBuffer* Buffer) = 0;
40};
41
43{
44 friend class FMetalResourceHeap;
45
46public:
47 FMetalSubBufferHeap(FMetalDevice& MetalDevice, NS::UInteger Size, NS::UInteger Alignment, MTL::ResourceOptions, FCriticalSection& PoolMutex);
49
50 NS::String* GetLabel() const;
51 MTL::Device* GetDevice() const;
52 MTL::StorageMode GetStorageMode() const;
53 MTL::CPUCacheMode GetCpuCacheMode() const;
54 NS::UInteger GetSize() const;
55 NS::UInteger GetUsedSize() const;
56 NS::UInteger MaxAvailableSize() const;
58 bool CanAllocateSize(NS::UInteger Size) const;
59
60 void SetLabel(const NS::String* label);
61
62 FMetalBufferPtr NewBuffer(NS::UInteger length);
63 MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state);
64 void FreeRange(NS::Range const& Range);
65
66 virtual void ReleaseBuffer(FMetalBuffer* Buffer) override;
67
68 void SetOwner(NS::Range const& Range, FMetalRHIBuffer* Owner, bool bIsSwap);
69
70private:
71 struct Allocation
72 {
73 Allocation() : Range(0,0) {}
74
75 NS::Range Range;
76 MTL::Buffer* Resource;
77 FMetalRHIBuffer* Owner;
78 };
79
80 FMetalDevice& Device;
81 FCriticalSection& PoolMutex;
82 int64 volatile OutstandingAllocs;
83 NS::UInteger MinAlign;
84 NS::UInteger UsedSize;
85 MTL::Buffer* ParentBuffer;
86 MTLHeapPtr ParentHeap;
87 TArray<NS::Range> FreeRanges;
88 TArray<Allocation> AllocRanges;
89};
90
92{
93public:
94 FMetalSubBufferLinear(FMetalDevice& MetalDevice, NS::UInteger Size, NS::UInteger Alignment, MTL::ResourceOptions, FCriticalSection& PoolMutex);
96
97 NS::String* GetLabel() const;
98 MTL::Device* GetDevice() const;
99 MTL::StorageMode GetStorageMode() const;
100 MTL::CPUCacheMode GetCpuCacheMode() const;
101 NS::UInteger GetSize() const;
102 NS::UInteger GetUsedSize() const;
103 bool CanAllocateSize(NS::UInteger Size) const;
104
105 void SetLabel(const NS::String* label);
106
107 FMetalBufferPtr NewBuffer(NS::UInteger length);
108 MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state);
109 void FreeRange(NS::Range const& Range);
110
111 virtual void ReleaseBuffer(FMetalBuffer* Buffer) override;
112
113private:
114 FMetalDevice& Device;
115 FCriticalSection& PoolMutex;
116 NS::UInteger MinAlign;
117 NS::UInteger WriteHead;
118 NS::UInteger UsedSize;
119 NS::UInteger FreedSize;
120 MTL::Buffer* ParentBuffer;
121};
122
124{
125public:
126 FMetalSubBufferMagazine(FMetalDevice& MetalDevice, NS::UInteger Size, NS::UInteger ChunkSize, MTL::ResourceOptions);
128
129 NS::String* GetLabel() const;
130 MTL::Device* GetDevice() const;
131 MTL::StorageMode GetStorageMode() const;
132 MTL::CPUCacheMode GetCpuCacheMode() const;
133 NS::UInteger GetSize() const;
134 NS::UInteger GetUsedSize() const;
135 NS::UInteger GetFreeSize() const;
137 bool CanAllocateSize(NS::UInteger Size) const;
138
139 void SetLabel(const NS::String* label);
140 void FreeRange(NS::Range const& Range);
141
142 virtual void ReleaseBuffer(FMetalBuffer* Buffer) override;
143
145 MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state);
146
147private:
148 FMetalDevice& Device;
149 NS::UInteger MinAlign;
150 NS::UInteger BlockSize;
151 int64 volatile OutstandingAllocs;
152 int64 volatile UsedSize;
153 MTL::Buffer* ParentBuffer;
154 MTLHeapPtr ParentHeap;
155 TArray<int8> Blocks;
156};
157
159{
162
163 void SetLastRead(uint64 Read) { FPlatformAtomics::InterlockedExchange((int64*)&LastRead, Read); }
164
166 {
167 return Buffer;
168 }
169
170 MTL::Buffer* GetMTLBuffer()
171 {
172 return Buffer ? Buffer->GetMTLBuffer() : nullptr;
173 }
174
178};
179
182
184{
185public:
186 FMetalSubBufferRing(FMetalDevice& MetalDevice, NS::UInteger Size, NS::UInteger Alignment, MTL::ResourceOptions Options);
188
189 MTL::Device* GetDevice() const;
190 MTL::StorageMode GetStorageMode() const;
191 MTL::CPUCacheMode GetCpuCacheMode() const;
192 NS::UInteger GetSize() const;
193
194 FMetalBufferPtr NewBuffer(NS::UInteger Size, uint32 Alignment);
195 virtual void ReleaseBuffer(FMetalBuffer* Buffer) override
196 {};
197
199 void Shrink();
200
202 void Commit(FMetalCommandBuffer* CmdBuffer);
203
204private:
206 void Submit();
207
208 FMetalDevice& Device;
209
210 NS::UInteger FrameSize[10];
211 NS::UInteger LastFrameChange;
212 NS::UInteger InitialSize;
213 NS::UInteger MinAlign;
214 NS::UInteger CommitHead;
215 NS::UInteger SubmitHead;
216 NS::UInteger WriteHead;
217 NS::UInteger BufferSize;
218 MTL::ResourceOptions Options;
219 MTL::StorageMode Storage;
221 TArray<NS::Range> AllocatedRanges;
222};
223
225{
226 enum BucketSizes
227 {
228 // These sizes are required for ring-buffers and esp. Managed Memory which is a Mac-only feature
229 BucketSize256,
230 BucketSize512,
231 BucketSize1k,
232 BucketSize2k,
233 BucketSize4k,
234 BucketSize8k,
235 BucketSize16k,
236 BucketSize32k,
237 BucketSize64k,
238 BucketSize128k,
239 BucketSize256k,
240 BucketSize512k,
241 BucketSize1Mb,
242 BucketSize2Mb,
243 BucketSize4Mb,
244 // These sizes are the ones typically used by buffer allocations
245 BucketSize8Mb,
246 BucketSize12Mb,
247 BucketSize16Mb,
248 BucketSize24Mb,
249 BucketSize32Mb,
250 NumBucketSizes
251 };
252public:
255 enum
256 {
257 NumResourceStorageModes = 4, /* Corresponds to MTLStorageMode types: managed, shared, private, memoryless */
259 NumPoolBucketSizes = NumBucketSizes,
263 };
264
270
276
281 MTL::Buffer* CreateResource(FRHICommandListBase& RHICmdList, CreationArguments Args);
282
287 CreationArguments GetCreationArguments(MTL::Buffer* Resource);
288
292 void FreeResource(MTL::Buffer* Resource);
293
294private:
296 static uint32 BucketSizes[NumPoolBucketSizes];
297 static TMap<MTL::Buffer*, CreationArguments> CreationArgumentMap;
298};
299
301class FMetalBufferPool : public TResourcePool<MTL::Buffer*, FMetalBufferPoolPolicyData, FMetalBufferPoolPolicyData::CreationArguments>
302{
303public:
305 virtual ~FMetalBufferPool();
306};
307
309{
310 enum
311 {
312 PurgeAfterNumFrames = 2, /* Textures must be reused fairly rapidly but after this number of frames we reclaim the memory, even though the object persists */
313 CullAfterNumFrames = 3, /* Textures must be reused fairly rapidly or we bin them as they are much larger than buffers */
314 };
315public:
317 {
319 {
320 uint32 Hash = GetTypeHash((uint64)Other.textureType);
321 Hash = HashCombine(Hash, GetTypeHash((uint64)Other.pixelFormat));
326 Hash = HashCombine(Hash, GetTypeHash((uint64)Other.mipmapLevelCount));
327 Hash = HashCombine(Hash, GetTypeHash((uint64)Other.sampleCount));
328 Hash = HashCombine(Hash, GetTypeHash((uint64)Other.arrayLength));
329 Hash = HashCombine(Hash, GetTypeHash((uint64)Other.resourceOptions));
330 return Hash;
331 }
332
333 bool operator<(Descriptor const& Other) const
334 {
335 if (this != &Other)
336 {
337 return (textureType < Other.textureType ||
338 pixelFormat < Other.pixelFormat ||
339 width < Other.width ||
340 height < Other.height ||
341 depth < Other.depth ||
342 mipmapLevelCount < Other.mipmapLevelCount ||
343 sampleCount < Other.sampleCount ||
344 arrayLength < Other.arrayLength ||
345 resourceOptions < Other.resourceOptions ||
346 usage < Other.usage);
347 }
348 return false;
349 }
350
351 bool operator==(Descriptor const& Other) const
352 {
353 if (this != &Other)
354 {
355 return (textureType == Other.textureType &&
356 pixelFormat == Other.pixelFormat &&
357 width == Other.width &&
358 height == Other.height &&
359 depth == Other.depth &&
360 mipmapLevelCount == Other.mipmapLevelCount &&
361 sampleCount == Other.sampleCount &&
362 arrayLength == Other.arrayLength &&
363 resourceOptions == Other.resourceOptions &&
364 usage == Other.usage);
365 }
366 return true;
367 }
368
369 NS::UInteger textureType;
370 NS::UInteger pixelFormat;
371 NS::UInteger width;
372 NS::UInteger height;
373 NS::UInteger depth;
374 NS::UInteger mipmapLevelCount;
375 NS::UInteger sampleCount;
376 NS::UInteger arrayLength;
377 NS::UInteger resourceOptions;
378 NS::UInteger usage;
379 NS::UInteger freedFrame;
380 };
381
384
385 MTLTexturePtr CreateTexture(FMetalDevice& Device, MTL::TextureDescriptor* Desc);
387
388 void Drain(bool const bForce);
389
390private:
391 FCriticalSection& PoolMutex;
393};
394
395typedef NS::SharedPtr<MTL::Heap> MTLHeapPtr;
396
398{
399 enum MagazineSize
400 {
401 Size16,
402 Size32,
403 Size64,
404 Size128,
405 Size256,
406 Size512,
407 Size1024,
408 Size2048,
409 Size4096,
410 Size8192,
411 NumMagazineSizes
412 };
413
414 enum HeapSize
415 {
416 Size1Mb,
417 Size2Mb,
418 NumHeapSizes
419 };
420
421 enum TextureHeapSize
422 {
423 Size4Mb,
424 Size8Mb,
425 Size16Mb,
426 Size32Mb,
427 Size64Mb,
428 Size128Mb,
429 Size256Mb,
430 NumTextureHeapSizes,
431 MinTexturesPerHeap = 4,
432 MaxTextureSize = Size64Mb,
433 };
434
435 enum AllocTypes
436 {
437 AllocShared,
438 AllocPrivate,
439 NumAllocTypes = 2
440 };
441
442 enum EMetalHeapTextureUsage
443 {
445 EMetalHeapTextureUsageResource = 0,
447 EMetalHeapTextureUsageRenderTarget = 1,
449 EMetalHeapTextureUsageNum = 2
450 };
451
452 enum UsageTypes
453 {
454 UsageStatic,
455 UsageDynamic,
456 NumUsageTypes = 2
457 };
458
459public:
460 FMetalResourceHeap(FMetalDevice& MetalDevice);
462
463 void Init(FMetalCommandQueue& Queue);
464
465 FMetalBufferPtr CreateBuffer(uint32 Size, uint32 Alignment, EBufferUsageFlags Flags, MTL::ResourceOptions Options, bool bForceUnique = false);
466 MTLTexturePtr CreateTexture(MTL::TextureDescriptor* Desc, FMetalSurface* Surface);
467
468 virtual void ReleaseBuffer(FMetalBuffer* Buffer) override;
470
471#if METAL_RHI_RAYTRACING
474#endif
475
476 void Compact(bool const bForce);
477
478private:
479 uint32 GetMagazineIndex(uint32 Size);
480 uint32 GetHeapIndex(uint32 Size);
481 TextureHeapSize TextureSizeToIndex(uint32 Size);
482
483 MTLHeapPtr GetTextureHeap(MTL::TextureDescriptor* Desc, MTL::SizeAndAlign Size);
484
485private:
486 static uint32 MagazineSizes[NumMagazineSizes];
487 static uint32 HeapSizes[NumHeapSizes];
488 static uint32 MagazineAllocSizes[NumMagazineSizes];
489 static uint32 HeapAllocSizes[NumHeapSizes];
490 static uint32 HeapTextureHeapSizes[NumTextureHeapSizes];
491
492 FMetalDevice& Device;
493 FCriticalSection Mutex;
494 FMetalCommandQueue* Queue;
495
497 TArray<FMetalSubBufferMagazine*> SmallBuffers[NumUsageTypes][NumAllocTypes][NumMagazineSizes];
498
501 TArray<FMetalSubBufferHeap*> BufferHeaps[NumUsageTypes][NumAllocTypes][NumHeapSizes];
502
504 FMetalBufferPool Buffers[NumAllocTypes];
505#if PLATFORM_MAC // All managed buffers are bucketed & pooled rather than sub-allocated to avoid memory consistency complexities
508#endif
512 FMetalTexturePool TexturePool;
513 FMetalTexturePool TargetPool;
514
515 TArray<MTLHeapPtr> TextureHeaps[EMetalHeapTextureUsageNum][NumTextureHeapSizes];
516
517 struct MemoryBlock
518 {
520 uint64 Offset;
521 uint64 Size;
522 MTL::Resource* Resource;
523 MTL::ResourceOptions Options;
524 };
525
527
530
531 FCriticalSection FreeListCS;
532
533 // TODO: AAPL: Figure out how to guarantee index uniqueness without using a set (as iterators cant be hashed)
534 FCriticalSection InUseResourcesCS;
535 TArray<FMetalListIterator> InUseResources;
536 TQueue<uint32> InUseResourcesFreeList;
537 TMap<MTL::Resource*, uint32> AllocationHandlesLUT;
538
540 void FreeBlock(const uint32 ResourceAllocationHandle);
541 FMetalListIterator FindOrAllocateBlock(uint32 Size, uint32 Alignment, MTL::ResourceOptions Options);
543};
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
void Init()
Definition LockFreeList.h:4
TSharedPtr< FMetalBuffer, ESPMode::ThreadSafe > FMetalBufferPtr
Definition MetalBuffer.h:14
NS::SharedPtr< MTL::Heap > MTLHeapPtr
Definition MetalBuffer.h:395
EBufferUsageFlags
Definition RHIDefinitions.h:892
#define BUF_None
Definition RHIDefinitions.h:979
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MetalBuffer.h:225
@ NumResourceStorageModes
Definition MetalBuffer.h:257
@ NumToDrainPerFrame
Definition MetalBuffer.h:261
@ NumSafeFrames
Definition MetalBuffer.h:258
@ NumPoolBuckets
Definition MetalBuffer.h:260
@ NumPoolBucketSizes
Definition MetalBuffer.h:259
@ CullAfterFramesNum
Definition MetalBuffer.h:262
MTL::Buffer * CreateResource(FRHICommandListBase &RHICmdList, CreationArguments Args)
Definition MetalBuffer.cpp:1217
uint32 GetPoolBucketIndex(CreationArguments Args)
Definition MetalBuffer.cpp:1180
uint32 GetPoolBucketSize(uint32 Bucket)
Definition MetalBuffer.cpp:1208
FMetalPooledBufferArgs CreationArguments
Definition MetalBuffer.h:254
void FreeResource(MTL::Buffer *Resource)
Definition MetalBuffer.cpp:1247
CreationArguments GetCreationArguments(MTL::Buffer *Resource)
Definition MetalBuffer.cpp:1241
Definition MetalBuffer.h:302
virtual ~FMetalBufferPool()
Definition MetalBuffer.cpp:2257
Definition MetalResources.h:54
MTL::Buffer * GetMTLBuffer()
Definition MetalResources.h:99
Definition MetalCommandBuffer.h:17
Definition MetalCommandQueue.h:39
Definition MetalDevice.h:102
Definition MetalResources.h:365
Definition MetalBuffer.h:398
void ReleaseTexture(FMetalSurface *Surface, MTLTexturePtr Texture)
Definition MetalBuffer.cpp:2073
void Compact(bool const bForce)
Definition MetalBuffer.cpp:2171
~FMetalResourceHeap()
Definition MetalBuffer.cpp:1379
FMetalBufferPtr CreateBuffer(uint32 Size, uint32 Alignment, EBufferUsageFlags Flags, MTL::ResourceOptions Options, bool bForceUnique=false)
Definition MetalBuffer.cpp:1756
virtual void ReleaseBuffer(FMetalBuffer *Buffer) override
Definition MetalBuffer.cpp:1953
MTLTexturePtr CreateTexture(MTL::TextureDescriptor *Desc, FMetalSurface *Surface)
Definition MetalBuffer.cpp:2010
Definition MetalBuffer.h:43
NS::UInteger MaxAvailableSize() const
Definition MetalBuffer.cpp:376
int64 NumCurrentAllocations() const
Definition MetalBuffer.cpp:359
MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state)
Definition MetalBuffer.cpp:482
NS::UInteger GetSize() const
Definition MetalBuffer.cpp:335
FMetalBufferPtr NewBuffer(NS::UInteger length)
Definition MetalBuffer.cpp:412
void SetLabel(const NS::String *label)
Definition MetalBuffer.cpp:364
~FMetalSubBufferHeap()
Definition MetalBuffer.cpp:145
MTL::CPUCacheMode GetCpuCacheMode() const
Definition MetalBuffer.cpp:323
void SetOwner(NS::Range const &Range, FMetalRHIBuffer *Owner, bool bIsSwap)
Definition MetalBuffer.cpp:171
virtual void ReleaseBuffer(FMetalBuffer *Buffer) override
Definition MetalBuffer.cpp:274
void FreeRange(NS::Range const &Range)
Definition MetalBuffer.cpp:187
MTL::StorageMode GetStorageMode() const
Definition MetalBuffer.cpp:311
NS::String * GetLabel() const
Definition MetalBuffer.cpp:287
bool CanAllocateSize(NS::UInteger Size) const
Definition MetalBuffer.cpp:395
NS::UInteger GetUsedSize() const
Definition MetalBuffer.cpp:347
MTL::Device * GetDevice() const
Definition MetalBuffer.cpp:299
Definition MetalBuffer.h:92
NS::UInteger GetUsedSize() const
Definition MetalBuffer.cpp:598
NS::String * GetLabel() const
Definition MetalBuffer.cpp:573
MTL::Device * GetDevice() const
Definition MetalBuffer.cpp:578
MTL::StorageMode GetStorageMode() const
Definition MetalBuffer.cpp:583
void SetLabel(const NS::String *label)
Definition MetalBuffer.cpp:603
MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state)
Definition MetalBuffer.cpp:648
void FreeRange(NS::Range const &Range)
Definition MetalBuffer.cpp:541
FMetalBufferPtr NewBuffer(NS::UInteger length)
Definition MetalBuffer.cpp:622
virtual void ReleaseBuffer(FMetalBuffer *Buffer) override
Definition MetalBuffer.cpp:568
~FMetalSubBufferLinear()
Definition MetalBuffer.cpp:523
MTL::CPUCacheMode GetCpuCacheMode() const
Definition MetalBuffer.cpp:588
NS::UInteger GetSize() const
Definition MetalBuffer.cpp:593
bool CanAllocateSize(NS::UInteger Size) const
Definition MetalBuffer.cpp:608
Definition MetalBuffer.h:124
void SetLabel(const NS::String *label)
Definition MetalBuffer.cpp:870
virtual void ReleaseBuffer(FMetalBuffer *Buffer) override
Definition MetalBuffer.cpp:763
MTL::Device * GetDevice() const
Definition MetalBuffer.cpp:788
MTL::PurgeableState SetPurgeableState(MTL::PurgeableState state)
Definition MetalBuffer.cpp:923
~FMetalSubBufferMagazine()
Definition MetalBuffer.cpp:709
NS::UInteger GetUsedSize() const
Definition MetalBuffer.cpp:836
NS::UInteger GetFreeSize() const
Definition MetalBuffer.cpp:848
NS::String * GetLabel() const
Definition MetalBuffer.cpp:776
FMetalBufferPtr NewBuffer()
Definition MetalBuffer.cpp:882
void FreeRange(NS::Range const &Range)
Definition MetalBuffer.cpp:735
MTL::CPUCacheMode GetCpuCacheMode() const
Definition MetalBuffer.cpp:812
MTL::StorageMode GetStorageMode() const
Definition MetalBuffer.cpp:800
NS::UInteger GetSize() const
Definition MetalBuffer.cpp:824
int64 NumCurrentAllocations() const
Definition MetalBuffer.cpp:860
bool CanAllocateSize(NS::UInteger Size) const
Definition MetalBuffer.cpp:865
Definition MetalBuffer.h:184
FMetalBufferPtr NewBuffer(NS::UInteger Size, uint32 Alignment)
Definition MetalBuffer.cpp:1002
void Shrink()
Definition MetalBuffer.cpp:1077
~FMetalSubBufferRing()
Definition MetalBuffer.cpp:978
NS::UInteger GetSize() const
Definition MetalBuffer.cpp:997
void Commit(FMetalCommandBuffer *CmdBuffer)
Definition MetalBuffer.cpp:1125
MTL::CPUCacheMode GetCpuCacheMode() const
Definition MetalBuffer.cpp:992
MTL::Device * GetDevice() const
Definition MetalBuffer.cpp:982
MTL::StorageMode GetStorageMode() const
Definition MetalBuffer.cpp:987
virtual void ReleaseBuffer(FMetalBuffer *Buffer) override
Definition MetalBuffer.h:195
Definition MetalResources.h:206
Definition MetalBuffer.h:309
MTLTexturePtr CreateTexture(FMetalDevice &Device, MTL::TextureDescriptor *Desc)
Definition MetalBuffer.cpp:1271
~FMetalTexturePool()
Definition MetalBuffer.cpp:1267
void ReleaseTexture(MTLTexturePtr Texture)
Definition MetalBuffer.cpp:1312
void Drain(bool const bForce)
Definition MetalBuffer.cpp:1348
Definition RHICommandList.h:455
Definition MetalBuffer.h:37
virtual void ReleaseBuffer(FMetalBuffer *Buffer)=0
Definition Array.h:670
Definition List.h:363
Definition List.h:439
Definition UnrealString.h.inl:34
Definition Queue.h:48
Definition ResourcePool.h:18
Definition SharedPointer.h:692
Definition IOSView.cpp:31
Definition MetalBuffer.h:17
MTL::StorageMode Storage
Definition MetalBuffer.h:32
FMetalDevice * Device
Definition MetalBuffer.h:29
FMetalPooledBufferArgs(FMetalDevice *InDevice, uint32 InSize, EBufferUsageFlags InFlags, MTL::StorageMode InStorage, MTL::CPUCacheMode InCpuCacheMode=MTL::CPUCacheModeDefaultCache)
Definition MetalBuffer.h:20
EBufferUsageFlags Flags
Definition MetalBuffer.h:31
MTL::CPUCacheMode CpuCacheMode
Definition MetalBuffer.h:33
FMetalPooledBufferArgs()
Definition MetalBuffer.h:18
uint32 Size
Definition MetalBuffer.h:30
Definition MetalBuffer.h:159
FMetalBufferPtr Buffer
Definition MetalBuffer.h:176
void SetLastRead(uint64 Read)
Definition MetalBuffer.h:163
FMetalDevice & Device
Definition MetalBuffer.h:175
MTL::Buffer * GetMTLBuffer()
Definition MetalBuffer.h:170
uint64 LastRead
Definition MetalBuffer.h:177
~FMetalRingBufferRef()
Definition MetalBuffer.cpp:944
FMetalBufferPtr GetBuffer()
Definition MetalBuffer.h:165
Definition MetalBuffer.h:317
NS::UInteger usage
Definition MetalBuffer.h:378
NS::UInteger resourceOptions
Definition MetalBuffer.h:377
NS::UInteger depth
Definition MetalBuffer.h:373
NS::UInteger height
Definition MetalBuffer.h:372
NS::UInteger arrayLength
Definition MetalBuffer.h:376
NS::UInteger pixelFormat
Definition MetalBuffer.h:370
bool operator<(Descriptor const &Other) const
Definition MetalBuffer.h:333
bool operator==(Descriptor const &Other) const
Definition MetalBuffer.h:351
NS::UInteger freedFrame
Definition MetalBuffer.h:379
NS::UInteger mipmapLevelCount
Definition MetalBuffer.h:374
friend uint32 GetTypeHash(Descriptor const &Other)
Definition MetalBuffer.h:318
NS::UInteger sampleCount
Definition MetalBuffer.h:375
NS::UInteger textureType
Definition MetalBuffer.h:369
NS::UInteger width
Definition MetalBuffer.h:371