Fix transfer buffer alignment #31
|
@ -6734,9 +6734,11 @@ static Refresh_Buffer* VULKAN_CreateBuffer(
|
|||
static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer(
|
||||
VulkanRenderer *renderer,
|
||||
VulkanCommandBuffer *commandBuffer,
|
||||
VkDeviceSize requiredSize
|
||||
VkDeviceSize requiredSize,
|
||||
VkDeviceSize alignment
|
||||
) {
|
||||
VkDeviceSize size;
|
||||
VkDeviceSize offset;
|
||||
uint32_t i;
|
||||
VulkanTransferBuffer *transferBuffer;
|
||||
|
||||
|
@ -6745,9 +6747,11 @@ static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer(
|
|||
for (i = 0; i < commandBuffer->transferBufferCount; i += 1)
|
||||
{
|
||||
transferBuffer = commandBuffer->transferBuffers[i];
|
||||
offset = transferBuffer->offset + alignment - (transferBuffer->offset % alignment);
|
||||
|
||||
if (transferBuffer->offset + requiredSize <= transferBuffer->buffer->size)
|
||||
if (offset + requiredSize <= transferBuffer->buffer->size)
|
||||
{
|
||||
transferBuffer->offset = offset;
|
||||
return transferBuffer;
|
||||
}
|
||||
}
|
||||
|
@ -6759,8 +6763,9 @@ static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer(
|
|||
for (i = 0; i < renderer->transferBufferPool.availableBufferCount; i += 1)
|
||||
{
|
||||
transferBuffer = renderer->transferBufferPool.availableBuffers[i];
|
||||
offset = transferBuffer->offset + alignment - (transferBuffer->offset % alignment);
|
||||
|
||||
if (transferBuffer->offset + requiredSize <= transferBuffer->buffer->size)
|
||||
if (offset + requiredSize <= transferBuffer->buffer->size)
|
||||
{
|
||||
if (commandBuffer->transferBufferCount == commandBuffer->transferBufferCapacity)
|
||||
{
|
||||
|
@ -6778,6 +6783,7 @@ static VulkanTransferBuffer* VULKAN_INTERNAL_AcquireTransferBuffer(
|
|||
renderer->transferBufferPool.availableBufferCount -= 1;
|
||||
SDL_UnlockMutex(renderer->transferBufferPool.lock);
|
||||
|
||||
transferBuffer->offset = offset;
|
||||
return transferBuffer;
|
||||
}
|
||||
}
|
||||
|
@ -6847,7 +6853,8 @@ static void VULKAN_SetTextureData(
|
|||
textureSlice->rectangle.w,
|
||||
textureSlice->rectangle.h,
|
||||
vulkanTexture->format
|
||||
)
|
||||
),
|
||||
VULKAN_INTERNAL_BytesPerPixel(vulkanTexture->format)
|
||||
);
|
||||
|
||||
if (transferBuffer == NULL)
|
||||
|
@ -6944,7 +6951,7 @@ static void VULKAN_SetTextureDataYUV(
|
|||
uint32_t dataLength
|
||||
) {
|
||||
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
||||
VulkanTexture *tex;
|
||||
VulkanTexture *tex = (VulkanTexture*) y;
|
||||
|
||||
VulkanCommandBuffer *vulkanCommandBuffer = (VulkanCommandBuffer*)commandBuffer;
|
||||
VulkanTransferBuffer *transferBuffer;
|
||||
|
@ -6957,7 +6964,8 @@ static void VULKAN_SetTextureDataYUV(
|
|||
transferBuffer = VULKAN_INTERNAL_AcquireTransferBuffer(
|
||||
renderer,
|
||||
vulkanCommandBuffer,
|
||||
yDataLength + uvDataLength
|
||||
yDataLength + uvDataLength,
|
||||
VULKAN_INTERNAL_BytesPerPixel(tex->format)
|
||||
);
|
||||
|
||||
if (transferBuffer == NULL)
|
||||
|
@ -6983,8 +6991,6 @@ static void VULKAN_SetTextureDataYUV(
|
|||
|
||||
/* Y */
|
||||
|
||||
tex = (VulkanTexture*) y;
|
||||
|
||||
SDL_memcpy(
|
||||
stagingBufferPointer,
|
||||
dataPtr,
|
||||
|
@ -7336,7 +7342,8 @@ static void VULKAN_SetBufferData(
|
|||
transferBuffer = VULKAN_INTERNAL_AcquireTransferBuffer(
|
||||
renderer,
|
||||
vulkanCommandBuffer,
|
||||
dataLength
|
||||
dataLength,
|
||||
renderer->physicalDeviceProperties.properties.limits.optimalBufferCopyOffsetAlignment
|
||||
);
|
||||
|
||||
if (transferBuffer == NULL)
|
||||
|
|
Loading…
Reference in New Issue