Add interface for command buffers

This commit is contained in:
Kevin Trogant 2024-02-09 10:20:00 +01:00
parent 765e263979
commit b44b3e651b
7 changed files with 55 additions and 8 deletions

View File

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

View File

@ -0,0 +1,6 @@
#ifndef RT_COMMAND_BUFFERS_H
#define RT_COMMAND_BUFFERS_H
#include "runtime/runtime.h"
#endif

View File

@ -9,11 +9,13 @@ if vk_dep.found()
vk_inc_dep = vk_dep.partial_dependency(compile_args : true, includes : true) vk_inc_dep = vk_dep.partial_dependency(compile_args : true, includes : true)
vk_renderer_lib = library('rtvk', vk_renderer_lib = library('rtvk',
# Project Sources # Project Sources
'command_buffers.h',
'gpu.h', 'gpu.h',
'pipelines.h', 'pipelines.h',
'render_targets.h', 'render_targets.h',
'swapchain.h', 'swapchain.h',
'command_buffers.c',
'helper.c', 'helper.c',
'init.c', 'init.c',
'pipelines.c', 'pipelines.c',

View File

@ -18,7 +18,8 @@ rt_renderer_api g_renderer;
static rt_dynlib _renderer_lib; static rt_dynlib _renderer_lib;
static bool _renderer_loaded = false; 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 #ifdef RT_STATIC_LIB
extern void RT_RENDERER_API_FN(RegisterCVars)(void); 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 extern rt_render_target_handle
RT_RENDERER_API_FN(CreateRenderTarget)(const rt_render_target_info *); RT_RENDERER_API_FN(CreateRenderTarget)(const rt_render_target_info *);
extern void RT_RENDERER_API_FN(DestroyRenderTarget)(rt_render_target_handle); 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 #endif
extern rt_result InitFramegraphManager(void); extern rt_result InitFramegraphManager(void);
@ -59,6 +66,8 @@ static bool LoadRenderer(void) {
RETRIEVE_SYMBOL(DestroyPipeline, rt_destroy_pipeline_fn); RETRIEVE_SYMBOL(DestroyPipeline, rt_destroy_pipeline_fn);
RETRIEVE_SYMBOL(CreateRenderTarget, rt_create_render_target_fn); RETRIEVE_SYMBOL(CreateRenderTarget, rt_create_render_target_fn);
RETRIEVE_SYMBOL(DestroyRenderTarget, rt_destroy_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 { } else {
rtReportError("GFX", rtReportError("GFX",
"Unsupported renderer backend: (%s) %s", "Unsupported renderer backend: (%s) %s",
@ -75,6 +84,8 @@ static bool LoadRenderer(void) {
g_renderer.DestroyPipeline = &rtRenDestroyPipeline; g_renderer.DestroyPipeline = &rtRenDestroyPipeline;
g_renderer.CreateRenderTarget = &rtRenCreateRenderTarget; g_renderer.CreateRenderTarget = &rtRenCreateRenderTarget;
g_renderer.DestroyRenderTarget = &rtRenDestroyRenderTarget; g_renderer.DestroyRenderTarget = &rtRenDestroyRenderTarget;
g_renderer.AllocCommandBuffers = &rtRenAllocCommandBuffers;
g_renderer.SubmitCommandBuffers = &rtRenSubmitCommandBuffers;
#endif #endif
return true; return true;
} }

View File

@ -18,6 +18,7 @@ runtime_lib = library('rt',
'jobs.h', 'jobs.h',
'main_loop.h', 'main_loop.h',
'mem_arena.h', 'mem_arena.h',
'render_list.h',
'renderer_api.h', 'renderer_api.h',
'resources.h', 'resources.h',
'runtime.h', 'runtime.h',

View File

@ -0,0 +1,4 @@
#ifndef RT_RENDER_LIST_H
#define RT_RENDER_LIST_H
#endif

View File

@ -99,6 +99,7 @@ typedef struct {
RT_RENDER_BACKEND_HANDLE(rt_pipeline_handle); RT_RENDER_BACKEND_HANDLE(rt_pipeline_handle);
RT_RENDER_BACKEND_HANDLE(rt_render_target_handle); RT_RENDER_BACKEND_HANDLE(rt_render_target_handle);
RT_RENDER_BACKEND_HANDLE(rt_render_command_buffer_handle); RT_RENDER_BACKEND_HANDLE(rt_render_command_buffer_handle);
RT_RENDER_BACKEND_HANDLE(rt_gpu_semaphore_handle);
#undef RT_RENDER_BACKEND_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 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 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 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 { typedef struct {
rt_register_renderer_cvars_fn *RegisterCVars; rt_register_renderer_cvars_fn *RegisterCVars;
@ -118,6 +125,8 @@ typedef struct {
rt_destroy_pipeline_fn *DestroyPipeline; rt_destroy_pipeline_fn *DestroyPipeline;
rt_create_render_target_fn *CreateRenderTarget; rt_create_render_target_fn *CreateRenderTarget;
rt_destroy_render_target_fn *DestroyRenderTarget; rt_destroy_render_target_fn *DestroyRenderTarget;
rt_alloc_command_buffers_fn *AllocCommandBuffers;
rt_submit_command_buffers_fn *SubmitCommandBuffers;
} rt_renderer_api; } rt_renderer_api;
#define RT_RENDERER_API_FN(name) RT_DLLEXPORT rtRen##name #define RT_RENDERER_API_FN(name) RT_DLLEXPORT rtRen##name