diff options
Diffstat (limited to 'include/celeritas.h')
-rw-r--r-- | include/celeritas.h | 112 |
1 files changed, 100 insertions, 12 deletions
diff --git a/include/celeritas.h b/include/celeritas.h index 3dc3761..420a63b 100644 --- a/include/celeritas.h +++ b/include/celeritas.h @@ -120,15 +120,18 @@ void _cel_push_error(int error_code); // --- Memory facilities: Allocators, helpers -/** @brief Fixed-size arena allocator */ -typedef struct fixed_arena { - void* storage; - size_t size; +typedef struct arena { + u8* storage; + u8* curr; + u8* end; size_t alignment; - int index; -} fixed_arena; + bool can_grow; +} arena; + +/** @brief Fixed-size arena allocator */ +typedef struct arena fixed_arena; -/** @brief Create a new fixed arena with the provided storage. */ +/** @brief Create a new fixed size arena with the provided storage. */ fixed_arena fixed_arena_new(void* backing_buffer, size_t size, size_t alignment); /** @@ -195,6 +198,18 @@ u32 void_pool_insert(void_pool* pool, void* item); // --- Strings +/** + * @brief Fat pointer representing a UTF8 encoded string + * @note when using `printf` you must use %s.*s length, string until our own modified + print routines are written. alternatively wrap in `cstr()` and pass to `%s`. + */ +typedef struct { + u8* buf; + size_t len; +} str8; + +bool str8_equals(str8 a, str8 b); + // --- Logging // Log levels @@ -375,13 +390,33 @@ typedef enum gpu_tex_type { TEXTURE_TYPE_COUNT } gpu_tex_type; -/** @brief Texture Description - used by texture creation functions */ +/** @brief Buffer Description - used by buffer creation functions and for internal bookkeeping */ +typedef struct buffer_desc { + const char* label; + u64 size; +} buffer_desc; + +/** @brief Texture Description - used by texture creation functions and for internal bookkeeping */ typedef struct texture_desc { gpu_tex_type tex_type; // GPU_TextureFormat format; int width, height, num_channels; } texture_desc; +typedef struct buffer_region { + buf_handle buffer; + u64 offset; + u64 size; +} buffer_region; + +typedef struct texture_region { + tex_handle texture; + u32 layer; + u32 x, y, z; + u32 width, height, depth; + // todo: mip level +} texture_region; + /// @strip_prefix(ATTR_) typedef enum vertex_attrib_type { ATTR_F32, @@ -480,6 +515,9 @@ typedef struct compute_pipeline_desc { /* TODO */ typedef struct render_pass_desc { } render_pass_desc; +typedef struct compute_pass_desc { +} compute_pass_desc; + // --- RAL Functions // Resources @@ -492,10 +530,11 @@ tex_handle ral_texture_load_from_file(const char* filepath); void ral_texture_destroy(tex_handle handle); // Encoders / cmd buffers -/** @brief grabs a new command encoder from the pool of available ones and begins recording */ +/** @brief Grabs a new command encoder from the pool of available ones and begins recording */ gpu_encoder* ral_render_encoder(render_pass_desc rpass_desc); -gpu_compute_encoder ral_compute_encoder(); +/** @brief Grabs a new compute pass encoder and begins recording */ +gpu_compute_encoder ral_compute_encoder(compute_pass_desc cpass_desc); void ral_encoder_finish(gpu_encoder* enc); void ral_encoder_submit(gpu_encoder* enc); @@ -523,7 +562,7 @@ void ral_backend_resize_framebuffer(int width, int height); // Frame lifecycle -/** @brief A function pointer to a function that should be called with any prepared graphics resources for a frame +/** @brief A function pointer to a function that is called with any prepared graphics resources for a frame + access to the renderer. */ typedef void (*scoped_draw_commands)(); // callback that we run our draw commands within. // allows us to wrap some api-specific behaviour @@ -625,10 +664,21 @@ mat4 camera_view_proj(camera camera, f32 lens_height, f32 lens_width, mat4* out_ // --- Game and model data +/** + * @brief + * @details A 'model' is a fairly complex construct within the Celeritas renderer comprised of multiple cpu & gpu resources. + */ typedef struct model { } model; -model_handle model_load_from_gltf(const char* path); +/** + * @brief + * @note The memory required to load the GLTF is handled by the system, hence no arena parameter. On fail that temporary allocation + * will be freed for you. + * @param filepath path to the .gltf file + * @return model_handle + */ +model_handle model_load_from_gltf(const char* filepath); // --- Animation @@ -669,4 +719,42 @@ typedef struct animation_spline { // --- Platform +/** @brief Loads the contents at a filepath into a string */ +str8 plat_load_string_from_file(arena* a, const char* filepath); + +// synchronisation primitives +/** wrapper around a platform specific mutex */ +typedef struct plat_mutex plat_mutex; + +/** @brief Locks the mutex, blocking until its available */ +void plat_mutex_lock(plat_mutex* mutex); + +/** @brief Tries to lock the mutex but if it is already acquired by something else, will return immediately with false */ +bool plat_mutex_try_lock(plat_mutex* mutex); + +/** @brief Releases the lock allowing other threads to acquire it */ +void plat_mutex_unlock(plat_mutex* mutex); + +typedef struct plat_thread plat_thread; + // --- Audio + +// --- Threadpool + +typedef struct ring_queue { + +} ring_queue; + +typedef struct threadpool_worker {} threadpool_worker; + +#define MAX_THREADPOOL_WORKERS 32 + +typedef struct threadpool { + ring_queue task_queue; + plat_mutex* task_queue_lock; + // todo: atomic u16 remaining tasks + threadpool_worker workers[MAX_THREADPOOL_WORKERS]; + size_t n_workers; +} threadpool; + +void threadpool_add_task();
\ No newline at end of file |