summaryrefslogtreecommitdiff
path: root/include/celeritas.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/celeritas.h')
-rw-r--r--include/celeritas.h112
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