VK_EXT_custom_resolve(3)

# VK_EXT_custom_resolve(3) Manual Page

## Name

VK_EXT_custom_resolve - device extension

## Registered Extension Number

629

## Revision

1

## Ratification Status

Ratified

## Extension and Version Dependencies

VK_KHR_get_physical_device_properties2
or
Vulkan Version 1.1

## API Interactions

- Interacts with VK_VERSION_1_3

- Interacts with VK_KHR_dynamic_rendering

## Contact

- Mike Blumenkrantz [GitHub]zmike

## Extension Proposal

VK_EXT_custom_resolve

## Other Extension Metadata

Last Modified Date

  2025-05-13

IP Status

  No known IP claims.

Interactions and External Dependencies

  - This extension interacts with `VK_KHR_dynamic_rendering`

  - This extension interacts with `VK_EXT_dynamic_rendering_unused_attachments`

  - This extension interacts with `VK_EXT_fragment_density_map`

  - This extension interacts with `VK_EXT_graphics_pipeline_library`

  - This extension interacts with `VK_EXT_shader_object`

Contributors

  - Mike Blumenkrantz, Valve

  - Connor Abbott, Valve

  - Samuel Pitoiset, Valve

  - Matthew Netsch, Qualcomm

  - Jan-Harald Fredriksen, ARM

  - Ting Wei, ARM

  - Ricardo Garcia, Igalia

  - Spencer Fricke, LunarG

  - Piers Daniell, Nvidia

## Description

This extension provides functionality for using shaders to resolve multisample rendering attachments.

It builds upon mechanics introduced by VK_QCOM_render_pass_shader_resolve, additionally adding support for dynamic rendering.

## New Commands

If VK_KHR_dynamic_rendering or Vulkan Version 1.3 is supported:

- vkCmdBeginCustomResolveEXT

## New Structures

- Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo:

  - VkPhysicalDeviceCustomResolveFeaturesEXT

If VK_KHR_dynamic_rendering or Vulkan Version 1.3 is supported:

- VkBeginCustomResolveInfoEXT

- Extending VkGraphicsPipelineCreateInfo, VkCommandBufferInheritanceInfo, VkShaderCreateInfoEXT:

  - VkCustomResolveCreateInfoEXT

## New Enum Constants

- `VK_EXT_CUSTOM_RESOLVE_EXTENSION_NAME`

- `VK_EXT_CUSTOM_RESOLVE_SPEC_VERSION`

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_RESOLVE_FEATURES_EXT

- Extending VkSubpassDescriptionFlagBits:

  - VK_SUBPASS_DESCRIPTION_CUSTOM_RESOLVE_BIT_EXT

  - VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_EXT

If VK_KHR_dynamic_rendering or Vulkan Version 1.3 is supported:

- Extending VkRenderingFlagBits:

  - VK_RENDERING_CUSTOM_RESOLVE_BIT_EXT

  - VK_RENDERING_FRAGMENT_REGION_BIT_EXT

- Extending VkResolveModeFlagBits:

  - VK_RESOLVE_MODE_CUSTOM_BIT_EXT

- Extending VkStructureType:

  - VK_STRUCTURE_TYPE_BEGIN_CUSTOM_RESOLVE_INFO_EXT

  - VK_STRUCTURE_TYPE_CUSTOM_RESOLVE_CREATE_INFO_EXT

## Issues

1) How will this work with shader objects?

Some vendors emit an epilog at the end of the FS that stores each color/depth/stencil attachment to the appropriate tilebuffer location, and to do that they need to know the layout of the tilebuffer which depends on the attachment formats/sample counts. We agreed that for shader object the FS epilog is emitted dynamically when the draw happens.

## Version History

- Revision 1, 2025-05-13 (Mike Blumenkrantz)

  - Initial draft

## See Also

No cross-references are available

## Document Notes

For more information, see the Vulkan Specification.

This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0