From 507db80fb17c835bb37925709b302bdde996b240 Mon Sep 17 00:00:00 2001 From: Piotr Krygier Date: Mon, 14 Aug 2023 14:49:57 +0200 Subject: [PATCH] Create simple thread library --- graphics/src/vulkan_base.c | 2 +- graphics/src/vulkan_buffers.c | 2 +- red_scarf_engine/CMakeLists.txt | 3 ++- red_scarf_engine/src/main.c | 5 ++++- utilities/CMakeLists.txt | 4 ++++ utilities/rse_task.h | 29 +++++++++++++++++++++++++++++ utilities/src/rse_task_linux.c | 22 ++++++++++++++++++++++ 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 utilities/rse_task.h create mode 100644 utilities/src/rse_task_linux.c diff --git a/graphics/src/vulkan_base.c b/graphics/src/vulkan_base.c index 66a60a4e..2fa50232 100644 --- a/graphics/src/vulkan_base.c +++ b/graphics/src/vulkan_base.c @@ -589,7 +589,7 @@ void draw_frame() return; } - update_uniform_buffer(); + update_uniform_buffers(); /* Only reset the fence if we are submitting work */ vkResetFences(g_vulkan_state.device, 1, &g_in_flight_fences[g_vulkan_state.current_frame]); diff --git a/graphics/src/vulkan_buffers.c b/graphics/src/vulkan_buffers.c index 3307bb48..11b327e3 100644 --- a/graphics/src/vulkan_buffers.c +++ b/graphics/src/vulkan_buffers.c @@ -304,7 +304,7 @@ uint8_t allocate_command_buffers() * @brief Update uniform buffers * */ -void update_uniform_buffer() +void update_uniform_buffers() { struct rse_uniform_buffer_object_t ubo = {}; struct vec3_t eye = {0}; diff --git a/red_scarf_engine/CMakeLists.txt b/red_scarf_engine/CMakeLists.txt index 60c2f691..df81ca25 100644 --- a/red_scarf_engine/CMakeLists.txt +++ b/red_scarf_engine/CMakeLists.txt @@ -4,4 +4,5 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}) target_link_libraries(${PROJECT_NAME} PRIVATE - rse_graphics) \ No newline at end of file + rse_graphics + rse_utilities) \ No newline at end of file diff --git a/red_scarf_engine/src/main.c b/red_scarf_engine/src/main.c index 2cc6c999..b1a49570 100644 --- a/red_scarf_engine/src/main.c +++ b/red_scarf_engine/src/main.c @@ -1,12 +1,15 @@ #include "graphics/rse_graphics.h" +#include "utilities/rse_task.h" int main(int argc, char** argv) { + rse_thread_t graphics_task; (void)argc; (void)argv; rse_graphics_init(); - rse_graphics_run(); + rse_create_task(&graphics_task, (thread_worker_t)rse_graphics_run, NULL); + rse_task_join(&graphics_task); return 0; } diff --git a/utilities/CMakeLists.txt b/utilities/CMakeLists.txt index 61d48fe4..243a3843 100644 --- a/utilities/CMakeLists.txt +++ b/utilities/CMakeLists.txt @@ -7,4 +7,8 @@ target_include_directories(rse_utilities PRIVATE target_sources(rse_utilities PRIVATE src/file_utils.c src/logger.c + src/rse_task_linux.c ) + +target_link_libraries(rse_utilities PRIVATE + pthread) diff --git a/utilities/rse_task.h b/utilities/rse_task.h new file mode 100644 index 00000000..615536b8 --- /dev/null +++ b/utilities/rse_task.h @@ -0,0 +1,29 @@ +/** + * @file rse_task.h + * @author Piotr Krygier (everyonecancode@gmail.com) + * @brief Threads wrapper + * @version 0.1 + * @date 2023-08-14 + * + * @copyright Copyright (c) 2023 + * + */ + +#ifndef RSE_THREADS_H +#define RSE_THREADS_H + +#include + +#ifdef __linux__ +#include +typedef pthread_t rse_thread_t; +#endif + +typedef void*(*thread_worker_t)(void*); + +uint8_t rse_create_task(rse_thread_t* thread_id, thread_worker_t callback, void* args); +uint8_t rse_task_join(rse_thread_t* thread_id); +void rse_task_delay(void); + + +#endif /* RSE_THREADS_H */ \ No newline at end of file diff --git a/utilities/src/rse_task_linux.c b/utilities/src/rse_task_linux.c new file mode 100644 index 00000000..bfe2a09c --- /dev/null +++ b/utilities/src/rse_task_linux.c @@ -0,0 +1,22 @@ +#include "rse_task.h" + +uint8_t rse_create_task(rse_thread_t* thread_id, thread_worker_t callback, void* args) +{ + uint8_t result = 0; + + result = pthread_create(thread_id, NULL, callback, args); + + return result; //TODO: Do error handling +} + +uint8_t rse_task_join(rse_thread_t* thread_id) +{ + uint8_t result = 0; + + result = pthread_join(*thread_id, NULL); + + return result; //TODO: Do error handling +} + +void rse_task_delay(void) +{} \ No newline at end of file