vulkan-3.17: Bindings to the Vulkan graphics API.
Safe HaskellNone
LanguageHaskell2010

Vulkan.Extensions.VK_NV_dedicated_allocation

Description

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

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

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

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

Valid Usage (Implicit)

See Also

VK_NV_dedicated_allocation, Bool32, StructureType

Constructors

DedicatedAllocationImageCreateInfoNV 

Fields

  • dedicatedAllocation :: Bool

    dedicatedAllocation specifies whether the image will have a dedicated allocation bound to it.

Instances

Instances details
Eq DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Show DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Storable DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

FromCStruct DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

ToCStruct DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Zero DedicatedAllocationImageCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

data DedicatedAllocationBufferCreateInfoNV Source #

VkDedicatedAllocationBufferCreateInfoNV - Specify that a buffer is bound to a dedicated memory resource

Valid Usage (Implicit)

See Also

VK_NV_dedicated_allocation, Bool32, StructureType

Constructors

DedicatedAllocationBufferCreateInfoNV 

Fields

  • dedicatedAllocation :: Bool

    dedicatedAllocation specifies whether the buffer will have a dedicated allocation bound to it.

Instances

Instances details
Eq DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Show DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Storable DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

FromCStruct DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

ToCStruct DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Zero DedicatedAllocationBufferCreateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

data DedicatedAllocationMemoryAllocateInfoNV Source #

VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory allocation resource

Valid Usage

Valid Usage (Implicit)

  • If image is not NULL_HANDLE, image must be a valid Image handle
  • If buffer is not NULL_HANDLE, buffer must be a valid Buffer handle
  • Both of buffer, and image that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same Device

See Also

VK_NV_dedicated_allocation, Buffer, Image, StructureType

Constructors

DedicatedAllocationMemoryAllocateInfoNV 

Fields

Instances

Instances details
Eq DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Show DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Storable DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

FromCStruct DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

ToCStruct DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

Zero DedicatedAllocationMemoryAllocateInfoNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_dedicated_allocation

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 #