This extension is designed to be used with upcoming NVIDIA Optical Flow SDK Version 5 which will be available on NVIDIA Developer webpage.
// 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_flowVK_KHR_get_physical_device_properties2 and VK_KHR_format_feature_flags2 and VK_KHR_synchronization2| Modifier and Type | Field and Description |
|---|---|
| public static final long | VK_ACCESS_2_OPTICAL_FLOW_READ_BIT_NV
Extends |
| public static final long | VK_ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV
Extends |
| public static final long | VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV
Extends |
| public static final long | VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV
Extends |
| public static final long | VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV
Extends |
| public static final int | VK_FORMAT_R16G16_S10_5_NV
Extends |
| public static final String | VK_NV_OPTICAL_FLOW_EXTENSION_NAME
The extension name. |
| public static final int | VK_NV_OPTICAL_FLOW_SPEC_VERSION
The extension specification version. |
| public static final int | VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV
Extends |
| public static final int | VK_OPTICAL_FLOW_EXECUTE_DISABLE_TEMPORAL_HINTS_BIT_NV
VkOpticalFlowExecuteFlagBitsNV - Bits specifying flags for a optical flow vector calculation Description
|
| 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 |
| public static final int | VK_QUEUE_OPTICAL_FLOW_BIT_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV
Extends |
| public static final int | VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV
Extends |
| Access | Constructor and Description |
|---|---|
| protected |
| Modifier and Type | Method and Description |
|---|---|
| public static void | nvkCmdOpticalFlowExecuteNV(VkCommandBuffer commandBuffer, long session, long pExecuteInfo)
Unsafe version of: |
| public static int | nvkCreateOpticalFlowSessionNV(VkDevice device, long pCreateInfo, long pAllocator, long pSession)
Unsafe version of: |
| public static void | nvkDestroyOpticalFlowSessionNV(VkDevice device, long session, long pAllocator)
Unsafe version of: |
| 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: |
| public static int | vkBindOpticalFlowSessionImageNV(VkDevice
the device which owns the optical flow session object device, long session.the optical flow session object to which the image view is to be bound. session, int specifies the binding point bindingPoint, long VkOpticalFlowSessionBindingPointNV to which the image view is bound.a view, int layout)VkImageView to be bound.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 pExecuteInfo)VkOpticalFlowExecuteInfoNV.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 pCreateInfo, VkAllocationCallbacks VkOpticalFlowSessionCreateInfoNV structure containing parameters specifying the creation of the optical flow session.controls host memory allocation as described in the Memory Allocation chapter. pAllocator, LongBuffer a pointer to a pSession)VkOpticalFlowSessionNV handle specifying the optical flow session object which will be created by this function when it returns SUCCESSCreates an optical flow session object. |
| public static int | vkCreateOpticalFlowSessionNV(VkDevice device, VkOpticalFlowSessionCreateInfoNV pCreateInfo, VkAllocationCallbacks pAllocator, long[] pSession)
Array version of: |
| 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 pOpticalFlowImageFormatInfo, IntBuffer VkOpticalFlowImageFormatInfoNV structure specifying the optical flow usage for which information is returned.a pointer to an integer related to the number of optical flow properties available or queried, as described below. pFormatCount, VkOpticalFlowImageFormatPropertiesNV.a pointer to an array of pImageFormatPropertiesVkOpticalFlowImageFormatPropertiesNV structures in which supported formats and image parameters are returned.Query image formats for optical flow. |
| public static int | vkGetPhysicalDeviceOpticalFlowImageFormatsNV(VkPhysicalDevice physicalDevice, VkOpticalFlowImageFormatInfoNV pOpticalFlowImageFormatInfo, int[] pFormatCount, VkOpticalFlowImageFormatPropertiesNV.
Array version of: |