Skip to content
modkitv0.2

context.h

#include <modkit/context.h>20 functions · 2 structs · 1 enums · 2 typedefs · 3 macros

Render context for multi-threaded command submission.

This module provides thread-safe rendering contexts that wrap encoders. Each thread should use its own context for submitting draw commands. Usage pattern: Thread Safety Notes:Resource creation and render-visible mutation are API-thread-onlyRender-visible objects are immutable while any worker context is activeEncoders are only valid between begin/end within a single frameEach context should only be used by one thread at a timeTransient buffers are allocated from a thread-safe pool

Functions

mk_encoder_dispatch_indirectfunction

void mk_encoder_dispatch_indirect(mk_encoder_t enc, mk_view_id_t view, mk_shader_t shader, mk_indirect_buf_t indirect, uint32_t start, uint32_t num, uint8_t flags)

Dispatch compute shader indirectly via encoder.

ParameterTypeDescription
encmk_encoder_tValue for enc.
viewmk_view_id_tValue for view.
shadermk_shader_tValue for shader.
indirectmk_indirect_buf_tValue for indirect.
startuint32_tValue for start.
numuint32_tValue for num.
flagsuint8_tValue for flags.

mk_encoder_set_compute_indirectfunction

void mk_encoder_set_compute_indirect(mk_encoder_t enc, uint8_t stage, mk_indirect_buf_t buf, mk_access_t access)

Set compute indirect buffer via encoder.

ParameterTypeDescription
encmk_encoder_tValue for enc.
stageuint8_tValue for stage.
bufmk_indirect_buf_tValue for buf.
accessmk_access_tValue for access.

mk_encoder_set_conditionfunction

void mk_encoder_set_condition(mk_encoder_t enc, mk_occlusion_query_t query, bool visible)

Set condition for conditional rendering via encoder.

ParameterTypeDescription
encmk_encoder_tValue for enc.
querymk_occlusion_query_tValue for query.
visibleboolValue for visible.

mk_encoder_submit_indirectfunction

void mk_encoder_submit_indirect(mk_encoder_t enc, mk_view_id_t view, mk_shader_t shader, mk_indirect_buf_t indirect, uint32_t start, uint32_t num, uint32_t depth, uint8_t flags)

Submit indirect draw call via encoder.

ParameterTypeDescription
encmk_encoder_tValue for enc.
viewmk_view_id_tValue for view.
shadermk_shader_tValue for shader.
indirectmk_indirect_buf_tValue for indirect.
startuint32_tValue for start.
numuint32_tValue for num.
depthuint32_tValue for depth.
flagsuint8_tValue for flags.

mk_encoder_submit_occlusionfunction

void mk_encoder_submit_occlusion(mk_encoder_t enc, mk_view_id_t view, mk_shader_t shader, mk_occlusion_query_t query, uint32_t depth, uint8_t flags)

Submit draw call with occlusion query via encoder.

ParameterTypeDescription
encmk_encoder_tValue for enc.
viewmk_view_id_tValue for view.
shadermk_shader_tValue for shader.
querymk_occlusion_query_tValue for query.
depthuint32_tValue for depth.
flagsuint8_tValue for flags.

mk_indirect_buf_createfunction

mk_indirect_buf_t mk_indirect_buf_create(uint32_t num)

Create an indirect buffer.

ParameterTypeDescription
numuint32_tNumber of draw/dispatch commands the buffer can hold

Returns Buffer handle, or MK_INDIRECT_BUF_INVALID on failure

mk_indirect_buf_destroyfunction

void mk_indirect_buf_destroy(mk_indirect_buf_t buf)

Destroy an indirect buffer.

ParameterTypeDescription
bufmk_indirect_buf_tValue for buf.

mk_indirect_buf_is_validfunction

bool mk_indirect_buf_is_valid(mk_indirect_buf_t buf)

Check if indirect buffer handle is valid.

ParameterTypeDescription
bufmk_indirect_buf_tValue for buf.

Returns True when the condition holds.

mk_occlusion_query_createfunction

mk_occlusion_query_t mk_occlusion_query_create(void)

Create an occlusion query.

Returns Query handle, or MK_OCCLUSION_QUERY_INVALID on failure

mk_occlusion_query_destroyfunction

void mk_occlusion_query_destroy(mk_occlusion_query_t query)

Destroy an occlusion query.

ParameterTypeDescription
querymk_occlusion_query_tValue for query.

