forked from MoonsideGames/Refresh
staging buffer lock
parent
e91a83f357
commit
62d962cf23
|
@ -1358,6 +1358,7 @@ typedef struct VulkanRenderer
|
||||||
SDL_mutex *uniformBufferLock;
|
SDL_mutex *uniformBufferLock;
|
||||||
SDL_mutex *descriptorSetLock;
|
SDL_mutex *descriptorSetLock;
|
||||||
SDL_mutex *boundBufferLock;
|
SDL_mutex *boundBufferLock;
|
||||||
|
SDL_mutex *stagingLock;
|
||||||
|
|
||||||
/* Deferred destroy storage */
|
/* Deferred destroy storage */
|
||||||
|
|
||||||
|
@ -3641,6 +3642,7 @@ static void VULKAN_DestroyDevice(
|
||||||
SDL_DestroyMutex(renderer->uniformBufferLock);
|
SDL_DestroyMutex(renderer->uniformBufferLock);
|
||||||
SDL_DestroyMutex(renderer->descriptorSetLock);
|
SDL_DestroyMutex(renderer->descriptorSetLock);
|
||||||
SDL_DestroyMutex(renderer->boundBufferLock);
|
SDL_DestroyMutex(renderer->boundBufferLock);
|
||||||
|
SDL_DestroyMutex(renderer->stagingLock);
|
||||||
|
|
||||||
SDL_free(renderer->buffersInUse);
|
SDL_free(renderer->buffersInUse);
|
||||||
|
|
||||||
|
@ -6011,6 +6013,8 @@ static void VULKAN_SetTextureData2D(
|
||||||
VkBufferImageCopy imageCopy;
|
VkBufferImageCopy imageCopy;
|
||||||
uint8_t *mapPointer;
|
uint8_t *mapPointer;
|
||||||
|
|
||||||
|
SDL_LockMutex(renderer->stagingLock);
|
||||||
|
|
||||||
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLengthInBytes);
|
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLengthInBytes);
|
||||||
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
||||||
|
|
||||||
|
@ -6096,6 +6100,8 @@ static void VULKAN_SetTextureData2D(
|
||||||
&vulkanTexture->resourceAccessType
|
&vulkanTexture->resourceAccessType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_UnlockMutex(renderer->stagingLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_SetTextureData3D(
|
static void VULKAN_SetTextureData3D(
|
||||||
|
@ -6119,6 +6125,8 @@ static void VULKAN_SetTextureData3D(
|
||||||
VkBufferImageCopy imageCopy;
|
VkBufferImageCopy imageCopy;
|
||||||
uint8_t *mapPointer;
|
uint8_t *mapPointer;
|
||||||
|
|
||||||
|
SDL_LockMutex(renderer->stagingLock);
|
||||||
|
|
||||||
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
||||||
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
||||||
|
|
||||||
|
@ -6204,6 +6212,8 @@ static void VULKAN_SetTextureData3D(
|
||||||
&vulkanTexture->resourceAccessType
|
&vulkanTexture->resourceAccessType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_UnlockMutex(renderer->stagingLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_SetTextureDataCube(
|
static void VULKAN_SetTextureDataCube(
|
||||||
|
@ -6226,6 +6236,8 @@ static void VULKAN_SetTextureDataCube(
|
||||||
VkBufferImageCopy imageCopy;
|
VkBufferImageCopy imageCopy;
|
||||||
uint8_t *mapPointer;
|
uint8_t *mapPointer;
|
||||||
|
|
||||||
|
SDL_LockMutex(renderer->stagingLock);
|
||||||
|
|
||||||
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
||||||
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
||||||
|
|
||||||
|
@ -6311,6 +6323,8 @@ static void VULKAN_SetTextureDataCube(
|
||||||
&vulkanTexture->resourceAccessType
|
&vulkanTexture->resourceAccessType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_UnlockMutex(renderer->stagingLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_SetTextureDataYUV(
|
static void VULKAN_SetTextureDataYUV(
|
||||||
|
@ -6336,6 +6350,8 @@ static void VULKAN_SetTextureDataYUV(
|
||||||
uint8_t *mapPointer;
|
uint8_t *mapPointer;
|
||||||
VkResult vulkanResult;
|
VkResult vulkanResult;
|
||||||
|
|
||||||
|
SDL_LockMutex(renderer->stagingLock);
|
||||||
|
|
||||||
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
VULKAN_INTERNAL_MaybeExpandStagingBuffer(renderer, dataLength);
|
||||||
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
VULKAN_INTERNAL_MaybeBeginTransferCommandBuffer(renderer);
|
||||||
|
|
||||||
|
@ -6510,6 +6526,8 @@ static void VULKAN_SetTextureDataYUV(
|
||||||
&tex->resourceAccessType
|
&tex->resourceAccessType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_UnlockMutex(renderer->stagingLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void VULKAN_INTERNAL_BlitImage(
|
static void VULKAN_INTERNAL_BlitImage(
|
||||||
|
@ -9484,6 +9502,7 @@ static REFRESH_Device* VULKAN_CreateDevice(
|
||||||
renderer->uniformBufferLock = SDL_CreateMutex();
|
renderer->uniformBufferLock = SDL_CreateMutex();
|
||||||
renderer->descriptorSetLock = SDL_CreateMutex();
|
renderer->descriptorSetLock = SDL_CreateMutex();
|
||||||
renderer->boundBufferLock = SDL_CreateMutex();
|
renderer->boundBufferLock = SDL_CreateMutex();
|
||||||
|
renderer->stagingLock = SDL_CreateMutex();
|
||||||
|
|
||||||
/* Transfer buffer */
|
/* Transfer buffer */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue