Skip to content

Commit ac18658

Browse files
committed
improve performance
1 parent be10524 commit ac18658

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

cocos/renderer/backend/metal/BufferMTL.mm

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,39 @@
77
BufferMTL::BufferMTL(id<MTLDevice> mtlDevice, unsigned int size, BufferType type, BufferUsage usage)
88
: Buffer(size, type, usage)
99
{
10-
// _mtlBuffer = [mtlDevice newBufferWithLength:size options:MTLResourceStorageModeShared];
10+
if (BufferUsage::DYNAMIC == usage)
11+
{
12+
NSMutableArray *mutableDynamicDataBuffers = [NSMutableArray arrayWithCapacity:MAX_INFLIGHT_BUFFER];
13+
for (int i = 0; i < MAX_INFLIGHT_BUFFER; ++i)
14+
{
15+
// Create a new buffer with enough capacity to store one instance of the dynamic buffer data
16+
id <MTLBuffer> dynamicDataBuffer = [mtlDevice newBufferWithLength:size options:MTLResourceStorageModeShared];
17+
[mutableDynamicDataBuffers addObject:dynamicDataBuffer];
18+
}
19+
_dynamicDataBuffers = [mutableDynamicDataBuffers copy];
1120

12-
int maxInflightBuffers = BufferUsage::DYNAMIC == usage ? MAX_INFLIGHT_BUFFER : 1;
13-
NSMutableArray *mutableDynamicDataBuffers = [NSMutableArray arrayWithCapacity:maxInflightBuffers];
14-
for (int i = 0; i < maxInflightBuffers; ++i)
21+
_mtlBuffer = _dynamicDataBuffers[0];
22+
BufferManager::addBuffer(this);
23+
}
24+
else
1525
{
16-
// Create a new buffer with enough capacity to store one instance of the dynamic buffer data
17-
id <MTLBuffer> dynamicDataBuffer = [mtlDevice newBufferWithLength:size options:MTLResourceStorageModeShared];
18-
[mutableDynamicDataBuffers addObject:dynamicDataBuffer];
26+
_mtlBuffer = [mtlDevice newBufferWithLength:size options:MTLResourceStorageModeShared];
1927
}
20-
_dynamicDataBuffers = [mutableDynamicDataBuffers copy];
21-
22-
_mtlBuffer = _dynamicDataBuffers[0];
23-
24-
BufferManager::addBuffer(this);
2528
}
2629

2730
BufferMTL::~BufferMTL()
2831
{
29-
for (id<MTLBuffer> buffer in _dynamicDataBuffers)
32+
if (BufferUsage::DYNAMIC == _usage)
33+
{
34+
for (id<MTLBuffer> buffer in _dynamicDataBuffers)
3035
[buffer release];
3136

32-
BufferManager::removeBuffer(this);
37+
BufferManager::removeBuffer(this);
38+
}
39+
else
40+
{
41+
[_mtlBuffer release];
42+
}
3343
}
3444

3545
void BufferMTL::updateData(void* data, unsigned int size)
@@ -51,11 +61,9 @@
5161

5262
void BufferMTL::updateIndex()
5363
{
54-
if (BufferUsage::DYNAMIC == _usage)
55-
_currentFrameIndex = (_currentFrameIndex + 1) % MAX_INFLIGHT_BUFFER;
56-
else
57-
_currentFrameIndex = 0;
58-
64+
assert(BufferUsage::DYNAMIC == _usage);
65+
66+
_currentFrameIndex = (_currentFrameIndex + 1) % MAX_INFLIGHT_BUFFER;
5967
_mtlBuffer = _dynamicDataBuffers[_currentFrameIndex];
6068
}
6169

0 commit comments

Comments
 (0)