mk_occlusion_query_is_validfunction

bool mk_occlusion_query_is_valid(mk_occlusion_query_t query)

Check if occlusion query handle is valid.

ParameterTypeDescription
querymk_occlusion_query_tValue for query.

Returns True when the condition holds.

mk_occlusion_query_resultfunction

mk_occlusion_result_t mk_occlusion_query_result(mk_occlusion_query_t query, int32_t *result)

Get occlusion query result.

ParameterTypeDescription
querymk_occlusion_query_tQuery handle
resultint32_t *Pointer to store the number of visible pixels (can be NULL)

Returns Occlusion query result

mk_render_ctx_beginfunction

bool mk_render_ctx_begin(mk_render_ctx_t ctx)

Begin encoding commands for this frame.

Must be called before any draw commands.

ParameterTypeDescription
ctxmk_render_ctx_tContext handle

Returns true if encoding started successfully

mk_render_ctx_createfunction

mk_render_ctx_t mk_render_ctx_create(void)

Create a new render context.

Call from main thread during initialization.

Returns Context handle, or MK_RENDER_CTX_INVALID on failure

mk_render_ctx_destroyfunction

void mk_render_ctx_destroy(mk_render_ctx_t ctx)

Destroy a render context.

Call from main thread during cleanup. Context must not be in encoding state.

ParameterTypeDescription
ctxmk_render_ctx_tActive operation context.

mk_render_ctx_encoderfunction

mk_encoder_t mk_render_ctx_encoder(mk_render_ctx_t ctx)

Get the encoder for issuing draw commands.

Only valid between begin/end calls.

ParameterTypeDescription
ctxmk_render_ctx_tContext handle

Returns Encoder handle, or NULL if not encoding

mk_render_ctx_endfunction

void mk_render_ctx_end(mk_render_ctx_t ctx)

End encoding and submit all queued commands.

Must be called after all draw commands are issued.

ParameterTypeDescription
ctxmk_render_ctx_tContext handle

mk_render_ctx_idfunction

uint32_t mk_render_ctx_id(mk_render_ctx_t ctx)

Stable diagnostic identifier assigned when the context is created.

ParameterTypeDescription
ctxmk_render_ctx_tActive operation context.

Returns The resulting value.

mk_render_ctx_is_encodingfunction

bool mk_render_ctx_is_encoding(mk_render_ctx_t ctx)

Check if context is currently encoding.

ParameterTypeDescription
ctxmk_render_ctx_tContext handle

Returns true if between begin/end calls

mk_render_ctx_preparefunction

bool mk_render_ctx_prepare(mk_render_ctx_t ctx, mk_view_t opaque_view, mk_view_t transparent_view)

Bind a context to the currently open pass before dispatching its worker job.

API-thread only. The transparent view may be MK_VIEW_INVALID for opaque-only work. Captures the current frame/pass generations for stale-use validation.

ParameterTypeDescription
ctxmk_render_ctx_tActive operation context.
opaque_viewmk_view_tValue for opaque view.
transparent_viewmk_view_tValue for transparent view.

Returns True when the operation succeeds.

Structs

mk_indirect_buf_tstruct

Indirect buffer handle.

Used for indirect draw calls and compute dispatch.

FieldTypeDescription
idxuint16_tThe idx.

mk_occlusion_query_tstruct

Occlusion query handle.

Used for conditional rendering based on visibility.

FieldTypeDescription
idxuint16_tThe idx.

Enums

mk_occlusion_resultenum

Occlusion query result.

ValueDescription
MK_OCCLUSION_INVISIBLESelects invisible.
MK_OCCLUSION_VISIBLESelects visible.
MK_OCCLUSION_NORESULTSelects noresult.

Typedefs

mk_occlusion_result_ttypedef

typedef enum mk_occlusion_result mk_occlusion_result_t

Occlusion query result.

mk_render_ctx_ttypedef

typedef struct mk_render_ctx* mk_render_ctx_t

Opaque render context handle.

Wraps an encoder for thread-safe command submission.

Macros

MK_INDIRECT_BUF_INVALIDdefine

MK_INDIRECT_BUF_INVALID

Invalid sentinel for indirect buf.

MK_OCCLUSION_QUERY_INVALIDdefine

MK_OCCLUSION_QUERY_INVALID

Invalid sentinel for occlusion query.

MK_RENDER_CTX_INVALIDdefine

MK_RENDER_CTX_INVALID

Invalid sentinel for render ctx.