vulkan-3.24: Bindings to the Vulkan graphics API.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Vulkan.Extensions.VK_NV_copy_memory_indirect

Description

Name

VK_NV_copy_memory_indirect - device extension

VK_NV_copy_memory_indirect

Name String
VK_NV_copy_memory_indirect
Extension Type
Device extension
Registered Extension Number
427
Revision
1
Extension and Version Dependencies
  • Requires support for Vulkan 1.0
  • Requires VK_KHR_get_physical_device_properties2 to be enabled for any device-level functionality
  • Requires VK_KHR_buffer_device_address to be enabled for any device-level functionality
Contact

Other Extension Metadata

Last Modified Date
2022-10-14
Contributors
  • Vikram Kushwaha, NVIDIA
  • Jeff Bolz, NVIDIA
  • Christoph Kubisch, NVIDIA
  • Daniel Koch, NVIDIA

Description

This extension adds support for performing copies between memory and image regions using indirect parameters that are read by the device from a buffer during execution. This functionality may be useful for performing copies where the copy parameters are not known during the command buffer creation time.

New Commands

New Structures

New Enum Constants

Version History

  • Revision 1, 2022-10-14 (Vikram Kushwaha)

    • Initial draft

See Also

CopyMemoryIndirectCommandNV, CopyMemoryToImageIndirectCommandNV, PhysicalDeviceCopyMemoryIndirectFeaturesNV, PhysicalDeviceCopyMemoryIndirectPropertiesNV, cmdCopyMemoryIndirectNV, cmdCopyMemoryToImageIndirectNV

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

cmdCopyMemoryIndirectNV Source #

Arguments

:: forall io. MonadIO io 
=> CommandBuffer

commandBuffer is the command buffer into which the command will be recorded.

-> ("copyBufferAddress" ::: DeviceAddress)

copyBufferAddress is the buffer address specifying the copy parameters. This buffer is laid out in memory as an array of CopyMemoryIndirectCommandNV structures.

-> ("copyCount" ::: Word32)

copyCount is the number of copies to execute, and can be zero.

-> ("stride" ::: Word32)

stride is the stride in bytes between successive sets of copy parameters.

-> io () 

vkCmdCopyMemoryIndirectNV - Copy data between memory regions

Description

Each region read from copyBufferAddress is copied from the source region to the specified destination region. The results are undefined if any of the source and destination regions overlap in memory.

Valid Usage

Valid Usage (Implicit)

  • commandBuffer must be in the recording state
  • The CommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations
  • This command must only be called outside of a render pass instance
  • This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue TypesCommand Type
Primary Secondary Outside Outside Transfer Graphics ComputeAction

See Also

VK_NV_copy_memory_indirect, CommandBuffer, DeviceAddress

cmdCopyMemoryToImageIndirectNV Source #

Arguments

:: forall io. MonadIO io 
=> CommandBuffer

commandBuffer is the command buffer into which the command will be recorded.

-> ("copyBufferAddress" ::: DeviceAddress)

copyBufferAddress is the buffer address specifying the copy parameters. This buffer is laid out in memory as an array of CopyMemoryToImageIndirectCommandNV structures.

-> ("stride" ::: Word32)

stride is the byte stride between successive sets of copy parameters.

-> ("dstImage" ::: Image)

dstImage is the destination image.

-> ("dstImageLayout" ::: ImageLayout)

dstImageLayout is the layout of the destination image subresources for the copy.

-> ("imageSubresources" ::: Vector ImageSubresourceLayers)

pImageSubresources is a pointer to an array of size copyCount of ImageSubresourceLayers used to specify the specific image subresource of the destination image data for that copy.

-> io () 

vkCmdCopyMemoryToImageIndirectNV - Copy data from a memory region into an image

Description

