diff --git a/projects/validation_layers/function_loader/loader/command_functions.c b/projects/validation_layers/function_loader/loader/command_functions.c new file mode 100644 index 0000000..cbf27e7 --- /dev/null +++ b/projects/validation_layers/function_loader/loader/command_functions.c @@ -0,0 +1,56 @@ +#include "command_functions.h" +#include "core/src/command/command_pool/gryphn_command_pool.h" +#include "core/src/command/command_buffer/gryphn_command_buffer.h" +#include "core/src/output_device/gryphn_output_device.h" +#include +#include +#include "core/src/renderpass/gryphn_render_pass.h" +#include "core/src/pipelines/graphics_pipeline/gryphn_graphics_pipeline.h" +#include "core/src/buffers/gryphn_buffer.h" +#include "loader_utils.h" + +gnReturnCode checkCommandPoolAllocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool) { + CHECK_FUNCTION_WITH_RETURN_CODE_COMMAND(pool->device->instance, _gnCommandPoolAllocateCommandBuffers, commandBuffers, count, pool); +} +gnReturnCode checkBeginCommandBuffer(gnCommandBufferHandle commandBuffer) { + CHECK_FUNCTION_WITH_RETURN_CODE_COMMAND(commandBuffer->instance, _gnBeginCommandBuffer, commandBuffer); +} +void checkResetCommandBuffer(gnCommandBufferHandle commandBuffer) { + CHECK_VOID_FUNCTION_COMMAND(commandBuffer->instance, _gnResetCommandBuffer, commandBuffer); +} +gnReturnCode checkEndCommandBuffer(gnCommandBufferHandle commandBuffer) { + CHECK_FUNCTION_WITH_RETURN_CODE_COMMAND(commandBuffer->instance, _gnEndCommandBuffer, commandBuffer); +} + +void checkCommandBeginRenderPass(gnCommandBufferHandle buffer, gnRenderPassInfo passInfo) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandBeginRenderPass, buffer, passInfo); +} +void checkCommandEndRenderPass(gnCommandBufferHandle buffer) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandEndRenderPass, buffer); +} + +void checkCommandBindGraphicsPipeline(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandBindGraphicsPipeline, buffer, graphicsPipeline); +} +void checkCommandSetViewport(gnCommandBufferHandle buffer, gnViewport viewport) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandSetViewport, buffer, viewport); +} +void checkCommandSetScissor(gnCommandBufferHandle buffer, gnScissor scissor) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandSetScissor, buffer, scissor); +} +void checkCommandBindUniform(gnCommandBufferHandle buffer, gnUniform uniform, uint32_t set) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandBindUniform, buffer, uniform, set); +} +void checkCommandPushConstant(gnCommandBufferHandle buffer, gnPushConstantLayout layout, void* data) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandPushConstant, buffer, layout, data); +} + +void checkCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandBindBuffer, buffer, bufferToBind, type); +} +void checkCommandDraw(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandDraw, buffer, vertexCount, firstVertex, instanceCount, firstInstance); +} +void checkCommandDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance) { + CHECK_VOID_FUNCTION_COMMAND(buffer->instance, _gnCommandDrawIndexed, buffer, type, indexCount, firstIndex, vertexOffset, instanceCount, firstInstance); +} diff --git a/projects/validation_layers/function_loader/loader/command_functions.h b/projects/validation_layers/function_loader/loader/command_functions.h new file mode 100644 index 0000000..fdc110c --- /dev/null +++ b/projects/validation_layers/function_loader/loader/command_functions.h @@ -0,0 +1,19 @@ +#include "loader/src/gryphn_command_functions.h" + +gnReturnCode checkCommandPoolAllocateCommandBuffers(gnCommandBufferHandle* commandBuffers, uint32_t count, gnCommandPoolHandle pool); +gnReturnCode checkBeginCommandBuffer(gnCommandBufferHandle commandBuffer); +void checkResetCommandBuffer(gnCommandBufferHandle commandBuffer); +gnReturnCode checkEndCommandBuffer(gnCommandBufferHandle commandBuffer); + +void checkCommandBeginRenderPass(gnCommandBufferHandle buffer, gnRenderPassInfo passInfo); +void checkCommandEndRenderPass(gnCommandBufferHandle buffer); + +void checkCommandBindGraphicsPipeline(gnCommandBufferHandle buffer, gnGraphicsPipelineHandle graphicsPipeline); +void checkCommandSetViewport(gnCommandBufferHandle buffer, gnViewport viewport); +void checkCommandSetScissor(gnCommandBufferHandle buffer, gnScissor scissor); +void checkCommandBindUniform(gnCommandBufferHandle buffer, gnUniform uniform, uint32_t set); +void checkCommandPushConstant(gnCommandBufferHandle buffer, gnPushConstantLayout layout, void* data); + +void checkCommandBindBuffer(gnCommandBufferHandle buffer, gnBufferHandle bufferToBind, gnBufferType type); +void checkCommandDraw(gnCommandBufferHandle buffer, int vertexCount, int firstVertex, int instanceCount, int firstInstance); +void checkCommandDrawIndexed(gnCommandBufferHandle buffer, gnIndexType type, int indexCount, int firstIndex, int vertexOffset, int instanceCount, int firstInstance); diff --git a/projects/validation_layers/function_loader/loader/device_functions.c b/projects/validation_layers/function_loader/loader/device_functions.c index 644f517..e32360a 100644 --- a/projects/validation_layers/function_loader/loader/device_functions.c +++ b/projects/validation_layers/function_loader/loader/device_functions.c @@ -1,4 +1,5 @@ #include "device_functions.h" +#include "loader_utils.h" #include "core/src/debugger/gryphn_debugger.h" #include "core/src/presentation_queue/gryphn_presentation_queue.h" #include "core/src/shader_module/gryphn_shader_module.h" @@ -68,28 +69,6 @@ void checkDestroyShaderModule(gnShaderModuleHandle module){ nextLayer->deviceFunctions._gnDestroyShaderModule(module); } -#define CHECK_FUNCTION_WITH_RETURN_CODE(instance, function, ...) \ -loaderLayer* nextLayer = loaderGetNextLayer(instance); \ -if (nextLayer->deviceFunctions.function == NULL) { \ - gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ - .message = gnCreateString("Failed to load destroy " #function " function") \ - }); \ - resetLayer(instance); \ - return GN_FAILED_TO_LOAD_FUNCTION; \ -} \ -return nextLayer->deviceFunctions.function(__VA_ARGS__); - -#define CHECK_VOID_FUNCTION(instance, function, ...) \ -loaderLayer* nextLayer = loaderGetNextLayer(instance); \ -if (nextLayer->deviceFunctions.function == NULL) { \ - gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ - .message = gnCreateString("Failed to load destroy " #function " function") \ - }); \ - resetLayer(instance); \ - return; \ -} \ -nextLayer->deviceFunctions.function(__VA_ARGS__); - gnReturnCode checkCreateRenderPassDescriptor(gnRenderPassDescriptorHandle renderPass, gnOutputDeviceHandle device, gnRenderPassDescriptorInfo info) { CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnCreateRenderPassDescriptor, renderPass, device, info); } diff --git a/projects/validation_layers/function_loader/loader/function_loader.c b/projects/validation_layers/function_loader/loader/function_loader.c index d955f61..dcda9ef 100644 --- a/projects/validation_layers/function_loader/loader/function_loader.c +++ b/projects/validation_layers/function_loader/loader/function_loader.c @@ -1,6 +1,7 @@ #include "function_loader.h" #include "instance_functions.h" #include "device_functions.h" +#include "command_functions.h" gnInstanceFunctions loadFunctionLoaderInstanceFunctions() { return (gnInstanceFunctions){ @@ -89,6 +90,21 @@ gnDeviceFunctions loadFunctionLoaderDeviceFunctions() { } gnCommandFunctions loadFunctionLoaderCommandFunctions() { return (gnCommandFunctions){ - NULL + ._gnCommandPoolAllocateCommandBuffers = checkCommandPoolAllocateCommandBuffers, + ._gnBeginCommandBuffer = checkBeginCommandBuffer, + ._gnResetCommandBuffer = checkResetCommandBuffer, + ._gnEndCommandBuffer = checkEndCommandBuffer, + + ._gnCommandBeginRenderPass = checkCommandBeginRenderPass, + ._gnCommandEndRenderPass = checkCommandEndRenderPass, + ._gnCommandBindGraphicsPipeline = checkCommandBindGraphicsPipeline, + ._gnCommandSetViewport = checkCommandSetViewport, + ._gnCommandSetScissor = checkCommandSetScissor, + ._gnCommandBindUniform = checkCommandBindUniform, + ._gnCommandPushConstant = checkCommandPushConstant, + + ._gnCommandBindBuffer = checkCommandBindBuffer, + ._gnCommandDraw = checkCommandDraw, + ._gnCommandDrawIndexed = checkCommandDrawIndexed, }; } diff --git a/projects/validation_layers/function_loader/loader/loader_utils.h b/projects/validation_layers/function_loader/loader/loader_utils.h new file mode 100644 index 0000000..d582a96 --- /dev/null +++ b/projects/validation_layers/function_loader/loader/loader_utils.h @@ -0,0 +1,43 @@ +#define CHECK_FUNCTION_WITH_RETURN_CODE(instance, function, ...) \ +loaderLayer* nextLayer = loaderGetNextLayer(instance); \ +if (nextLayer->deviceFunctions.function == NULL) { \ + gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ + .message = gnCreateString("Failed to load destroy " #function " function") \ + }); \ + resetLayer(instance); \ + return GN_FAILED_TO_LOAD_FUNCTION; \ +} \ +return nextLayer->deviceFunctions.function(__VA_ARGS__); + +#define CHECK_FUNCTION_WITH_RETURN_CODE_COMMAND(instance, function, ...) \ +loaderLayer* nextLayer = loaderGetNextLayer(instance); \ +if (nextLayer->commandFunctions.function == NULL) { \ + gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ + .message = gnCreateString("Failed to load destroy " #function " function") \ + }); \ + resetLayer(instance); \ + return GN_FAILED_TO_LOAD_FUNCTION; \ +} \ +return nextLayer->commandFunctions.function(__VA_ARGS__); + +#define CHECK_VOID_FUNCTION(instance, function, ...) \ +loaderLayer* nextLayer = loaderGetNextLayer(instance); \ +if (nextLayer->deviceFunctions.function == NULL) { \ + gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ + .message = gnCreateString("Failed to load destroy " #function " function") \ + }); \ + resetLayer(instance); \ + return; \ +} \ +nextLayer->deviceFunctions.function(__VA_ARGS__); + +#define CHECK_VOID_FUNCTION_COMMAND(instance, function, ...) \ +loaderLayer* nextLayer = loaderGetNextLayer(instance); \ +if (nextLayer->commandFunctions.function == NULL) { \ + gnDebuggerSetErrorMessage(instance->debugger, (gnMessageData){ \ + .message = gnCreateString("Failed to load destroy " #function " function") \ + }); \ + resetLayer(instance); \ + return; \ +} \ +nextLayer->commandFunctions.function(__VA_ARGS__);