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)
|
#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)
|
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;
|
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;
|
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,
|
VkDescriptorType type,
|
||||||
uint32_t descriptor_count,
|
uint32_t descriptor_count,
|
||||||
VkShaderStageFlags shader_stages)
|
VkShaderStageFlags shader_stages)
|
||||||
{
|
{
|
||||||
g_layout_bindings[g_layout_bindings_count].binding = binding;
|
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].binding = binding;
|
||||||
g_layout_bindings[g_layout_bindings_count].descriptorType = type;
|
layout_bindings->layout_bindings[layout_bindings->layout_bindings_count].descriptorType = type;
|
||||||
g_layout_bindings[g_layout_bindings_count].descriptorCount = descriptor_count;
|
layout_bindings->layout_bindings[layout_bindings->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].stageFlags = shader_stages;
|
||||||
|
|
||||||
g_layout_bindings_count++;
|
layout_bindings->layout_bindings_count++;
|
||||||
|
|
||||||
return RSE_ERROR_NO_ERROR;
|
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};
|
VkDescriptorSetLayoutCreateInfo create_info = {0};
|
||||||
|
|
||||||
create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||||
create_info.bindingCount = g_layout_bindings_count;
|
create_info.bindingCount = layout_bindings->layout_bindings_count;
|
||||||
create_info.pBindings = g_layout_bindings;
|
create_info.pBindings = layout_bindings->layout_bindings;
|
||||||
|
|
||||||
if (VK_SUCCESS != vkCreateDescriptorSetLayout(context->vulkan_handles.device,
|
if (VK_SUCCESS != vkCreateDescriptorSetLayout(context->vulkan_handles.device,
|
||||||
&create_info,
|
&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;
|
return RSE_ERROR_INTERNAL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_layout_bindings_count = 0U;
|
layout_bindings->layout_bindings_count = 0U;
|
||||||
rse_memset(g_layout_bindings, 0, sizeof(VkDescriptorSetLayoutBinding) * DESCRIPTOR_MAX_SETS);
|
rse_memset(layout_bindings->layout_bindings, 0, sizeof(VkDescriptorSetLayoutBinding) * DESCRIPTOR_MAX_SETS);
|
||||||
|
|
||||||
return RSE_ERROR_NO_ERROR;
|
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_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,
|
VkDescriptorType type,
|
||||||
uint32_t descriptor_count,
|
uint32_t descriptor_count,
|
||||||
VkShaderStageFlags shader_stages);
|
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);
|
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];
|
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 render_target_t
|
||||||
{
|
{
|
||||||
struct vulkan_buffer_t vertex_buffer;
|
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};
|
uint16_t textures[2] = {0};
|
||||||
struct pipeline_t pipeline;
|
struct pipeline_t pipeline;
|
||||||
uint32_t descriptor_set_handle = 0;
|
uint32_t descriptor_set_handle = 0;
|
||||||
|
struct descriptor_set_layout_bindings_t layout_bindings = {0};
|
||||||
struct pipeline_infos_t pipeline_infos = {0};
|
struct pipeline_infos_t pipeline_infos = {0};
|
||||||
struct vulkan_buffer_t model_view_projection_buffer = {0};
|
struct vulkan_buffer_t model_view_projection_buffer = {0};
|
||||||
uint32_t mesh_id_1, mesh_id_2 = 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 */
|
/* Normal rendering */
|
||||||
descriptor_create_new_set(context, &descriptor_set_handle);
|
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(&layout_bindings, 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(&layout_bindings, 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_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_set_finish(context, descriptor_set_handle);
|
|
||||||
|
|
||||||
descriptor_add_layout(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT);
|
|
||||||
descriptor_build_sets(context);
|
descriptor_build_sets(context);
|
||||||
|
|
||||||
descriptor_attach_buffer(context,
|
descriptor_attach_buffer(context,
|
||||||
|
|||||||
Reference in New Issue
Block a user