Kohi Game Engine
vulkan_backend.h
Go to the documentation of this file.
1 
14 #pragma once
15 
16 #include "core_render_types.h"
18 
19 struct shader_uniform;
20 struct frame_data;
21 struct kwindow;
22 
25 
29 
30 void vulkan_renderer_begin_debug_label(renderer_backend_interface* backend, const char* label_text, vec3 colour);
33 
38 b8 vulkan_renderer_frame_present(renderer_backend_interface* backend, struct kwindow* window, struct frame_data* p_frame_data);
39 
46 
52 void vulkan_renderer_set_depth_bias(struct renderer_backend_interface* backend, f32 constant_factor, f32 clamp, f32 slope_factor);
56 
57 void vulkan_renderer_begin_rendering(struct renderer_backend_interface* backend, struct frame_data* p_frame_data, rect_2di render_area, u32 colour_target_count, ktexture* colour_targets, ktexture depth_stencil_target, u32 depth_stencil_layer);
58 void vulkan_renderer_end_rendering(struct renderer_backend_interface* backend, struct frame_data* p_frame_data);
59 
62 
70 
71 b8 vulkan_renderer_texture_resources_acquire(renderer_backend_interface* backend, ktexture t, const char* name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags);
73 
75 b8 vulkan_renderer_texture_write_data(renderer_backend_interface* backend, ktexture t, u32 offset, u32 size, const u8* pixels, b8 include_in_frame_workload);
78 
81  kshader shader,
82  kname name,
83  shader_flags flags,
84  primitive_topology_type_bits topology_types,
85  primitive_topology_type default_topology,
86  u8 colour_attachment_count,
87  kpixel_format* colour_attachment_formats,
88  kpixel_format depth_attachment_format,
89  kpixel_format stencil_attachment_format,
90  u8 pipeline_count,
91  shader_pipeline_config* pipelines,
92  u8 binding_set_count,
93  const shader_binding_set_config* binding_sets);
95 
97 b8 vulkan_renderer_shader_use(renderer_backend_interface* backend, kshader shader, u8 vertex_layout_index);
103 b8 vulkan_renderer_shader_set_binding_data(renderer_backend_interface* backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u64 offset, void* data, u64 size);
104 b8 vulkan_renderer_shader_set_binding_texture(renderer_backend_interface* backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ktexture t);
105 b8 vulkan_renderer_shader_set_binding_sampler(renderer_backend_interface* backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ksampler_backend sampler);
107 
111 
116 
118 
121 
123 
127 b8 vulkan_buffer_bind(renderer_backend_interface* backend, krenderbuffer handle, u64 offset, u32 binding_index);
133 b8 vulkan_buffer_read(renderer_backend_interface* backend, krenderbuffer handle, u64 offset, u64 size, void** out_memory);
134 b8 vulkan_buffer_load_range(renderer_backend_interface* backend, krenderbuffer handle, u64 offset, u64 size, const void* data, b8 include_in_frame_workload);
135 b8 vulkan_buffer_copy_range(renderer_backend_interface* backend, krenderbuffer source, u64 source_offset, krenderbuffer dest, u64 dest_offset, u64 size, b8 include_in_frame_workload);
136 b8 vulkan_buffer_draw(renderer_backend_interface* backend, krenderbuffer handle, u64 offset, u32 element_count, u32 binding_index, b8 bind_only);
137 
139 
140 #if KOHI_DEBUG
141 void vulkan_renderer_debug_pump_brakes(renderer_backend_interface* backend);
142 #endif
primitive_topology_type
Definition: core_render_types.h:30
u16 ktexture
Represents a texture to be used for rendering purposes, stored on the GPU (VRAM)
Definition: core_render_types.h:299
texture_filter
Represents supported texture filtering modes.
Definition: core_render_types.h:70
u32 primitive_topology_type_bits
A combination of topology bit flags.
Definition: core_render_types.h:44
u32 shader_flags
A combination of topology bit flags.
Definition: core_render_types.h:227
u8 ktexture_flag_bits
Holds bit flags for textures..
Definition: core_render_types.h:321
u16 kshader
Definition: core_render_types.h:176
kpixel_format
Represents the format of image (or texture) pixel data.
Definition: core_render_types.h:47
ktexture_type
Represents various types of textures.
Definition: core_render_types.h:124
texture_repeat
Definition: core_render_types.h:77
unsigned int u32
Unsigned 32-bit integer.
Definition: defines.h:27
_Bool b8
8-bit boolean type
Definition: defines.h:60
float f32
32-bit floating point number
Definition: defines.h:49
unsigned short u16
Unsigned 16-bit integer.
Definition: defines.h:24
unsigned long long u64
Unsigned 64-bit integer.
Definition: defines.h:30
unsigned char u8
Unsigned 8-bit integer.
Definition: defines.h:21
u64 kname
A kname is a string hash made for quick comparisons versus traditional string comparisons.
Definition: kname.h:36
renderer_compare_op
Definition: renderer_types.h:94
renderer_cull_mode
The face cull mode.
Definition: renderer_types.h:222
u16 ksampler_backend
Definition: renderer_types.h:252
renderer_stencil_op
Definition: renderer_types.h:75
renderbuffer_type
Definition: renderer_types.h:142
u32 renderer_config_flags
Definition: renderer_types.h:194
renderer_winding
The winding order of vertices, used to determine what is the front-face of a triangle.
Definition: renderer_types.h:214
u16 krenderbuffer
Definition: renderer_types.h:175
u32 renderbuffer_flags
Definition: renderer_types.h:173
Engine-level current frame-specific data.
Definition: frame_data.h:15
Represents a window in the application.
Definition: platform.h:71
u16 height
The height of the window in pixels.
Definition: platform.h:80
u16 width
The width of the window in pixels.
Definition: platform.h:78
const char * name
The internal name of the window.
Definition: platform.h:73
The generic configuration for a renderer backend.
Definition: renderer_types.h:197
A generic "interface" for the renderer backend. The renderer backend is what is responsible for makin...
Definition: renderer_types.h:262
Definition: core_render_types.h:264
Definition: core_render_types.h:276
A 3-element vector.
Definition: math_types.h:117
A 4-element vector.
Definition: math_types.h:229
A 4-element integer-based vector.
Definition: math_types.h:574
void vulkan_renderer_shader_release_binding_set_instance(renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)
void vulkan_renderer_begin_debug_label(renderer_backend_interface *backend, const char *label_text, vec3 colour)
void vulkan_renderer_end_debug_label(renderer_backend_interface *backend)
void vulkan_renderer_set_depth_test_enabled(struct renderer_backend_interface *backend, b8 enabled)
b8 vulkan_renderer_shader_apply_binding_set(renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id)
void vulkan_renderer_clear_colour_texture(renderer_backend_interface *backend, ktexture t)
void vulkan_renderer_sampler_release(renderer_backend_interface *backend, ksampler_backend *sampler)
void vulkan_buffer_unmap_memory(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u64 size)
void vulkan_renderer_clear_depth_set(renderer_backend_interface *backend, f32 depth)
void vulkan_renderer_clear_colour_set(renderer_backend_interface *backend, vec4 clear_colour)
void vulkan_renderer_shader_destroy(renderer_backend_interface *backend, kshader shader)
b8 vulkan_renderer_frame_command_list_begin(renderer_backend_interface *backend, struct frame_data *p_frame_data)
void vulkan_renderer_scissor_reset(renderer_backend_interface *backend)
b8 vulkan_renderer_on_window_created(renderer_backend_interface *backend, struct kwindow *window)
void vulkan_renderer_on_window_destroyed(renderer_backend_interface *backend, struct kwindow *window)
b8 vulkan_renderer_sampler_refresh(renderer_backend_interface *backend, ksampler_backend *sampler, texture_filter filter, texture_repeat repeat, f32 anisotropy, u32 mip_levels)
b8 vulkan_buffer_read(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u64 size, void **out_memory)
void vulkan_renderer_scissor_set(renderer_backend_interface *backend, rect_2di rect)
void vulkan_renderer_clear_depth_stencil(renderer_backend_interface *backend, ktexture t)
b8 vulkan_renderer_texture_resources_acquire(renderer_backend_interface *backend, ktexture t, const char *name, ktexture_type type, u32 width, u32 height, u8 channel_count, u8 mip_levels, u16 array_size, ktexture_flag_bits flags)
u32 vulkan_renderer_shader_binding_set_get_max_instance_count(renderer_backend_interface *backend, kshader shader, u8 binding_set)
b8 vulkan_renderer_frame_submit(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
void vulkan_renderer_viewport_reset(renderer_backend_interface *backend)
void * vulkan_renderbuffer_get_mapped_memory(renderer_backend_interface *backend, krenderbuffer handle)
void vulkan_renderer_colour_texture_prepare_for_present(renderer_backend_interface *backend, ktexture t)
void vulkan_renderer_winding_set(struct renderer_backend_interface *backend, renderer_winding winding)
void vulkan_renderer_backend_on_window_resized(renderer_backend_interface *backend, const struct kwindow *window)
b8 vulkan_renderer_shader_set_binding_data(renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u64 offset, void *data, u64 size)
void vulkan_renderer_set_depth_write_enabled(struct renderer_backend_interface *backend, b8 enabled)
void vulkan_renderer_wait_for_idle(renderer_backend_interface *backend)
b8 vulkan_renderer_shader_supports_wireframe(const renderer_backend_interface *backend, const kshader shader)
u32 vulkan_renderer_shader_acquire_binding_set_instance(renderer_backend_interface *backend, kshader shader, u8 binding_set)
b8 vulkan_renderer_shader_create(renderer_backend_interface *backend, kshader shader, kname name, shader_flags flags, primitive_topology_type_bits topology_types, primitive_topology_type default_topology, u8 colour_attachment_count, kpixel_format *colour_attachment_formats, kpixel_format depth_attachment_format, kpixel_format stencil_attachment_format, u8 pipeline_count, shader_pipeline_config *pipelines, u8 binding_set_count, const shader_binding_set_config *binding_sets)
b8 vulkan_renderer_begin(renderer_backend_interface *backend, struct frame_data *p_frame_data)
b8 vulkan_renderer_shader_reload(renderer_backend_interface *backend, kshader shader, u8 pipeline_count, shader_pipeline_config *pipelines)
b8 vulkan_buffer_resize(renderer_backend_interface *backend, krenderbuffer handle, u64 new_size)
void vulkan_renderbuffer_destroy(renderer_backend_interface *backend, krenderbuffer handle)
b8 vulkan_buffer_flush(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u64 size)
void vulkan_renderer_backend_shutdown(renderer_backend_interface *backend)
b8 vulkan_renderer_flag_enabled_get(renderer_backend_interface *backend, renderer_config_flags flag)
void vulkan_renderer_set_depth_bias_enabled(struct renderer_backend_interface *backend, b8 enabled)
b8 vulkan_buffer_load_range(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u64 size, const void *data, b8 include_in_frame_workload)
b8 vulkan_renderer_backend_initialize(renderer_backend_interface *backend, const renderer_backend_config *config)
b8 vulkan_renderer_texture_resize(renderer_backend_interface *backend, ktexture t, u32 new_width, u32 new_height)
f32 vulkan_renderer_max_anisotropy_get(renderer_backend_interface *backend)
b8 vulkan_buffer_copy_range(renderer_backend_interface *backend, krenderbuffer source, u64 source_offset, krenderbuffer dest, u64 dest_offset, u64 size, b8 include_in_frame_workload)
void vulkan_renderer_clear_stencil_set(renderer_backend_interface *backend, u32 stencil)
b8 vulkan_renderer_end(renderer_backend_interface *backend, struct frame_data *p_frame_data)
b8 vulkan_buffer_bind(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u32 binding_index)
void vulkan_renderer_set_stencil_test_enabled(struct renderer_backend_interface *backend, b8 enabled)
b8 vulkan_buffer_unbind(renderer_backend_interface *backend, krenderbuffer handle)
b8 vulkan_renderer_shader_set_binding_sampler(renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ksampler_backend sampler)
b8 vulkan_renderer_texture_read_pixel(renderer_backend_interface *backend, ktexture t, u32 x, u32 y, u8 **out_rgba)
void vulkan_renderer_texture_prepare_for_sampling(renderer_backend_interface *backend, ktexture t, ktexture_flag_bits flags)
b8 vulkan_renderer_frame_present(renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)
b8 vulkan_renderer_frame_command_list_end(renderer_backend_interface *backend, struct frame_data *p_frame_data)
void vulkan_renderer_set_stencil_op(struct renderer_backend_interface *backend, renderer_stencil_op fail_op, renderer_stencil_op pass_op, renderer_stencil_op depth_fail_op, renderer_compare_op compare_op)
ksampler_backend vulkan_renderer_sampler_acquire(renderer_backend_interface *backend, kname name, texture_filter filter, texture_repeat repeat, f32 anisotropy)
void vulkan_renderer_end_rendering(struct renderer_backend_interface *backend, struct frame_data *p_frame_data)
b8 vulkan_renderer_shader_set_binding_texture(renderer_backend_interface *backend, kshader shader, u8 binding_set, u32 instance_id, u8 binding_index, u8 array_index, ktexture t)
kname vulkan_renderer_sampler_name_get(renderer_backend_interface *backend, ksampler_backend sampler)
void vulkan_renderer_set_stencil_reference(struct renderer_backend_interface *backend, u32 reference)
void vulkan_buffer_map_memory(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u64 size)
b8 vulkan_renderer_shader_use_with_topology(renderer_backend_interface *backend, kshader shader, primitive_topology_type type, u8 vertex_layout_index)
b8 vulkan_renderer_is_multithreaded(renderer_backend_interface *backend)
void vulkan_renderer_set_stencil_compare_mask(struct renderer_backend_interface *backend, u32 compare_mask)
b8 vulkan_renderer_texture_read_data(renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, u8 **out_pixels)
b8 vulkan_renderbuffer_create(renderer_backend_interface *backend, kname name, u64 size, renderbuffer_type type, renderbuffer_flags flags, krenderbuffer handle)
void vulkan_renderer_set_stencil_write_mask(struct renderer_backend_interface *backend, u32 write_mask)
void vulkan_renderer_shader_flag_set(renderer_backend_interface *backend, kshader shader, shader_flags flag, b8 enabled)
void vulkan_renderer_cull_mode_set(struct renderer_backend_interface *backend, renderer_cull_mode cull_mode)
b8 vulkan_buffer_draw(renderer_backend_interface *backend, krenderbuffer handle, u64 offset, u32 element_count, u32 binding_index, b8 bind_only)
void vulkan_renderer_flag_enabled_set(renderer_backend_interface *backend, renderer_config_flags flag, b8 enabled)
b8 vulkan_renderer_texture_write_data(renderer_backend_interface *backend, ktexture t, u32 offset, u32 size, const u8 *pixels, b8 include_in_frame_workload)
void vulkan_renderer_begin_rendering(struct renderer_backend_interface *backend, struct frame_data *p_frame_data, rect_2di render_area, u32 colour_target_count, ktexture *colour_targets, ktexture depth_stencil_target, u32 depth_stencil_layer)
void vulkan_renderer_texture_resources_release(renderer_backend_interface *backend, ktexture t)
void vulkan_renderer_set_depth_bias(struct renderer_backend_interface *backend, f32 constant_factor, f32 clamp, f32 slope_factor)
b8 vulkan_renderer_frame_prepare(renderer_backend_interface *backend, struct frame_data *p_frame_data)
b8 vulkan_renderer_frame_prepare_window_surface(renderer_backend_interface *backend, struct kwindow *window, struct frame_data *p_frame_data)
b8 vulkan_renderer_shader_set_immediate_data(renderer_backend_interface *backend, kshader shader, const void *data, u8 size)
b8 vulkan_renderer_shader_use(renderer_backend_interface *backend, kshader shader, u8 vertex_layout_index)
void vulkan_renderer_viewport_set(renderer_backend_interface *backend, rect_2di rect)
b8 vulkan_renderer_shader_flag_get(const renderer_backend_interface *backend, kshader shader, shader_flags flag)