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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user