Each region in copyBufferAddress is copied from the source memory region to an image region in the destination image. If the destination image is of type IMAGE_TYPE_3D, the starting slice and number of slices to copy are specified in pImageSubresources::baseArrayLayer and pImageSubresources::layerCount respectively. The copy must be performed on a queue that supports indirect copy operations, see PhysicalDeviceCopyMemoryIndirectPropertiesNV.

Valid Usage

  • dstImage must not be a protected image
  • The aspectMask member for every subresource in pImageSubresources must only have a single bit set
  • The image region specified by each element in copyBufferAddress must be a region that is contained within dstImage
  • dstImage must have been created with IMAGE_USAGE_TRANSFER_DST_BIT usage flag
  • If dstImage is non-sparse then it must be bound completely and contiguously to a single DeviceMemory object
  • dstImage must have a sample count equal to SAMPLE_COUNT_1_BIT
  • dstImageLayout must specify the layout of the image subresources of dstImage at the time this command is executed on a Device
  • dstImageLayout must be IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, IMAGE_LAYOUT_GENERAL, or IMAGE_LAYOUT_SHARED_PRESENT_KHR
  • The specified mipLevel of each region must be less than the mipLevels specified in ImageCreateInfo when dstImage was created
  • The specified baseArrayLayer + layerCount of each region must be less than or equal to the arrayLayers specified in ImageCreateInfo when dstImage was created
  • The imageOffset and imageExtent members of each region must respect the image transfer granularity requirements of commandBuffer’s command pool’s queue family, as described in QueueFamilyProperties
  • dstImage must not have been created with flags containing IMAGE_CREATE_SUBSAMPLED_BIT_EXT
  • If the queue family used to create the CommandPool which commandBuffer was allocated from does not support QUEUE_GRAPHICS_BIT, for each region, the aspectMask member of pImageSubresources must not be IMAGE_ASPECT_DEPTH_BIT or IMAGE_ASPECT_STENCIL_BIT.
  • For each region in copyBufferAddress, imageOffset.y and (imageExtent.height + imageOffset.y) must both be greater than or equal to 0 and less than or equal to the height of the specified subresource
  • offset must be 4 byte aligned
  • stride must be a multiple of 4 and must be greater than or equal to sizeof(CopyMemoryToImageIndirectCommandNV)

Valid Usage (Implicit)

  • dstImage must be a valid Image handle
  • dstImageLayout must be a valid ImageLayout value
  • pImageSubresources must be a valid pointer to an array of copyCount valid ImageSubresourceLayers structures
  • commandBuffer must be in the recording state
  • The CommandPool that commandBuffer was allocated from must support transfer, graphics, or compute operations
  • This command must only be called outside of a render pass instance
  • This command must only be called outside of a video coding scope
  • copyCount must be greater than 0
  • Both of commandBuffer, and dstImage must have been created, allocated, or retrieved from the same Device

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the CommandPool that commandBuffer was allocated from must be externally synchronized

Command Properties

'

Command Buffer LevelsRender Pass ScopeVideo Coding ScopeSupported Queue TypesCommand Type
Primary Secondary Outside Outside Transfer Graphics ComputeAction

See Also

VK_NV_copy_memory_indirect, CommandBuffer, DeviceAddress, Image, ImageLayout, ImageSubresourceLayers

data CopyMemoryIndirectCommandNV Source #

VkCopyMemoryIndirectCommandNV - Structure specifying indirect memory region copy operation

Valid Usage

  • The srcAddress must be 4 byte aligned
  • The dstAddress must be 4 byte aligned
  • The size must be 4 byte aligned

See Also

VK_NV_copy_memory_indirect, DeviceAddress, DeviceSize

Constructors

CopyMemoryIndirectCommandNV 

Fields

Instances

Instances details
Storable CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Show CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Eq CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

FromCStruct CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

ToCStruct CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Zero CopyMemoryIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

data CopyMemoryToImageIndirectCommandNV Source #

VkCopyMemoryToImageIndirectCommandNV - Structure specifying indirect buffer image copy operation

