Using Descriptor Sets on PowerVR

Advice on how to use descriptors sets optimally with PowerVR hardware

In Vulkan, the base binding unit is a descriptor which represents a single binding, although descriptors are not bound individually. Instead, they are grouped together into descriptor set objects, which are opaque objects that contain storage for a set of descriptors. Each descriptor set has a descriptor set layout which describes the resources, such as buffers and image resources (samplers) that will be bound when drawing. The descriptor set is bound before any drawing commands, just like a vertex buffer or frame buffer.

Multiple descriptor sets

On PowerVR hardware, using multiple Vulkan descriptors for a single draw call has minimal to no impact on performance, due to the driver being able to gather all descriptors on the graphics core. Therefore, a scheme should be chosen that works the best for the particular use case in the application.

Pooled descriptor sets

On PowerVR hardware it is possible to allocate pooled descriptor sets in a fragmentation-less memory pool, depending on the how the descriptor sets and descriptor pool are constructed.

For the driver to perform a fragmentation-less allocate or free, all descriptor sets must be allocated with the same size, and the descriptor pool must have the VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag set.

Note: If different sized descriptor sets are allocated, the driver will fall back to a non-pooled memory scheme.