Safe Haskell | None |
---|---|
Language | Haskell2010 |
Name
VK_NV_dedicated_allocation - device extension
VK_NV_dedicated_allocation
- Name String
VK_NV_dedicated_allocation
- Extension Type
- Device extension
- Registered Extension Number
- 27
- Revision
- 1
- Extension and Version Dependencies
- Requires Vulkan 1.0
- Deprecation state
Deprecated by
VK_KHR_dedicated_allocation
extension- Which in turn was promoted to Vulkan 1.1
- Contact
Other Extension Metadata
- Last Modified Date
- 2016-05-31
- IP Status
- No known IP claims.
- Contributors
- Jeff Bolz, NVIDIA
Description
This extension allows device memory to be allocated for a particular buffer or image resource, which on some devices can significantly improve the performance of that resource. Normal device memory allocations must support memory aliasing and sparse binding, which could interfere with optimizations like framebuffer compression or efficient page table usage. This is important for render targets and very large resources, but need not (and probably should not) be used for smaller resources that can benefit from suballocation.
This extension adds a few small structures to resource creation and memory allocation: a new structure that flags whether am image/buffer will have a dedicated allocation, and a structure indicating the image or buffer that an allocation will be bound to.
New Structures
Extending
ImageCreateInfo
:Extending
MemoryAllocateInfo
:
New Enum Constants
Examples
// Create an image with // VkDedicatedAllocationImageCreateInfoNV::dedicatedAllocation // set to VK_TRUE VkDedicatedAllocationImageCreateInfoNV dedicatedImageInfo = { VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV, // sType NULL, // pNext VK_TRUE, // dedicatedAllocation }; VkImageCreateInfo imageCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // sType &dedicatedImageInfo // pNext // Other members set as usual }; VkImage image; VkResult result = vkCreateImage( device, &imageCreateInfo, NULL, // pAllocator &image); VkMemoryRequirements memoryRequirements; vkGetImageMemoryRequirements( device, image, &memoryRequirements); // Allocate memory with VkDedicatedAllocationMemoryAllocateInfoNV::image // pointing to the image we are allocating the memory for VkDedicatedAllocationMemoryAllocateInfoNV dedicatedInfo = { VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV, // 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);
Version History
Revision 1, 2016-05-31 (Jeff Bolz)
- Internal revisions
See Also
DedicatedAllocationBufferCreateInfoNV
,
DedicatedAllocationImageCreateInfoNV
,
DedicatedAllocationMemoryAllocateInfoNV
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.
Synopsis
- data DedicatedAllocationImageCreateInfoNV = DedicatedAllocationImageCreateInfoNV {}
- data DedicatedAllocationBufferCreateInfoNV = DedicatedAllocationBufferCreateInfoNV {}
- data DedicatedAllocationMemoryAllocateInfoNV = DedicatedAllocationMemoryAllocateInfoNV {}
- type NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
- pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a. Integral a => a
- type NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
- pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
data DedicatedAllocationImageCreateInfoNV Source #
VkDedicatedAllocationImageCreateInfoNV - Specify that an image is bound to a dedicated memory resource
Description
Note
Using a dedicated allocation for color and depth/stencil attachments or other large images may improve performance on some devices.
Valid Usage
-
If
dedicatedAllocation
isTRUE
,ImageCreateInfo
::flags
must not includeIMAGE_CREATE_SPARSE_BINDING_BIT
,IMAGE_CREATE_SPARSE_RESIDENCY_BIT
, orIMAGE_CREATE_SPARSE_ALIASED_BIT
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV
See Also
DedicatedAllocationImageCreateInfoNV | |
|
Instances
data DedicatedAllocationBufferCreateInfoNV Source #
VkDedicatedAllocationBufferCreateInfoNV - Specify that a buffer is bound to a dedicated memory resource
Valid Usage (Implicit)
See Also
DedicatedAllocationBufferCreateInfoNV | |
|
Instances
data DedicatedAllocationMemoryAllocateInfoNV Source #
VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory allocation resource
Valid Usage
- At
least one of
image
andbuffer
must beNULL_HANDLE
- If
image
is notNULL_HANDLE
, the image must have been created withDedicatedAllocationImageCreateInfoNV
::dedicatedAllocation
equal toTRUE
- If
buffer
is notNULL_HANDLE
, the buffer must have been created withDedicatedAllocationBufferCreateInfoNV
::dedicatedAllocation
equal toTRUE
- If
image
is notNULL_HANDLE
,MemoryAllocateInfo
::allocationSize
must equal theMemoryRequirements
::size
of the image - If
buffer
is notNULL_HANDLE
,MemoryAllocateInfo
::allocationSize
must equal theMemoryRequirements
::size
of the buffer - If
image
is notNULL_HANDLE
andMemoryAllocateInfo
defines a memory import operation, the memory being imported must also be a dedicated image allocation andimage
must be identical to the image associated with the imported memory - If
buffer
is notNULL_HANDLE
andMemoryAllocateInfo
defines a memory import operation, the memory being imported must also be a dedicated buffer allocation andbuffer
must be identical to the buffer associated with the imported memory
Valid Usage (Implicit)
- If
image
is notNULL_HANDLE
,image
must be a validImage
handle - If
buffer
is notNULL_HANDLE
,buffer
must be a validBuffer
handle - Both
of
buffer
, andimage
that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
See Also
DedicatedAllocationMemoryAllocateInfoNV | |
|
Instances
type NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1 Source #
pattern NV_DEDICATED_ALLOCATION_SPEC_VERSION :: forall a. Integral a => a Source #
type NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation" Source #
pattern NV_DEDICATED_ALLOCATION_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #