Class KHRDedicatedAllocation


  • public final class KHRDedicatedAllocation
    extends java.lang.Object
    This extension enables resources to be bound to a dedicated allocation, rather than suballocated. For any particular resource, applications can query whether a dedicated allocation is recommended, in which case using a dedicated allocation may improve the performance of access to that resource. Normal device memory allocations must support multiple resources per allocation, memory aliasing and sparse binding, which could interfere with some optimizations. Applications should query the implementation for when a dedicated allocation may be beneficial by adding VkMemoryDedicatedRequirementsKHR to the pNext chain of the VkMemoryRequirements2 structure passed as the pMemoryRequirements parameter to a call to GetBufferMemoryRequirements2 or GetImageMemoryRequirements2. Certain external handle types and external images or buffers may also depend on dedicated allocations on implementations that associate image or buffer metadata with OS-level memory objects.

    This extension adds a two small structures to memory requirements querying and memory allocation: a new structure that flags whether an image/buffer should have a dedicated allocation, and a structure indicating the image or buffer that an allocation will be bound to.

    Promotion to Vulkan 1.1

    All functionality in this extension is included in core Vulkan 1.1, with the KHR suffix omitted. The original type, enum and command names are still available as aliases of the core functionality.

    Examples
    
         // Create an image with a dedicated allocation based on the
         // implementation's preference
     
         VkImageCreateInfo imageCreateInfo =
         {
             // Image creation parameters
         };
     
         VkImage image;
         VkResult result = vkCreateImage(
             device,
             &imageCreateInfo,
             NULL,                               // pAllocator
             &image);
     
         VkMemoryDedicatedRequirementsKHR dedicatedRequirements =
         {
             VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
             NULL,                               // pNext
         };
     
         VkMemoryRequirements2 memoryRequirements =
         {
             VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,
             &dedicatedRequirements,             // pNext
         };
     
         const VkImageMemoryRequirementsInfo2 imageRequirementsInfo =
         {
             VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
             NULL,                               // pNext
             image
         };
     
         vkGetImageMemoryRequirements2(
             device,
             &imageRequirementsInfo,
             &memoryRequirements);
     
         if (dedicatedRequirements.prefersDedicatedAllocation) {
             // Allocate memory with VkMemoryDedicatedAllocateInfoKHR::image
             // pointing to the image we are allocating the memory for
     
             VkMemoryDedicatedAllocateInfoKHR dedicatedInfo =
             {
                 VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,   // sType
                 NULL,                                                   // pNext
                 image,                                                  // image
                 VK_NULL_HANDLE,                                         // buffer
             };
     
             VkMemoryAllocateInfo memoryAllocateInfo =
             {
                 VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
                 &dedicatedInfo,                                         // pNext
                 memoryRequirements.size,                                // allocationSize
                 FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
             };
     
             VkDeviceMemory memory;
             vkAllocateMemory(
                 device,
                 &memoryAllocateInfo,
                 NULL,                       // pAllocator
                 &memory);
     
             // Bind the image to the memory
     
             vkBindImageMemory(
                 device,
                 image,
                 memory,
                 0);
         } else {
             // Take the normal memory sub-allocation path
         }
    Name String
    VK_KHR_dedicated_allocation
    Extension Type
    Device extension
    Registered Extension Number
    128
    Revision
    3
    Extension and Version Dependencies
    Deprecation state
    Contact
    Last Modified Date
    2017-09-05
    IP Status
    No known IP claims.
    Interactions and External Dependencies
    • Promoted to Vulkan 1.1 Core
    Contributors
    • Jeff Bolz, NVIDIA
    • Jason Ekstrand, Intel