From a68e8df28e8f6030103eec841bf10562bacc9f20 Mon Sep 17 00:00:00 2001 From: Greg Wells Date: Sun, 8 Jun 2025 14:21:34 -0400 Subject: [PATCH] bind uniforms --- .../command_buffer/vulkan_command_buffer.h | 1 + .../src/commands/commands/vulkan_commands.c | 23 ++++++++++++++----- src/core/command/commands/gryphn_command.c | 3 +++ src/core/command/commands/gryphn_command.h | 1 + src/core/gryphn_platform_functions.h | 1 + src/core/instance/init/gryphn_init.c | 1 + 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.h b/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.h index 30f0e22..a57aa75 100644 --- a/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.h +++ b/rendering_api/vulkan/src/commands/command_buffer/vulkan_command_buffer.h @@ -8,4 +8,5 @@ typedef struct gnPlatformCommandBuffer_t { gnBool changedBuffer; gnBufferHandle boundIndexBuffer; + gnGraphicsPipeline boundGraphicsPipeline; } gnPlatformCommandBuffer; diff --git a/rendering_api/vulkan/src/commands/commands/vulkan_commands.c b/rendering_api/vulkan/src/commands/commands/vulkan_commands.c index d4686b5..00b39ff 100644 --- a/rendering_api/vulkan/src/commands/commands/vulkan_commands.c +++ b/rendering_api/vulkan/src/commands/commands/vulkan_commands.c @@ -5,8 +5,9 @@ #include "commands/command_buffer/vulkan_command_buffer.h" #include "pipelines/graphics_pipeline/vulkan_graphics_pipeline.h" #include "buffers/vulkan_buffer.h" +#include "uniforms/vulkan_uniform.h" -void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRenderPassInfo_t passInfo) { +void gnCommandBeginRenderPassFn(gnCommandBuffer buffer, struct gnRenderPassInfo_t passInfo) { VkClearValue* values = malloc(sizeof(VkClearValue) * passInfo.clearValueCount); for (int i = 0; i < passInfo.clearValueCount; i++) { values[i] = (VkClearValue){{{ @@ -31,13 +32,14 @@ void gnCommandBeginRenderPassFn(struct gnCommandBuffer_t* buffer, struct gnRende vkCmdBeginRenderPass(buffer->commandBuffer->buffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); } -void gnCommandEndRenderPassFn(struct gnCommandBuffer_t* buffer) { +void gnCommandEndRenderPassFn(gnCommandBuffer buffer) { vkCmdEndRenderPass(buffer->commandBuffer->buffer); } -void gnCommandBindGraphicsPipelineFn(struct gnCommandBuffer_t* buffer, struct gnGraphicsPipeline_t* graphicsPipeline) { +void gnCommandBindGraphicsPipelineFn(gnCommandBuffer buffer, gnGraphicsPipeline graphicsPipeline) { + buffer->commandBuffer->boundGraphicsPipeline = graphicsPipeline; vkCmdBindPipeline(buffer->commandBuffer->buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline->graphicsPipeline->graphicsPipeline); } -void gnCommandSetViewportFn(struct gnCommandBuffer_t* buffer, struct gnViewport_t viewport) { +void gnCommandSetViewportFn(gnCommandBuffer buffer, gnViewport viewport) { VkViewport vkViewport = { .x = viewport.position.x, .y = viewport.size.y, @@ -48,7 +50,7 @@ void gnCommandSetViewportFn(struct gnCommandBuffer_t* buffer, struct gnViewport_ }; vkCmdSetViewport(buffer->commandBuffer->buffer, 0, 1, &vkViewport); } -void gnCommandSetScissorFn(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) { +void gnCommandSetScissorFn(gnCommandBuffer buffer, struct gnScissor_t scissor) { VkRect2D vkScissor = { .extent = { scissor.size.x, scissor.size.y }, .offset = { scissor.position.x, scissor.position.y } @@ -64,7 +66,7 @@ void gnCommandBindBufferFn(gnCommandBufferHandle buffer, gnBufferHandle bufferTo buffer->commandBuffer->boundIndexBuffer = bufferToBind; } } -void gnCommandDrawFn(struct gnCommandBuffer_t* buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { +void gnCommandDrawFn(gnCommandBuffer buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { vkCmdDraw(buffer->commandBuffer->buffer, vertexCount, instanceCount, firstVertex, firstInstance); } void gnCommandDrawIndexedFn(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance) { @@ -72,3 +74,12 @@ void gnCommandDrawIndexedFn(gnCommandBufferHandle buffer, gnIndexType type, int vkCmdDrawIndexed(buffer->commandBuffer->buffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); buffer->commandBuffer->changedBuffer = gnFalse; } + +void gnCommandBindUniformFn(gnCommandBufferHandle buffer, gnUniform uniform) { + vkCmdBindDescriptorSets( + buffer->commandBuffer->buffer, + VK_PIPELINE_BIND_POINT_GRAPHICS, + buffer->commandBuffer->boundGraphicsPipeline->graphicsPipeline->pipelineLayout, 0, 1, + &uniform->uniform->set, 0, NULL + ); +} diff --git a/src/core/command/commands/gryphn_command.c b/src/core/command/commands/gryphn_command.c index c965853..bc0d23b 100644 --- a/src/core/command/commands/gryphn_command.c +++ b/src/core/command/commands/gryphn_command.c @@ -17,6 +17,9 @@ void gnCommandSetViewport(struct gnCommandBuffer_t* buffer, struct gnViewport_t void gnCommandSetScissor(struct gnCommandBuffer_t* buffer, struct gnScissor_t scissor) { buffer->commandPool->commandFunctions->_gnCommandSetScissor(buffer, scissor); } +void gnCommandBindUniform(gnCommandBufferHandle buffer, gnUniform uniform) { + buffer->commandPool->commandFunctions->_gnCommandBindUniform(buffer, uniform); +} void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) { buffer->commandPool->commandFunctions->_gnCommandBindBuffer(buffer, bufferToBind, type); } diff --git a/src/core/command/commands/gryphn_command.h b/src/core/command/commands/gryphn_command.h index 43951b9..93820f9 100644 --- a/src/core/command/commands/gryphn_command.h +++ b/src/core/command/commands/gryphn_command.h @@ -8,6 +8,7 @@ void gnCommandEndRenderPass(gnCommandBufferHandle buffer); void gnCommandBindGraphicsPipeline(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline); void gnCommandSetViewport(gnCommandBufferHandle buffer, gnViewport viewport); void gnCommandSetScissor(gnCommandBufferHandle buffer, gnScissor scissor); +void gnCommandBindUniform(gnCommandBufferHandle buffer, gnUniform uniform); #include "core/buffers/gryphn_buffer.h" void gnCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); diff --git a/src/core/gryphn_platform_functions.h b/src/core/gryphn_platform_functions.h index 8a33299..18a8ea0 100644 --- a/src/core/gryphn_platform_functions.h +++ b/src/core/gryphn_platform_functions.h @@ -118,6 +118,7 @@ typedef struct gnCommandFunctions_t { void (*_gnCommandBindGraphicsPipeline)(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline); void (*_gnCommandSetViewport)(gnCommandBufferHandle buffer, gnViewport viewport); void (*_gnCommandSetScissor)(gnCommandBufferHandle buffer, gnScissor scissor); + void (*_gnCommandBindUniform)(gnCommandBufferHandle buffer, gnUniform uniform); void (*_gnCommandBindBuffer)(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); void (*_gnCommandDraw)(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); diff --git a/src/core/instance/init/gryphn_init.c b/src/core/instance/init/gryphn_init.c index 8693552..25a18c5 100644 --- a/src/core/instance/init/gryphn_init.c +++ b/src/core/instance/init/gryphn_init.c @@ -113,6 +113,7 @@ void gnLoadCommandFunctions(struct gnDynamicLibrary_t* lib, struct gnCommandFunc gnLoadDLLFunction(lib, functions->_gnCommandBindGraphicsPipeline, "gnCommandBindGraphicsPipelineFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetViewport, "gnCommandSetViewportFn"); gnLoadDLLFunction(lib, functions->_gnCommandSetScissor, "gnCommandSetScissorFn"); + gnLoadDLLFunction(lib, functions->_gnCommandBindUniform, "gnCommandBindUniformFn"); gnLoadDLLFunction(lib, functions->_gnCommandBindBuffer, "gnCommandBindBufferFn"); gnLoadDLLFunction(lib, functions->_gnCommandDraw, "gnCommandDrawFn"); gnLoadDLLFunction(lib, functions->_gnCommandDrawIndexed, "gnCommandDrawIndexedFn");