diff --git a/include/Refresh.h b/include/Refresh.h index 8a3a870..b1771ce 100644 --- a/include/Refresh.h +++ b/include/Refresh.h @@ -96,12 +96,6 @@ typedef enum Refresh_StoreOp REFRESH_STOREOP_DONT_CARE } Refresh_StoreOp; -typedef enum Refresh_SetDataOptions -{ - REFRESH_SETDATAOPTIONS_IMMEDIATE, - REFRESH_SETDATAOPTIONS_DEFERRED -} Refresh_SetDataOptions; - typedef enum Refresh_ClearOptionsBits { REFRESH_CLEAROPTIONS_COLOR = 0x00000001, @@ -968,7 +962,6 @@ REFRESHAPI void Refresh_CopyTextureToBuffer( * offsetInBytes: The starting offset of the buffer to write into. * data: The client data to write into the buffer. * dataLength: The length of data from the client buffer to write. - * setDataOption: Specifies how the buffer data will be copied. */ REFRESHAPI void Refresh_SetBufferData( Refresh_Device *device, @@ -976,8 +969,7 @@ REFRESHAPI void Refresh_SetBufferData( Refresh_Buffer *buffer, uint32_t offsetInBytes, void* data, - uint32_t dataLength, - Refresh_SetDataOptions setDataOption + uint32_t dataLength ); /* Pushes vertex shader params to the device. diff --git a/src/Refresh.c b/src/Refresh.c index b4faea2..0f3c3e0 100644 --- a/src/Refresh.c +++ b/src/Refresh.c @@ -457,8 +457,7 @@ void Refresh_SetBufferData( Refresh_Buffer *buffer, uint32_t offsetInBytes, void* data, - uint32_t dataLength, - Refresh_SetDataOptions setDataOption + uint32_t dataLength ) { NULL_RETURN(device); device->SetBufferData( @@ -467,8 +466,7 @@ void Refresh_SetBufferData( buffer, offsetInBytes, data, - dataLength, - setDataOption + dataLength ); } diff --git a/src/Refresh_Driver.h b/src/Refresh_Driver.h index 55cd6e1..2d54488 100644 --- a/src/Refresh_Driver.h +++ b/src/Refresh_Driver.h @@ -310,8 +310,7 @@ struct Refresh_Device Refresh_Buffer *buffer, uint32_t offsetInBytes, void* data, - uint32_t dataLength, - Refresh_SetDataOptions setDataOption + uint32_t dataLength ); uint32_t(*PushVertexShaderUniforms)( diff --git a/src/Refresh_Driver_Vulkan.c b/src/Refresh_Driver_Vulkan.c index 463f2f8..7de9bf5 100644 --- a/src/Refresh_Driver_Vulkan.c +++ b/src/Refresh_Driver_Vulkan.c @@ -6332,6 +6332,12 @@ static void VULKAN_SetTextureData( VkBufferImageCopy imageCopy; uint8_t *stagingBufferPointer; + if (vulkanCommandBuffer->renderPassInProgress) + { + Refresh_LogError("Cannot perform buffer updates mid-render pass!"); + return; + } + VULKAN_INTERNAL_MaybeExpandTransferBuffer( renderer, vulkanCommandBuffer, @@ -6757,8 +6763,7 @@ static void VULKAN_SetBufferData( Refresh_Buffer *buffer, uint32_t offsetInBytes, void* data, - uint32_t dataLength, - Refresh_SetDataOptions setDataOption + uint32_t dataLength ) { VulkanRenderer* renderer = (VulkanRenderer*) driverData; VulkanCommandBuffer* vulkanCommandBuffer = (VulkanCommandBuffer*) commandBuffer; @@ -6767,72 +6772,56 @@ static void VULKAN_SetBufferData( uint8_t* transferBufferPointer; VkBufferCopy bufferCopy; - if (setDataOption == REFRESH_SETDATAOPTIONS_DEFERRED) + if (vulkanCommandBuffer->renderPassInProgress) { - if (vulkanCommandBuffer->renderPassInProgress) - { - Refresh_LogError("Cannot perform deferred buffer updates mid-render pass!"); - return; - } - - VULKAN_INTERNAL_MaybeExpandTransferBuffer( - renderer, - vulkanCommandBuffer, - dataLength - ); - - transferBuffer = vulkanCommandBuffer->transferBuffers[vulkanCommandBuffer->transferBufferCount - 1]; - - transferBufferPointer = - transferBuffer->buffer->allocation->mapPointer + - transferBuffer->buffer->offset + - transferBuffer->offset; - - SDL_memcpy( - transferBufferPointer, - data, - dataLength - ); - - VULKAN_INTERNAL_BufferMemoryBarrier( - renderer, - vulkanCommandBuffer->commandBuffer, - RESOURCE_ACCESS_TRANSFER_READ, - transferBuffer->buffer - ); - - VULKAN_INTERNAL_BufferMemoryBarrier( - renderer, - vulkanCommandBuffer->commandBuffer, - RESOURCE_ACCESS_TRANSFER_WRITE, - vulkanBuffer - ); - - bufferCopy.srcOffset = transferBuffer->offset; - bufferCopy.dstOffset = offsetInBytes; - bufferCopy.size = (VkDeviceSize) dataLength; - - renderer->vkCmdCopyBuffer( - vulkanCommandBuffer->commandBuffer, - transferBuffer->buffer->buffer, - vulkanBuffer->buffer, - 1, - &bufferCopy - ); - } - else if (setDataOption == REFRESH_SETDATAOPTIONS_IMMEDIATE) - { - VULKAN_INTERNAL_SetBufferData( - vulkanBuffer, - offsetInBytes, - data, - dataLength - ); - } - else - { - Refresh_LogError("Unrecognized Refresh_SetDataOptions value!"); + Refresh_LogError("Cannot perform buffer updates mid-render pass!"); + return; } + + VULKAN_INTERNAL_MaybeExpandTransferBuffer( + renderer, + vulkanCommandBuffer, + dataLength + ); + + transferBuffer = vulkanCommandBuffer->transferBuffers[vulkanCommandBuffer->transferBufferCount - 1]; + + transferBufferPointer = + transferBuffer->buffer->allocation->mapPointer + + transferBuffer->buffer->offset + + transferBuffer->offset; + + SDL_memcpy( + transferBufferPointer, + data, + dataLength + ); + + VULKAN_INTERNAL_BufferMemoryBarrier( + renderer, + vulkanCommandBuffer->commandBuffer, + RESOURCE_ACCESS_TRANSFER_READ, + transferBuffer->buffer + ); + + VULKAN_INTERNAL_BufferMemoryBarrier( + renderer, + vulkanCommandBuffer->commandBuffer, + RESOURCE_ACCESS_TRANSFER_WRITE, + vulkanBuffer + ); + + bufferCopy.srcOffset = transferBuffer->offset; + bufferCopy.dstOffset = offsetInBytes; + bufferCopy.size = (VkDeviceSize) dataLength; + + renderer->vkCmdCopyBuffer( + vulkanCommandBuffer->commandBuffer, + transferBuffer->buffer->buffer, + vulkanBuffer->buffer, + 1, + &bufferCopy + ); } /* FIXME: this should return uint64_t */