/ appendices / VK_NV_dedicated_allocation.txt
VK_NV_dedicated_allocation.txt
  1  include::meta/VK_NV_dedicated_allocation.txt[]
  2  
  3  *Last Modified Date*::
  4      2016-05-31
  5  *IP Status*::
  6      No known IP claims.
  7  *Contributors*::
  8    - Jeff Bolz, NVIDIA
  9  
 10  This extension allows device memory to be allocated for a particular buffer
 11  or image resource, which on some devices can significantly improve the
 12  performance of that resource.
 13  Normal device memory allocations must support memory aliasing and sparse
 14  binding, which could interfere with optimizations like framebuffer
 15  compression or efficient page table usage.
 16  This is important for render targets and very large resources, but need not
 17  (and probably should not) be used for smaller resources that can benefit
 18  from suballocation.
 19  
 20  This extension adds a few small structures to resource creation and memory
 21  allocation: a new structure that flags whether am image/buffer will have a
 22  dedicated allocation, and a structure indicating the image or buffer that an
 23  allocation will be bound to.
 24  
 25  === New Object Types
 26  
 27  None.
 28  
 29  === New Enum Constants
 30  
 31    * Extending elink:VkStructureType:
 32    ** ename:VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV
 33    ** ename:VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV
 34    ** ename:VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
 35  
 36  === New Enums
 37  
 38  None.
 39  
 40  === New Structures
 41  
 42    * slink:VkDedicatedAllocationImageCreateInfoNV
 43    * slink:VkDedicatedAllocationBufferCreateInfoNV
 44    * slink:VkDedicatedAllocationMemoryAllocateInfoNV
 45  
 46  === New Functions
 47  
 48  None.
 49  
 50  === Issues
 51  
 52  None.
 53  
 54  === Examples
 55  
 56  [source,c++]
 57  --------------------------------------
 58  
 59      // Create an image with
 60      // VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation
 61      // set to VK_TRUE
 62  
 63      VkDedicatedAllocationImageCreateInfoNV dedicatedImageInfo =
 64      {
 65          VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,            // sType
 66          NULL,                                                                   // pNext
 67          VK_TRUE,                                                                // dedicatedAllocation
 68      };
 69  
 70      VkImageCreateInfo imageCreateInfo =
 71      {
 72          VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,    // sType
 73          &dedicatedImageInfo                     // pNext
 74          // Other members set as usual
 75      };
 76  
 77      VkImage image;
 78      VkResult result = vkCreateImage(
 79          device,
 80          &imageCreateInfo,
 81          NULL,                       // pAllocator
 82          &image);
 83  
 84      VkMemoryRequirements memoryRequirements;
 85      vkGetImageMemoryRequirements(
 86          device,
 87          image,
 88          &memoryRequirements);
 89  
 90      // Allocate memory with VkDedicatedAllocationMemoryAllocateInfoNV::image
 91      // pointing to the image we are allocating the memory for
 92  
 93      VkDedicatedAllocationMemoryAllocateInfoNV dedicatedInfo =
 94      {
 95          VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV,             // sType
 96          NULL,                                                                       // pNext
 97          image,                                                                      // image
 98          VK_NULL_HANDLE,                                                             // buffer
 99      };
100  
101      VkMemoryAllocateInfo memoryAllocateInfo =
102      {
103          VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,                 // sType
104          &dedicatedInfo,                                         // pNext
105          memoryRequirements.size,                                // allocationSize
106          FindMemoryTypeIndex(memoryRequirements.memoryTypeBits), // memoryTypeIndex
107      };
108  
109      VkDeviceMemory memory;
110      vkAllocateMemory(
111          device,
112          &memoryAllocateInfo,
113          NULL,                       // pAllocator
114          &memory);
115  
116      // Bind the image to the memory
117  
118      vkBindImageMemory(
119          device,
120          image,
121          memory,
122          0);
123  
124  --------------------------------------
125  
126  === Version History
127  
128   * Revision 1, 2016-05-31 (Jeff Bolz)
129     - Internal revisions