Descriptor update

Updated descriptor set build to use function parameters instead of
global vars

Signed-off-by: Piotr Krygier <piotrkrygier@everyonecancode@xyz>
This commit is contained in:
Piotr Krygier
2026-02-09 17:37:28 +01:00
parent 493afb05e6
commit b7a472fe45
4 changed files with 30 additions and 23 deletions
+14 -14
View File
@@ -23,9 +23,6 @@
#define POOL_MAX_SETS (32U)
VkDescriptorSetLayoutBinding g_layout_bindings[DESCRIPTOR_MAX_SETS];
static uint32_t g_layout_bindings_count = 0U;
rse_err_t descriptor_pool_add_type(struct graphics_context_t* context, VkDescriptorType type, uint32_t count)
{
context->descriptor_data.pool_sizes[context->descriptor_data.pool_sizes_count].type = type;
@@ -68,28 +65,31 @@ rse_err_t descriptor_create_new_set(struct graphics_context_t* context, uint32_t
return RSE_ERROR_NO_ERROR;
}
rse_err_t descriptor_add_layout(uint32_t binding,
rse_err_t descriptor_add_layout(struct descriptor_set_layout_bindings_t* layout_bindings,
uint32_t binding,
VkDescriptorType type,
uint32_t descriptor_count,
VkShaderStageFlags shader_stages)
{
g_layout_bindings[g_layout_bindings_count].binding = binding;
g_layout_bindings[g_layout_bindings_count].descriptorType = type;
g_layout_bindings[g_layout_bindings_count].descriptorCount = descriptor_count;
g_layout_bindings[g_layout_bindings_count].stageFlags = shader_stages;
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].binding = binding;
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].descriptorType = type;
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].descriptorCount = descriptor_count;
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].stageFlags = shader_stages;
g_layout_bindings_count++;
layout_bindings->layout_bindings_count++;
return RSE_ERROR_NO_ERROR;
}
rse_err_t descriptor_set_finish(struct graphics_context_t* context, uint32_t set_id)
rse_err_t descriptor_set_finish(struct graphics_context_t* context,
struct descriptor_set_layout_bindings_t* layout_bindings,
uint32_t set_id)
{
VkDescriptorSetLayoutCreateInfo create_info = {0};
create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
create_info.bindingCount = g_layout_bindings_count;
create_info.pBindings = g_layout_bindings;
create_info.bindingCount = layout_bindings->layout_bindings_count;
create_info.pBindings = layout_bindings->layout_bindings;
if (VK_SUCCESS != vkCreateDescriptorSetLayout(context->vulkan_handles.device,
&create_info,
@@ -99,8 +99,8 @@ rse_err_t descriptor_set_finish(struct graphics_context_t* context, uint32_t set
return RSE_ERROR_INTERNAL_ERROR;
}
g_layout_bindings_count = 0U;
rse_memset(g_layout_bindings, 0, sizeof(VkDescriptorSetLayoutBinding) * DESCRIPTOR_MAX_SETS);
layout_bindings->layout_bindings_count = 0U;
rse_memset(layout_bindings->layout_bindings, 0, sizeof(VkDescriptorSetLayoutBinding) * DESCRIPTOR_MAX_SETS);
return RSE_ERROR_NO_ERROR;
}
+5 -2
View File
@@ -26,12 +26,15 @@ rse_err_t descriptor_pool_initialize(struct graphics_context_t* context);
rse_err_t descriptor_create_new_set(struct graphics_context_t* context, uint32_t* set_id);
rse_err_t descriptor_add_layout(uint32_t binding,
rse_err_t descriptor_add_layout(struct descriptor_set_layout_bindings_t* layout_bindings,
uint32_t binding,
VkDescriptorType type,
uint32_t descriptor_count,
VkShaderStageFlags shader_stages);
rse_err_t descriptor_set_finish(struct graphics_context_t* context, uint32_t set_id);
rse_err_t descriptor_set_finish(struct graphics_context_t* context,
struct descriptor_set_layout_bindings_t* layout_bindings,
uint32_t set_id);
rse_err_t descriptor_build_sets(struct graphics_context_t* context);
+6
View File
@@ -180,6 +180,12 @@ struct descriptor_data_t
VkDescriptorSetLayout set_layouts[DESCRIPTOR_MAX_SETS];
};
struct descriptor_set_layout_bindings_t
{
VkDescriptorSetLayoutBinding layout_bindings[DESCRIPTOR_MAX_SETS];
uint32_t layout_bindings_count;
};
struct render_target_t
{
struct vulkan_buffer_t vertex_buffer;
+5 -7
View File
@@ -117,6 +117,7 @@ rse_err_t rse_graphics_test_function(struct rse_graphics_context_t* rse_context)
uint16_t textures[2] = {0};
struct pipeline_t pipeline;
uint32_t descriptor_set_handle = 0;
struct descriptor_set_layout_bindings_t layout_bindings = {0};
struct pipeline_infos_t pipeline_infos = {0};
struct vulkan_buffer_t model_view_projection_buffer = {0};
uint32_t mesh_id_1, mesh_id_2 = 0;
@@ -183,13 +184,10 @@ rse_err_t rse_graphics_test_function(struct rse_graphics_context_t* rse_context)
/* Normal rendering */
descriptor_create_new_set(context, &descriptor_set_handle);
descriptor_add_layout(0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT);
descriptor_add_layout(1, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT);
descriptor_add_layout(2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, VK_SHADER_STAGE_FRAGMENT_BIT);
descriptor_set_finish(context, descriptor_set_handle);
descriptor_add_layout(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT);
descriptor_add_layout(&layout_bindings, 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT);
descriptor_add_layout(&layout_bindings, 1, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT);
descriptor_add_layout(&layout_bindings, 2, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2, VK_SHADER_STAGE_FRAGMENT_BIT);
descriptor_set_finish(context, &layout_bindings, descriptor_set_handle);
descriptor_build_sets(context);
descriptor_attach_buffer(context,