metal: fix crash when stream buffers are resized

This commit is contained in:
Alex Szpakowski
2021-04-02 17:53:55 -03:00
parent 4cac353908
commit 9acf7df8e8
4 changed files with 18 additions and 7 deletions
+1 -1
View File
@@ -745,7 +745,7 @@ void Graphics::applyShaderUniforms(id<MTLRenderCommandEncoder> renderEncoder, lo
if (uniformBuffer->getSize() < uniformBufferOffset + size)
{
size_t newsize = uniformBuffer->getSize() * 2;
delete uniformBuffer;
uniformBuffer->release();
uniformBuffer = CreateStreamBuffer(device, BUFFERUSAGE_VERTEX, newsize);
uniformBufferData = {};
uniformBufferOffset = 0;
@@ -58,7 +58,11 @@ public:
{ @autoreleasepool {
buffer = nil;
for (int i = 0; i < BUFFER_FRAMES; i++)
{
if (mappedFrames[i])
dispatch_semaphore_signal(frameSemaphores[i]);
frameSemaphores[i] = nil;
}
}}
MapInfo map(size_t /*minsize*/) override
@@ -91,9 +95,12 @@ public:
if (mappedFrames[frameIndex])
{
/*__weak*/ dispatch_semaphore_t semaphore = frameSemaphores[frameIndex];
StreamBuffer *pthis = this;
pthis->retain();
[cmd addCompletedHandler:^(id<MTLCommandBuffer> _Nonnull)
{
dispatch_semaphore_signal(semaphore);
pthis->release();
}];
}