Top Description Fields Constructors Methods
org.lwjgl.vulkan

public Class NVOpticalFlow

extends Object
Class Inheritance
Imports
javax.annotation.*, java.nio.*, org.lwjgl.system.*

Optical flow are fundamental algorithms in computer vision (CV) area. This extension allows applications to estimate 2D displacement of pixels between two frames.
Note

This extension is designed to be used with upcoming NVIDIA Optical Flow SDK Version 5 which will be available on NVIDIA Developer webpage.

Examples

// Example querying available input formats
VkOpticalFlowImageFormatInfoNV ofFormatInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV };
ofFormatInfo.usage = VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV;

uint32_t count = 0;
vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, NULL);
VkOpticalFlowImageFormatPropertiesNV* fmt = new VkOpticalFlowImageFormatPropertiesNV[count];
memset(fmt, 0, count  * sizeof(VkOpticalFlowImageFormatPropertiesNV));
for (uint32_t i = 0; i < count; i++) {
    fmt[i].sType = VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV;
}
vkGetPhysicalDeviceOpticalFlowImageFormatsNV(physicalDevice, &ofFormatInfo, &count, fmt);

// Pick one of the available formats
VkFormat inputFormat = fmt[0].format;

// Check feature support for optimal tiling
VkFormatProperties3 formatProperties3 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 };
VkFormatProperties2 formatProperties2 = { VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, &formatProperties3 };
vkGetPhysicalDeviceFormatProperties2(physicalDevice, inputFormat, &formatProperties2);
if (!(formatProperties3.optimalTilingFeatures & VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV)) {
    return false;
}

// Check support for image creation parameters
VkPhysicalDeviceImageFormatInfo2 imageFormatInfo2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, &ofFormatInfo };
imageFormatInfo2.format = inputFormat;
imageFormatInfo2.type = VK_IMAGE_TYPE_2D;
imageFormatInfo2.tiling = VK_IMAGE_TILING_OPTIMAL;
imageFormatInfo2.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;

VkImageFormatProperties2 imageFormatProperties2 = { VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 };
if (vkGetPhysicalDeviceImageFormatProperties2(physicalDevice, &imageFormatInfo2, &imageFormatProperties2) != VK_SUCCESS) {
    return false;
}

VkImageCreateInfo imageCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, &ofFormatInfo };
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
imageCreateInfo.format = inputFormat;
imageCreateInfo.extent = { width, height, (uint32_t)1};
imageCreateInfo.mipLevels = 1;
imageCreateInfo.arrayLayers = 1;
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;;
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;

vkCreateImage(device, &imageCreateInfo, NULL, &input);
"allocate memory, bind image, create view"

"do the same for reference and output"

// Create optical flow session
VkOpticalFlowSessionCreateInfoNV sessionCreateInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV };
sessionCreateInfo.width = width;
sessionCreateInfo.height = height;
sessionCreateInfo.imageFormat = inputFormat;
sessionCreateInfo.flowVectorFormat = outputFormat;
sessionCreateInfo.outputGridSize = VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV;
sessionCreateInfo.performanceLevel = VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV;
VkOpticalFlowSessionNV session;
vkCreateOpticalFlowSessionNV(device, &sessionCreateInfo, NULL, &session);

"allocate command buffer"

"transfer images to VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV"
"transfer input images to VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV and output image to VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV"

vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV, inputView, VK_IMAGE_LAYOUT_GENERAL);
vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV, refView, VK_IMAGE_LAYOUT_GENERAL);
vkBindOpticalFlowSessionImageNV(device, session, VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV, outputView, VK_IMAGE_LAYOUT_GENERAL);

VkOpticalFlowExecuteInfoNV opticalFlowExecuteInfo = { VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV };
vkCmdOpticalFlowExecuteNV(cmd, session, &opticalFlowExecuteInfo);

"submit command buffer"
VK_NV_optical_flow
Name String
VK_NV_optical_flow
Extension Type
Device extension
Registered Extension Number
465
Revision
1
Extension and Version Dependencies
VK_KHR_get_physical_device_properties2 and VK_KHR_format_feature_flags2 and VK_KHR_synchronization2
Contact
Other Extension Metadata
Last Modified Date
2022-09-26
Contributors
  • Carsten Rohde, NVIDIA
  • Vipul Parashar, NVIDIA
  • Jeff Bolz, NVIDIA
  • Eric Werness, NVIDIA

Field Summary

Modifier and TypeField and Description
public static final long
VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV

Extends VkAccessFlagBits2.

public static final long
VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV

Extends VkAccessFlagBits2.

public static final long
VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV

Extends VkFormatFeatureFlagBits2.

public static final long
VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV

Extends VkFormatFeatureFlagBits2.

public static final long
VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV

Extends VkFormatFeatureFlagBits2.

public static final int
VK_FORMAT_R16G16_S10_5_NV

Extends VkFormat.

public static final String
public static final int
VK_NV_OPTICAL_FLOW_SPEC_VERSION

The extension specification version.

public static final int
public static final int
VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV

VkOpticalFlowExecuteFlagBitsNV - Bits specifying flags for a optical flow vector calculation Description

  • OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV specifies that temporal hints from previously generated flow vectors are not used. If temporal hints are enabled, optical flow vectors from previous CmdOpticalFlowExecuteNV call are automatically used as hints for the current CmdOpticalFlowExecuteNV call, to take advantage of temporal correlation in a video sequence. Temporal hints should be disabled if there is a-priori knowledge of no temporal correlation (e.g. a scene change, independent successive frame pairs).
public static final int
VK_OPTICAL_FLOW_GRID_SIZE_1X1_BIT_NV

VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_GRID_SIZE_2X2_BIT_NV

VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_GRID_SIZE_4X4_BIT_NV

VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_GRID_SIZE_8X8_BIT_NV

VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_GRID_SIZE_UNKNOWN_NV

VkOpticalFlowGridSizeFlagBitsNV - Bits specifying grid sizes for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_FAST_NV

VkOpticalFlowPerformanceLevelNV - Optical flow performance level types Description

public static final int
VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_MEDIUM_NV

VkOpticalFlowPerformanceLevelNV - Optical flow performance level types Description

public static final int
VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_SLOW_NV

VkOpticalFlowPerformanceLevelNV - Optical flow performance level types Description

public static final int
VK_OPTICAL_FLOW_PERFORMANCE_LEVEL_UNKNOWN_NV

VkOpticalFlowPerformanceLevelNV - Optical flow performance level types Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_COST_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_BACKWARD_FLOW_VECTOR_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_COST_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_FLOW_VECTOR_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_GLOBAL_FLOW_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_HINT_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_INPUT_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_REFERENCE_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_BINDING_POINT_UNKNOWN_NV

VkOpticalFlowSessionBindingPointNV - Binding points of an optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_CREATE_ALLOW_REGIONS_BIT_NV

VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_CREATE_BOTH_DIRECTIONS_BIT_NV

VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_COST_BIT_NV

VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_GLOBAL_FLOW_BIT_NV

VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical flow session Description

public static final int
VK_OPTICAL_FLOW_SESSION_CREATE_ENABLE_HINT_BIT_NV

VkOpticalFlowSessionCreateFlagBitsNV - Bits specifying flags for optical flow session Description

public static final int
VK_OPTICAL_FLOW_USAGE_COST_BIT_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_USAGE_GLOBAL_FLOW_BIT_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_USAGE_HINT_BIT_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_USAGE_INPUT_BIT_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_USAGE_OUTPUT_BIT_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final int
VK_OPTICAL_FLOW_USAGE_UNKNOWN_NV

VkOpticalFlowUsageFlagBitsNV - Bits specifying usage for optical flow operations Description

public static final long
VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV

Extends VkPipelineStageFlagBits2.

public static final int
VK_QUEUE_OPTICAL_FLOW_BIT_NV

Extends VkQueueFlagBits.

public static final int
public static final int
public static final int
public static final int
public static final int
public static final int
public static final int

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
public static void
nvkCmdOpticalFlowExecuteNV(VkCommandBuffer commandBuffer, long session, long pExecuteInfo)

Unsafe version of: CmdOpticalFlowExecuteNV

public static int
nvkCreateOpticalFlowSessionNV(VkDevice device, long pCreateInfo, long pAllocator, long pSession)

Unsafe version of: CreateOpticalFlowSessionNV

public static void
nvkDestroyOpticalFlowSessionNV(VkDevice device, long session, long pAllocator)

Unsafe version of: DestroyOpticalFlowSessionNV

public static int
nvkGetPhysicalDeviceOpticalFlowImageFormatsNV(VkPhysicalDevice physicalDevice, long pOpticalFlowImageFormatInfo, long
a pointer to an integer related to the number of optical flow properties available or queried, as described below.
pFormatCount
,
long pImageFormatProperties)

Unsafe version of: GetPhysicalDeviceOpticalFlowImageFormatsNV

public static int
vkBindOpticalFlowSessionImageNV(VkDevice
the device which owns the optical flow session object session.
device
,
long
the optical flow session object to which the image view is to be bound.
session
,
int
specifies the binding point VkOpticalFlowSessionBindingPointNV to which the image view is bound.
bindingPoint
,
long
a VkImageView to be bound.
view
,
int layout)

Bind image to an optical flow session.

public static void
vkCmdOpticalFlowExecuteNV(VkCommandBuffer
the command buffer into which the command will be recorded.
commandBuffer
,
long
the optical flow session object on which this command is operating.
session
,
VkOpticalFlowExecuteInfoNV
Info is a pointer to a VkOpticalFlowExecuteInfoNV.
pExecuteInfo
)

Calculate optical flow vectors.

public static int
vkCreateOpticalFlowSessionNV(VkDevice
the logical device that creates the optical flow session object.
device
,
VkOpticalFlowSessionCreateInfoNV
a pointer to a VkOpticalFlowSessionCreateInfoNV structure containing parameters specifying the creation of the optical flow session.
pCreateInfo
,
VkAllocationCallbacks
controls host memory allocation as described in the Memory Allocation chapter.
pAllocator
,
LongBuffer
a pointer to a VkOpticalFlowSessionNV handle specifying the optical flow session object which will be created by this function when it returns SUCCESS
pSession
)

Creates an optical flow session object.

public static int
public static void
vkDestroyOpticalFlowSessionNV(VkDevice
the device that was used for the creation of the optical flow session.
device
,
long
the optical flow session to be destroyed.
session
,
VkAllocationCallbacks
controls host memory allocation as described in the Memory Allocation chapter.
pAllocator
)

Destroy optical flow session object.

public static int
vkGetPhysicalDeviceOpticalFlowImageFormatsNV(VkPhysicalDevice
the physical device being queried.
physicalDevice
,
VkOpticalFlowImageFormatInfoNV
a pointer to a VkOpticalFlowImageFormatInfoNV structure specifying the optical flow usage for which information is returned.
pOpticalFlowImageFormatInfo
,
IntBuffer
a pointer to an integer related to the number of optical flow properties available or queried, as described below.
pFormatCount
,
VkOpticalFlowImageFormatPropertiesNV.Buffer
a pointer to an array of VkOpticalFlowImageFormatPropertiesNV structures in which supported formats and image parameters are returned.
pImageFormatProperties
)

Query image formats for optical flow.

public static int
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait