From f3089002074e60ecf07e79a9747b35e3ec2cfa79 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 1 Nov 2026 00:22:59 +0000 Subject: [PATCH] Add gpuFlushBuffer --- src/gpu/gpu.h | 8 ++++++++ src/gpu/vulkan/vk_gpu.c | 7 +++++++ 2 files changed, 15 insertions(+) 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");