Metal: MTLMemoryManager implementation includes functions which manage allocation of MTLBuffer resources.

The memory manager includes both a GPUContext-local manager which allocates per-context resources such as Circular Scratch Buffers for temporary data such as uniform updates and resource staging, and a GPUContext-global memory manager which features a pooled memory allocator for efficient re-use of resources, to reduce CPU-overhead of frequent memory allocations.

These Memory Managers act as a simple interface for use by other Metal backend modules and to coordinate the lifetime of buffers, to ensure that GPU-resident resources are correctly tracked and freed when no longer in use.

Note: This also contains dependent DIFF changes from D15027, though these will be removed once D15027 lands.

Authored by Apple: Michael Parkin-White

Ref T96261

Reviewed By: fclem

Maniphest Tasks: T96261

Differential Revision: https://developer.blender.org/D15277
This commit is contained in:
Jason Fielder
2022-07-01 10:30:16 +02:00
committed by Clément Foucault
parent 3ffc558341
commit 4527dd1ce4
18 changed files with 1524 additions and 124 deletions

View File

@@ -370,6 +370,11 @@ MINLINE uint divide_ceil_u(uint a, uint b)
return (a + b - 1) / b;
}
MINLINE uint64_t divide_ceil_ul(uint64_t a, uint64_t b)
{
return (a + b - 1) / b;
}
/**
* Returns \a a if it is a multiple of \a b or the next multiple or \a b after \b a .
*/
@@ -378,6 +383,11 @@ MINLINE uint ceil_to_multiple_u(uint a, uint b)
return divide_ceil_u(a, b) * b;
}
MINLINE uint64_t ceil_to_multiple_ul(uint64_t a, uint64_t b)
{
return divide_ceil_ul(a, b) * b;
}
MINLINE int mod_i(int i, int n)
{
return (i % n + n) % n;