buffer creation and binding

This commit is contained in:
Greg Wells
2025-06-06 13:10:42 -04:00
parent 585be0c6b0
commit 64a12b5d42
8 changed files with 34 additions and 10 deletions

View File

@@ -49,6 +49,12 @@ gnReturnCode gnCreateBufferFn(gnBufferHandle buffer, gnOutputDeviceHandle device
vkBindBufferMemory(device->outputDevice->device, buffer->buffer->buffer, buffer->buffer->bufferMemory, 0); vkBindBufferMemory(device->outputDevice->device, buffer->buffer->buffer, buffer->buffer->bufferMemory, 0);
return GN_SUCCESS; return GN_SUCCESS;
} }
void gnBufferDataFn(gnBufferHandle buffer, size_t dataSize, void* data) {
void* bufferData;
vkMapMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory, 0, dataSize, 0, &bufferData);
memcpy(bufferData, data, dataSize);
vkUnmapMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory);
}
void gnDestroyBufferFn(gnBufferHandle buffer) { void gnDestroyBufferFn(gnBufferHandle buffer) {
vkDestroyBuffer(buffer->device->outputDevice->device, buffer->buffer->buffer, NULL); vkDestroyBuffer(buffer->device->outputDevice->device, buffer->buffer->buffer, NULL);
vkFreeMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory, NULL); vkFreeMemory(buffer->device->outputDevice->device, buffer->buffer->bufferMemory, NULL);

View File

@@ -4,6 +4,7 @@
#include "framebuffers/vulkan_framebuffer.h" #include "framebuffers/vulkan_framebuffer.h"
#include "commands/command_buffer/vulkan_command_buffer.h" #include "commands/command_buffer/vulkan_command_buffer.h"
#include "pipelines/graphics_pipeline/vulkan_graphics_pipeline.h" #include "pipelines/graphics_pipeline/vulkan_graphics_pipeline.h"
#include "buffers/vulkan_buffer.h"
void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) { void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) {
VkClearValue* values = malloc(sizeof(VkClearValue) * passInfo.clearValueCount); VkClearValue* values = malloc(sizeof(VkClearValue) * passInfo.clearValueCount);
@@ -54,6 +55,11 @@ void gnCommandSetScissorFn(struct gnCommandBuffer_t* buffer, struct gnScissor_t
}; };
vkCmdSetScissor(buffer->commandBuffer->buffer, 0, 1, &vkScissor); vkCmdSetScissor(buffer->commandBuffer->buffer, 0, 1, &vkScissor);
} }
VkDeviceSize offsets[] = {0};
void gnCommandBindBufferFn(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) {
if (type == GN_VERTEX_BUFFER)
vkCmdBindVertexBuffers(buffer->commandBuffer->buffer, 0, 1, &bufferToBind->buffer->buffer, offsets);
}
void gnCommandDrawFn(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { void gnCommandDrawFn(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) {
vkCmdDraw(buffer->commandBuffer->buffer, vertexCount, instanceCount, firstVertex, firstInstance); vkCmdDraw(buffer->commandBuffer->buffer, vertexCount, instanceCount, firstVertex, firstInstance);
} }

View File

@@ -7,6 +7,9 @@ gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device,
(*buffer)->device = device; (*buffer)->device = device;
return device->deviceFunctions->_gnCreateBuffer(*buffer, device, info); return device->deviceFunctions->_gnCreateBuffer(*buffer, device, info);
} }
void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data) {
buffer->device->deviceFunctions->_gnBufferData(buffer, dataSize, data);
}
void gnDestroyBuffer(gnBufferHandle buffer) { void gnDestroyBuffer(gnBufferHandle buffer) {
buffer->device->deviceFunctions->_gnDestroyBuffer(buffer); buffer->device->deviceFunctions->_gnDestroyBuffer(buffer);
} }

View File

@@ -20,4 +20,5 @@ struct gnBuffer_t {
#endif #endif
gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info); gnReturnCode gnCreateBuffer(gnBufferHandle* buffer, gnOutputDeviceHandle device, gnBufferInfo info);
void gnBufferData(gnBufferHandle buffer, size_t dataSize, void* data);
void gnDestroyBuffer(gnBufferHandle buffer); void gnDestroyBuffer(gnBufferHandle buffer);

View File

@@ -17,7 +17,9 @@ void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t
void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) { void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) {
buffer->commandPool->commandFunctions->_gnCommandSetScissor(buffer, scissor); buffer->commandPool->commandFunctions->_gnCommandSetScissor(buffer, scissor);
} }
void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) {
buffer->commandPool->commandFunctions->_gnCommandBindBuffer(buffer, bufferToBind, type);
}
void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) {
buffer->commandPool->commandFunctions->_gnCommandDraw(buffer, vertexCount, firstVertex, instanceCount, firstInstance); buffer->commandPool->commandFunctions->_gnCommandDraw(buffer, vertexCount, firstVertex, instanceCount, firstInstance);
} }

View File

@@ -1,13 +1,15 @@
#include "core/command/command_buffer/gryphn_command_buffer.h" #include "core/gryphn_handles.h"
#include "core/renderpass/gryphn_render_pass.h" #include "core/renderpass/gryphn_render_pass.h"
void gnCommandBeginRenderPass(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo); void gnCommandBeginRenderPass(gnCommandBufferHandle buffer, gnRenderPassInfo passInfo);
void gnCommandEndRenderPass(struct gnCommandBuffer_t* buffer); void gnCommandEndRenderPass(gnCommandBufferHandle buffer);
#include "core/pipelines/graphics_pipeline/gryphn_graphics_pipeline.h" #include "core/pipelines/graphics_pipeline/gryphn_graphics_pipeline.h"
void gnCommandBindGraphicsPipeline(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline); void gnCommandBindGraphicsPipeline(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline);
void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport); void gnCommandSetViewport(gnCommandBufferHandle buffer, gnViewport viewport);
void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor); void gnCommandSetScissor(gnCommandBufferHandle buffer, gnScissor scissor);
void gnCommandDraw(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); #include "core/buffers/gryphn_buffer.h"
void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type);
void gnCommandDraw(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance);

View File

@@ -83,7 +83,8 @@ typedef struct gnDeviceFunctions_t {
void (*_gnDestroySemaphore)(gnSemaphoreHandle semaphore); void (*_gnDestroySemaphore)(gnSemaphoreHandle semaphore);
gnReturnCode (*_gnCreateBuffer)(gnBufferHandle buffer, gnDeviceHandle device, gnBufferInfo info); gnReturnCode (*_gnCreateBuffer)(gnBufferHandle buffer, gnDeviceHandle device, gnBufferInfo info);
gnReturnCode(*_gnDestroyBuffer)(gnBufferHandle buffer); void (*_gnBufferData)(gnBufferHandle buffer, size_t size, void* data);
void (*_gnDestroyBuffer)(gnBufferHandle buffer);
gnReturnCode (*_gnCreateFence)(gnFenceHandle fence, gnOutputDeviceHandle device); gnReturnCode (*_gnCreateFence)(gnFenceHandle fence, gnOutputDeviceHandle device);
void (*_gnSignalFence)(gnFenceHandle fence); void (*_gnSignalFence)(gnFenceHandle fence);
@@ -110,5 +111,6 @@ typedef struct gnCommandFunctions_t {
void (*_gnCommandSetViewport)(gnCommandBufferHandle buffer, gnViewport viewport); void (*_gnCommandSetViewport)(gnCommandBufferHandle buffer, gnViewport viewport);
void (*_gnCommandSetScissor)(gnCommandBufferHandle buffer, gnScissor scissor); void (*_gnCommandSetScissor)(gnCommandBufferHandle buffer, gnScissor scissor);
void (*_gnCommandBindBuffer)(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type);
void (*_gnCommandDraw)(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); void (*_gnCommandDraw)(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance);
} gnCommandFunctions; } gnCommandFunctions;

View File

@@ -85,6 +85,7 @@ void gnLoadDeviceFunctions(struct gnDynamicLibrary_t* lib, struct gnDeviceFuncti
gnLoadDLLFunction(lib, functions->_gnCreateSemaphore, "gnCreateSemaphoreFn"); gnLoadDLLFunction(lib, functions->_gnCreateSemaphore, "gnCreateSemaphoreFn");
gnLoadDLLFunction(lib, functions->_gnDestroySemaphore, "gnDestroySemaphoreFn"); gnLoadDLLFunction(lib, functions->_gnDestroySemaphore, "gnDestroySemaphoreFn");
gnLoadDLLFunction(lib, functions->_gnCreateBuffer, "gnCreateBufferFn"); gnLoadDLLFunction(lib, functions->_gnCreateBuffer, "gnCreateBufferFn");
gnLoadDLLFunction(lib, functions->_gnBufferData, "gnBufferDataFn");
gnLoadDLLFunction(lib, functions->_gnDestroyBuffer, "gnDestroyBufferFn"); gnLoadDLLFunction(lib, functions->_gnDestroyBuffer, "gnDestroyBufferFn");
gnLoadDLLFunction(lib, functions->_gnCreateFence, "gnCreateFenceFn"); gnLoadDLLFunction(lib, functions->_gnCreateFence, "gnCreateFenceFn");
gnLoadDLLFunction(lib, functions->_gnSignalFence, "gnSignalFenceFn"); gnLoadDLLFunction(lib, functions->_gnSignalFence, "gnSignalFenceFn");
@@ -106,5 +107,6 @@ void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunc
gnLoadDLLFunction(lib, functions->_gnCommandBindGraphicsPipeline, "gnCommandBindGraphicsPipelineFn"); gnLoadDLLFunction(lib, functions->_gnCommandBindGraphicsPipeline, "gnCommandBindGraphicsPipelineFn");
gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn");
gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn");
gnLoadDLLFunction(lib, functions->_gnCommandBindBuffer, "gnCommandBindBufferFn");
gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDrawFn"); gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDrawFn");
} }