Valid Usage

  • The srcAddress must be 4 byte aligned
  • bufferRowLength must be 0, or greater than or equal to the width member of imageExtent
  • bufferImageHeight must be 0, or greater than or equal to the height member of imageExtent
  • imageOffset must specify a valid offset in the destination image
  • imageExtent must specify a valid region in the destination image and can be 0

Valid Usage (Implicit)

See Also

VK_NV_copy_memory_indirect, DeviceAddress, Extent3D, ImageSubresourceLayers, Offset3D

Constructors

CopyMemoryToImageIndirectCommandNV 

Fields

  • srcAddress :: DeviceAddress

    srcAddress is the starting address of the source host or device memory to copy from.

  • bufferRowLength :: Word32

    bufferRowLength and bufferImageHeight specify in texels a subregion of a larger two- or three-dimensional image in buffer memory, and control the addressing calculations. If either of these values is zero, that aspect of the buffer memory is considered to be tightly packed according to the imageExtent.

  • bufferImageHeight :: Word32
     
  • imageSubresource :: ImageSubresourceLayers

    imageSubresource is a ImageSubresourceLayers used to specify the specific image subresources of the image used for the destination image data, which must match the values specified in pImageSubresources parameter of cmdCopyMemoryToImageIndirectNV during command recording.

  • imageOffset :: Offset3D

    imageOffset selects the initial x, y, z offsets in texels of the sub-region of the destination image data.

  • imageExtent :: Extent3D

    imageExtent is the size in texels of the destination image in width, height and depth.

Instances

Instances details
Storable CopyMemoryToImageIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Show CopyMemoryToImageIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

FromCStruct CopyMemoryToImageIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

ToCStruct CopyMemoryToImageIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Zero CopyMemoryToImageIndirectCommandNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

data PhysicalDeviceCopyMemoryIndirectFeaturesNV Source #

VkPhysicalDeviceCopyMemoryIndirectFeaturesNV - Structure describing indirect copy features supported by an implementation

Members

This structure describes the following features:

Description

If the PhysicalDeviceCopyMemoryIndirectFeaturesNV structure is included in the pNext chain of the PhysicalDeviceFeatures2 structure passed to getPhysicalDeviceFeatures2, it is filled in to indicate whether each corresponding feature is supported. PhysicalDeviceCopyMemoryIndirectFeaturesNV can also be used in the pNext chain of DeviceCreateInfo to selectively enable these features.

Valid Usage (Implicit)

See Also

VK_NV_copy_memory_indirect, Bool32, StructureType

Constructors

PhysicalDeviceCopyMemoryIndirectFeaturesNV 

Fields

Instances

Instances details
Storable PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Show PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Eq PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

FromCStruct PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

ToCStruct PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Zero PhysicalDeviceCopyMemoryIndirectFeaturesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

data PhysicalDeviceCopyMemoryIndirectPropertiesNV Source #

VkPhysicalDeviceCopyMemoryIndirectPropertiesNV - Structure describing supported queues for indirect copy

Description

If the indirect copies feature is supported, supportedQueues must return at least one supported queue.

If the PhysicalDeviceCopyMemoryIndirectPropertiesNV structure is included in the pNext chain of the PhysicalDeviceProperties2 structure passed to getPhysicalDeviceProperties2, it is filled in with each corresponding implementation-dependent property.

Valid Usage (Implicit)

See Also

VK_NV_copy_memory_indirect, QueueFlags, StructureType

Constructors

PhysicalDeviceCopyMemoryIndirectPropertiesNV 

Fields

Instances

Instances details
Storable PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Show PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Eq PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

FromCStruct PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

ToCStruct PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

Zero PhysicalDeviceCopyMemoryIndirectPropertiesNV Source # 
Instance details

Defined in Vulkan.Extensions.VK_NV_copy_memory_indirect

type NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME = "VK_NV_copy_memory_indirect" Source #

pattern NV_COPY_MEMORY_INDIRECT_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #