diff --git a/src/renderer/vk/command_buffers.c b/src/renderer/vk/command_buffers.c new file mode 100644 index 0000000..4f546b1 --- /dev/null +++ b/src/renderer/vk/command_buffers.c @@ -0,0 +1,14 @@ +#include "runtime/renderer_api.h" + +rt_result +RT_RENDERER_API_FN(AllocCommandBuffers)(uint32_t count, + rt_render_command_buffer_handle *p_command_buffers, + rt_gpu_semaphore_handle *p_semaphores) { + return RT_SUCCESS; +} + +rt_result +RT_RENDERER_API_FN(SubmitCommandBuffers)(uint32_t count, + const rt_render_command_buffer_handle *command_buffers) { + return RT_SUCCESS; +} \ No newline at end of file diff --git a/src/renderer/vk/command_buffers.h b/src/renderer/vk/command_buffers.h new file mode 100644 index 0000000..2a8ecf7 --- /dev/null +++ b/src/renderer/vk/command_buffers.h @@ -0,0 +1,6 @@ +#ifndef RT_COMMAND_BUFFERS_H +#define RT_COMMAND_BUFFERS_H + +#include "runtime/runtime.h" + +#endif diff --git a/src/renderer/vk/meson.build b/src/renderer/vk/meson.build index 438f1f7..f3c002e 100644 --- a/src/renderer/vk/meson.build +++ b/src/renderer/vk/meson.build @@ -9,11 +9,13 @@ if vk_dep.found() vk_inc_dep = vk_dep.partial_dependency(compile_args : true, includes : true) vk_renderer_lib = library('rtvk', # Project Sources + 'command_buffers.h', 'gpu.h', 'pipelines.h', 'render_targets.h', 'swapchain.h', + 'command_buffers.c', 'helper.c', 'init.c', 'pipelines.c', diff --git a/src/runtime/gfx_main.c b/src/runtime/gfx_main.c index 80b39f8..7f9f6d7 100644 --- a/src/runtime/gfx_main.c +++ b/src/runtime/gfx_main.c @@ -18,7 +18,8 @@ rt_renderer_api g_renderer; static rt_dynlib _renderer_lib; static bool _renderer_loaded = false; -RT_DLLEXPORT RT_CVAR_S(rt_Renderer, "Select the render backend. Available options: [vk], Default: vk", "vk"); +RT_DLLEXPORT +RT_CVAR_S(rt_Renderer, "Select the render backend. Available options: [vk], Default: vk", "vk"); #ifdef RT_STATIC_LIB extern void RT_RENDERER_API_FN(RegisterCVars)(void); @@ -29,6 +30,12 @@ extern void RT_RENDERER_API_FN(DestroyPipeline)(rt_pipeline_handle); extern rt_render_target_handle RT_RENDERER_API_FN(CreateRenderTarget)(const rt_render_target_info *); extern void RT_RENDERER_API_FN(DestroyRenderTarget)(rt_render_target_handle); +extern rt_result + RT_RENDERER_API_FN(AllocCommandBuffers)(uint32_t count, + rt_render_command_buffer_handle *p_command_buffers, + rt_gpu_semaphore_handle *p_semaphores); +extern rt_result RT_RENDERER_API_FN( + SubmitCommandBuffers)(uint32_t count, const rt_render_command_buffer_handle *command_buffers); #endif extern rt_result InitFramegraphManager(void); @@ -59,6 +66,8 @@ static bool LoadRenderer(void) { RETRIEVE_SYMBOL(DestroyPipeline, rt_destroy_pipeline_fn); RETRIEVE_SYMBOL(CreateRenderTarget, rt_create_render_target_fn); RETRIEVE_SYMBOL(DestroyRenderTarget, rt_destroy_render_target_fn); + RETRIEVE_SYMBOL(AllocCommandBuffers, rt_alloc_command_buffers_fn); + RETRIEVE_SYMBOL(SubmitCommandBuffers, rt_submit_command_buffers_fn); } else { rtReportError("GFX", "Unsupported renderer backend: (%s) %s", @@ -68,13 +77,15 @@ static bool LoadRenderer(void) { } #undef RETRIEVE_SYMBOL #else - g_renderer.RegisterCVars = &rtRenRegisterCVars; - g_renderer.Init = &rtRenInit; - g_renderer.Shutdown = &rtRenShutdown; - g_renderer.CompilePipeline = &rtRenCompilePipeline; - g_renderer.DestroyPipeline = &rtRenDestroyPipeline; - g_renderer.CreateRenderTarget = &rtRenCreateRenderTarget; - g_renderer.DestroyRenderTarget = &rtRenDestroyRenderTarget; + g_renderer.RegisterCVars = &rtRenRegisterCVars; + g_renderer.Init = &rtRenInit; + g_renderer.Shutdown = &rtRenShutdown; + g_renderer.CompilePipeline = &rtRenCompilePipeline; + g_renderer.DestroyPipeline = &rtRenDestroyPipeline; + g_renderer.CreateRenderTarget = &rtRenCreateRenderTarget; + g_renderer.DestroyRenderTarget = &rtRenDestroyRenderTarget; + g_renderer.AllocCommandBuffers = &rtRenAllocCommandBuffers; + g_renderer.SubmitCommandBuffers = &rtRenSubmitCommandBuffers; #endif return true; } diff --git a/src/runtime/meson.build b/src/runtime/meson.build index 258f84e..8f4d0aa 100644 --- a/src/runtime/meson.build +++ b/src/runtime/meson.build @@ -18,6 +18,7 @@ runtime_lib = library('rt', 'jobs.h', 'main_loop.h', 'mem_arena.h', + 'render_list.h', 'renderer_api.h', 'resources.h', 'runtime.h', diff --git a/src/runtime/render_list.h b/src/runtime/render_list.h new file mode 100644 index 0000000..4bf7052 --- /dev/null +++ b/src/runtime/render_list.h @@ -0,0 +1,4 @@ +#ifndef RT_RENDER_LIST_H +#define RT_RENDER_LIST_H + +#endif diff --git a/src/runtime/renderer_api.h b/src/runtime/renderer_api.h index 77fd587..8604a0d 100644 --- a/src/runtime/renderer_api.h +++ b/src/runtime/renderer_api.h @@ -99,6 +99,7 @@ typedef struct { RT_RENDER_BACKEND_HANDLE(rt_pipeline_handle); RT_RENDER_BACKEND_HANDLE(rt_render_target_handle); RT_RENDER_BACKEND_HANDLE(rt_render_command_buffer_handle); +RT_RENDER_BACKEND_HANDLE(rt_gpu_semaphore_handle); #undef RT_RENDER_BACKEND_HANDLE @@ -109,6 +110,12 @@ typedef rt_pipeline_handle rt_compile_pipeline_fn(const rt_pipeline_info *info); typedef void rt_destroy_pipeline_fn(rt_pipeline_handle handle); typedef rt_render_target_handle rt_create_render_target_fn(const rt_render_target_info *info); typedef void rt_destroy_render_target_fn(rt_render_target_handle handle); +typedef rt_result rt_alloc_command_buffers_fn(uint32_t count, + rt_render_command_buffer_handle *p_command_buffers, + rt_gpu_semaphore_handle *p_semaphores); +typedef rt_result +rt_submit_command_buffers_fn(uint32_t count, + const rt_render_command_buffer_handle *command_buffers); typedef struct { rt_register_renderer_cvars_fn *RegisterCVars; @@ -118,6 +125,8 @@ typedef struct { rt_destroy_pipeline_fn *DestroyPipeline; rt_create_render_target_fn *CreateRenderTarget; rt_destroy_render_target_fn *DestroyRenderTarget; + rt_alloc_command_buffers_fn *AllocCommandBuffers; + rt_submit_command_buffers_fn *SubmitCommandBuffers; } rt_renderer_api; #define RT_RENDERER_API_FN(name) RT_DLLEXPORT rtRen##name