[Mesa-dev] [PATCH v2] radv: assert on inline uniform blocks in radv_CmdPushDescriptorSetKHR()

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue Jun 11 14:33:46 UTC 2019


Looks reasonable.

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

On 6/11/19 4:03 PM, Samuel Iglesias Gonsálvez wrote:
> According to the Vulkan spec, inline uniform blocks are not allowed
> to be updated through vkCmdPushDescriptorSetKHR().
>
> There are these spec quotes from "13.2.1. Descriptor Set Layout"
> that are relevant for this case:
>
> "VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR specifies
>   that descriptor sets must not be allocated using this layout, and
>   descriptors are instead pushed by vkCmdPushDescriptorSetKHR."
>
> "If flags contains
>   VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
>   elements of pBindings must not have a descriptorType of
>   VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT".
>
> There is no explicit mention in vkCmdPushDescriptorSetKHR() to forbid
> this case but it is implied in the creation of the descriptor set
> layout as aforementioned.
>
> Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
> ---
>   src/amd/vulkan/radv_cmd_buffer.c | 8 ++++++++
>   1 file changed, 8 insertions(+)
>
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index 3faaf94eb99..d69bec60bb8 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -3245,6 +3245,14 @@ void radv_CmdPushDescriptorSetKHR(
>   					   pipelineBindPoint))
>   		return;
>   
> +	/* Check that there are no inline uniform block updates when calling vkCmdPushDescriptorSetKHR()
> +	 * because it is invalid, according to Vulkan spec.
> +	 */
> +	for (int i = 0; i < descriptorWriteCount; i++) {
> +		const VkWriteDescriptorSet *writeset = &pDescriptorWrites[i];
> +		assert(writeset->descriptorType != VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT);
> +	}
> +
>   	radv_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
>   	                            radv_descriptor_set_to_handle(push_set),
>   	                            descriptorWriteCount, pDescriptorWrites, 0, NULL);


More information about the mesa-dev mailing list