add support for storage buffers in vulkan

This commit is contained in:
Greg Wells
2025-07-03 13:30:47 -04:00
parent d9937c2833
commit 665ce6847a
15 changed files with 83 additions and 13 deletions

View File

@@ -11,6 +11,9 @@ gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device,
void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
buffer->device->instance->callingLayer->deviceFunctions._gnBufferData(buffer, dataSize, data);
}
void gnBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data) {
buffer->device->instance->callingLayer->deviceFunctions._gnBufferSubData(buffer, offset, dataSize, data);
}
void* gnMapBuffer(gnBufferHandle buffer) {
if (buffer->info.usage == GN_STATIC_DRAW) return NULL;
return buffer->device->instance->callingLayer->deviceFunctions._gnMapBuffer(buffer);

View File

@@ -11,7 +11,8 @@ typedef enum gnIndexType {
typedef enum gnBufferType {
GN_VERTEX_BUFFER = 0x00000001,
GN_INDEX_BUFFER = 0x00000002,
GN_UNIFORM_BUFFER = 0x00000004
GN_UNIFORM_BUFFER = 0x00000004,
GN_STORAGE_BUFFER = 0x00000008
} gnBufferType;
typedef enum gnBufferUsage {
@@ -37,5 +38,6 @@ GN_ARRAY_LIST(gnBufferMemory);
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info);
void gnBufferData(gnBufferHandle buffer, size_t dataSize, gnBufferMemory data);
void gnBufferSubData(gnBufferHandle buffer, size_t offset, size_t dataSize, gnBufferMemory data);
gnBufferMemory gnMapBuffer(gnBufferHandle buffer);
void gnDestroyBuffer(gnBufferHandle buffer);

View File

@@ -7,6 +7,10 @@ void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo) {
uniform->pool->device->instance->callingLayer->deviceFunctions._gnUpdateBufferUniform(uniform, &bufferInfo);
}
void gnUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo storageInfo) {
uniform->pool->device->instance->callingLayer->deviceFunctions._gnUpdateStorageUniform(uniform, &storageInfo);
}
void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo) {
uniform->pool->device->instance->callingLayer->deviceFunctions._gnUpdateImageUniform(uniform, &imageInfo);
}

View File

@@ -11,6 +11,12 @@ typedef struct gnBufferUniformInfo {
size_t size;
} gnBufferUniformInfo;
typedef struct gnStorageUniformInfo {
gnBuffer buffer;
size_t offset, size;
uint32_t binding;
} gnStorageUniformInfo;
typedef struct gnImageUniformInfo {
uint32_t binding;
gnTexture texture;
@@ -22,7 +28,8 @@ struct gnUniform_t {
gnUniformPool pool;
};
#endif
GN_ARRAY_LIST(gnUniform)
GN_ARRAY_LIST(gnUniform);
void gnUpdateBufferUniform(gnUniform uniform, gnBufferUniformInfo bufferInfo);
void gnUpdateStorageUniform(gnUniform uniform, gnStorageUniformInfo storageInfo);
void gnUpdateImageUniform(gnUniform uniform, gnImageUniformInfo imageInfo);

View File

@@ -4,8 +4,8 @@
typedef enum gnUniformType {
GN_UNIFORM_BUFFER_DESCRIPTOR,
GN_SHADER_STORE_BUFFER_DESCRIPTOR,
GN_IMAGE_DESCRIPTOR,
GN_SHADER_STORE_BUFFER_DESCRIPTOR,
GN_UNIFORM_TYPE_MAX
} gnUniformType;