diff --git a/src/gpu/gpu.h b/src/gpu/gpu.h index fe85b2d..52e4d1a 100644 --- a/src/gpu/gpu.h +++ b/src/gpu/gpu.h @@ -354,6 +354,13 @@ typedef struct GpuBufferCreateRequest { GpuBufferUsage usage; } GpuBufferCreateRequest; +typedef struct GpuBufferFlushRequest { + GpuDevice *device; + GpuBuffer buffer; + u64 offset; + u64 size; +} GpuBufferFlushRequest; + typedef struct GpuFence GpuFence; typedef GpuFence **GpuFencePtrArray; @@ -1192,6 +1199,7 @@ GpuImage *gpuLoadImageFromFile(const WpAllocator *allocator ivec3s gpuGetImageSize(GpuImage *image); GpuBuffer gpuCreateBuffer(const WpAllocator *allocator, GpuBufferCreateRequest request); void gpuDestroyBuffer(GpuBuffer *buffer); +void gpuFlushBuffer(GpuBufferFlushRequest request); GpuFence *gpuCreateFence(const WpAllocator *allocator, GpuDevice *device); void gpuDestroyFence(GpuFence *fence); void gpuResetFences(const WpAllocator *temp, GpuResetFencesRequest request); diff --git a/src/gpu/vulkan/vk_gpu.c b/src/gpu/vulkan/vk_gpu.c index cfd1db3..730aa45 100644 --- a/src/gpu/vulkan/vk_gpu.c +++ b/src/gpu/vulkan/vk_gpu.c @@ -1037,6 +1037,13 @@ void gpuDestroyBuffer(GpuBuffer *buffer) { buffer->size = 0; } +void gpuFlushBuffer(GpuBufferFlushRequest request) { + u64 size = request.size > 0 ? request.size : VK_WHOLE_SIZE; + VkResult vk_result = vmaFlushAllocation(request.device->allocator, request.buffer.internal->allocation, + request.offset, size); + assertWithLogger(vk_result == VK_SUCCESS, &logger, "Failed to flush buffer"); +} + GpuFence *gpuCreateFence(const WpAllocator *allocator, GpuDevice *device) { GpuFence *fence = wpMemAllocatorAlloc(allocator, sizeof(GpuFence)); assertWithLogger(fence != NULL, &logger, "Failed to allocate fence internal");