support dynamic uniform buffers on vulkan

This commit is contained in:
Gregory Wells
2025-07-23 11:37:12 -04:00
parent 9c03d38f51
commit 0da1a8a4f6
14 changed files with 22 additions and 13 deletions

View File

@@ -11,5 +11,6 @@ struct gnPlatformBuffer_t {
gnReturnCode createMetalBuffer(gnBufferHandle buffer, gnDevice device, gnBufferInfo info);
void metalBufferData(gnBufferHandle buffer, size_t dataSize, void* data);
void metalBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data);
void* mapMetalBuffer(gnBufferHandle buffer);
void destroyMetalBuffer(gnBufferHandle buffer);

View File

@@ -14,9 +14,12 @@ gnReturnCode createMetalBuffer(gnBufferHandle buffer, gnDevice device, gnBufferI
return GN_SUCCESS;
}
void metalBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
metalBufferSubData(buffer, 0, dataSize, data);
}
void metalBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data) {
void* bufferData;
if (buffer->buffer->useStagingBuffer) {
memcpy(buffer->buffer->stagingBuffer.contents, data, dataSize);
memcpy(buffer->buffer->stagingBuffer.contents + offset, data, dataSize);
id<MTLCommandBuffer> commandBuffer = [buffer->device->outputDevice->transferQueue commandBuffer];
id<MTLBlitCommandEncoder> encoder = [commandBuffer blitCommandEncoder];
[encoder copyFromBuffer:buffer->buffer->stagingBuffer sourceOffset:0 toBuffer:buffer->buffer->buffer destinationOffset:0 size:dataSize];
@@ -24,7 +27,7 @@ void metalBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
[commandBuffer commit];
[commandBuffer waitUntilCompleted];
} else
memcpy(buffer->buffer->buffer.contents, data, dataSize);
memcpy(buffer->buffer->buffer.contents + offset, data, dataSize);
}
void* mapMetalBuffer(gnBufferHandle buffer) {
return buffer->buffer->buffer.contents;