VkPushDescriptorSetWithTemplateInfo(3)

# VkPushDescriptorSetWithTemplateInfo(3) Manual Page

## Name

VkPushDescriptorSetWithTemplateInfo - Structure specifying a descriptor set push operation using a descriptor update template

## C Specification

The `VkPushDescriptorSetWithTemplateInfo` structure is defined as:

    // Provided by VK_VERSION_1_4
    typedef struct VkPushDescriptorSetWithTemplateInfo {
        VkStructureType               sType;
        const void*                   pNext;
        VkDescriptorUpdateTemplate    descriptorUpdateTemplate;
        VkPipelineLayout              layout;
        uint32_t                      set;
        const void*                   pData;
    } VkPushDescriptorSetWithTemplateInfo;

    // Provided by VK_KHR_maintenance6 with VK_KHR_push_descriptor
    // Equivalent to VkPushDescriptorSetWithTemplateInfo
    typedef VkPushDescriptorSetWithTemplateInfo VkPushDescriptorSetWithTemplateInfoKHR;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `descriptorUpdateTemplate` is a descriptor update template defining how to interpret the descriptor information in `pData`.

- `layout` is a VkPipelineLayout object used to program the bindings. It must be compatible with the layout used to create the `descriptorUpdateTemplate` handle. If the `dynamicPipelineLayout` feature is enabled, `layout` can be VK_NULL_HANDLE and the layout must be specified by chaining VkPipelineLayoutCreateInfo structure off the `pNext`

- `set` is the set number of the descriptor set in the pipeline layout that will be updated. This must be the same number used to create the `descriptorUpdateTemplate` handle.

- `pData` is a pointer to memory containing descriptors for the templated update.

## Description

Valid Usage

- VUID-VkPushDescriptorSetWithTemplateInfo-commandBuffer-00366
  The `pipelineBindPoint` specified during the creation of the descriptor update template must be supported by the `commandBuffer`’s parent `VkCommandPool`’s queue family

- VUID-VkPushDescriptorSetWithTemplateInfo-pData-01686
  `pData` must be a valid pointer to a memory containing one or more valid instances of VkDescriptorImageInfo, VkDescriptorBufferInfo, or VkBufferView in a layout defined by `descriptorUpdateTemplate` when it was created with vkCreateDescriptorUpdateTemplate

- VUID-VkPushDescriptorSetWithTemplateInfo-layout-07993
  `layout` must be compatible with the layout used to create `descriptorUpdateTemplate`

- VUID-VkPushDescriptorSetWithTemplateInfo-descriptorUpdateTemplate-07994
  `descriptorUpdateTemplate` must have been created with a `templateType` of VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS

- VUID-VkPushDescriptorSetWithTemplateInfo-set-07995
  `set` must be the same value used to create `descriptorUpdateTemplate`

- VUID-VkPushDescriptorSetWithTemplateInfo-set-07304
  `set` must be less than VkPipelineLayoutCreateInfo::`setLayoutCount` provided when `layout` was created

- VUID-VkPushDescriptorSetWithTemplateInfo-set-11854
  `set` must reference a valid VkDescriptorSetLayout handle in `layout`

- VUID-VkPushDescriptorSetWithTemplateInfo-set-07305
  `set` must be the unique set number in the pipeline layout that uses a descriptor set layout that was created with VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT

- VUID-VkPushDescriptorSetWithTemplateInfo-None-09495
  If the `dynamicPipelineLayout` feature is not enabled, `layout` must be a valid VkPipelineLayout handle

- VUID-VkPushDescriptorSetWithTemplateInfo-layout-09496
  If `layout` is VK_NULL_HANDLE, the `pNext` chain must include a valid VkPipelineLayoutCreateInfo structure

- VUID-VkPushDescriptorSetWithTemplateInfo-None-10359
  If the VK_KHR_push_descriptor extension is not enabled, `pushDescriptor` must be enabled

Valid Usage (Implicit)

- VUID-VkPushDescriptorSetWithTemplateInfo-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO

- VUID-VkPushDescriptorSetWithTemplateInfo-pNext-pNext
  `pNext` must be `NULL` or a pointer to a valid instance of VkPipelineLayoutCreateInfo

- VUID-VkPushDescriptorSetWithTemplateInfo-sType-unique
  The `sType` value of each structure in the `pNext` chain must be unique

- VUID-VkPushDescriptorSetWithTemplateInfo-descriptorUpdateTemplate-parameter
  `descriptorUpdateTemplate` must be a valid VkDescriptorUpdateTemplate handle

- VUID-VkPushDescriptorSetWithTemplateInfo-layout-parameter
  If `layout` is not VK_NULL_HANDLE, `layout` must be a valid VkPipelineLayout handle

- VUID-VkPushDescriptorSetWithTemplateInfo-pData-parameter
  `pData` must be a pointer value

- VUID-VkPushDescriptorSetWithTemplateInfo-commonparent
  Both of `descriptorUpdateTemplate`, and `layout` that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice

## See Also

VK_KHR_maintenance6, VK_KHR_push_descriptor, VK_VERSION_1_4, VkDescriptorUpdateTemplate, VkPipelineLayout, VkStructureType, vkCmdPushDescriptorSetWithTemplate2, vkCmdPushDescriptorSetWithTemplate2

## Document Notes

For more information, see the Vulkan Specification.

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0