[Mesa-dev] [PATCH 07/10] radv: Support allocating variable size descriptor sets.

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Apr 13 18:08:17 UTC 2018


Patches 3-7 are:

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 04/12/2018 01:44 AM, Bas Nieuwenhuizen wrote:
> ---
>   src/amd/vulkan/radv_descriptor_set.c | 21 +++++++++++++++++----
>   1 file changed, 17 insertions(+), 4 deletions(-)
> 
> diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
> index 9b35451c497..55b4aaa388c 100644
> --- a/src/amd/vulkan/radv_descriptor_set.c
> +++ b/src/amd/vulkan/radv_descriptor_set.c
> @@ -392,6 +392,7 @@ static VkResult
>   radv_descriptor_set_create(struct radv_device *device,
>   			   struct radv_descriptor_pool *pool,
>   			   const struct radv_descriptor_set_layout *layout,
> +			   const uint32_t *variable_count,
>   			   struct radv_descriptor_set **out_set)
>   {
>   	struct radv_descriptor_set *set;
> @@ -420,9 +421,9 @@ radv_descriptor_set_create(struct radv_device *device,
>   	}
>   
>   	set->layout = layout;
> -	if (layout->size) {
> -		uint32_t layout_size = align_u32(layout->size, 32);
> -		set->size = layout->size;
> +	uint32_t layout_size = align_u32(layout->size, 32);
> +	if (layout_size) {
> +		set->size = layout_size;
>   
>   		if (!pool->host_memory_base && pool->entry_count == pool->max_entry_count) {
>   			vk_free2(&device->alloc, NULL, set);
> @@ -648,14 +649,26 @@ VkResult radv_AllocateDescriptorSets(
>   	uint32_t i;
>   	struct radv_descriptor_set *set = NULL;
>   
> +	const VkDescriptorSetVariableDescriptorCountAllocateInfoEXT *variable_counts =
> +		vk_find_struct_const(pAllocateInfo->pNext, DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT);
> +	const uint32_t zero = 0;
> +
>   	/* allocate a set of buffers for each shader to contain descriptors */
>   	for (i = 0; i < pAllocateInfo->descriptorSetCount; i++) {
>   		RADV_FROM_HANDLE(radv_descriptor_set_layout, layout,
>   				 pAllocateInfo->pSetLayouts[i]);
>   
> +		const uint32_t *variable_count = NULL;
> +		if (variable_counts) {
> +			if (i < variable_counts->descriptorSetCount)
> +				variable_count = variable_counts->pDescriptorCounts + i;
> +			else
> +				variable_count = &zero;
> +		}
> +
>   		assert(!(layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
>   
> -		result = radv_descriptor_set_create(device, pool, layout, &set);
> +		result = radv_descriptor_set_create(device, pool, layout, variable_count, &set);
>   		if (result != VK_SUCCESS)
>   			break;
>   
> 


More information about the mesa-dev mailing list