finish function validator

This commit is contained in:
Greg Wells
2025-06-29 07:45:12 -04:00
parent 7802f567c2
commit 076aba13cf
5 changed files with 136 additions and 23 deletions

View File

@@ -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 <core/src/debugger/gryphn_debugger.h>
#include <core/src/instance/gryphn_instance.h>
#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);
}

View File

@@ -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);

View File

@@ -1,4 +1,5 @@
#include "device_functions.h" #include "device_functions.h"
#include "loader_utils.h"
#include "core/src/debugger/gryphn_debugger.h" #include "core/src/debugger/gryphn_debugger.h"
#include "core/src/presentation_queue/gryphn_presentation_queue.h" #include "core/src/presentation_queue/gryphn_presentation_queue.h"
#include "core/src/shader_module/gryphn_shader_module.h" #include "core/src/shader_module/gryphn_shader_module.h"
@@ -68,28 +69,6 @@ void checkDestroyShaderModule(gnShaderModuleHandle module){
nextLayer->deviceFunctions._gnDestroyShaderModule(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) { gnReturnCode checkCreateRenderPassDescriptor(gnRenderPassDescriptorHandle renderPass, gnOutputDeviceHandle device, gnRenderPassDescriptorInfo info) {
CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnCreateRenderPassDescriptor, renderPass, device, info); CHECK_FUNCTION_WITH_RETURN_CODE(device->instance, _gnCreateRenderPassDescriptor, renderPass, device, info);
} }

View File

@@ -1,6 +1,7 @@
#include "function_loader.h" #include "function_loader.h"
#include "instance_functions.h" #include "instance_functions.h"
#include "device_functions.h" #include "device_functions.h"
#include "command_functions.h"
gnInstanceFunctions loadFunctionLoaderInstanceFunctions() { gnInstanceFunctions loadFunctionLoaderInstanceFunctions() {
return (gnInstanceFunctions){ return (gnInstanceFunctions){
@@ -89,6 +90,21 @@ gnDeviceFunctions loadFunctionLoaderDeviceFunctions() {
} }
gnCommandFunctions loadFunctionLoaderCommandFunctions() { gnCommandFunctions loadFunctionLoaderCommandFunctions() {
return (gnCommandFunctions){ 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,
}; };
} }

View File

@@ -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__);