packages feed

vulkan-3.23: src/Vulkan/Extensions/VK_NV_optical_flow.hs-boot

{-# language CPP #-}
-- | = Name
--
-- VK_NV_optical_flow - device extension
--
-- == VK_NV_optical_flow
--
-- [__Name String__]
--     @VK_NV_optical_flow@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     465
--
-- [__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_format_feature_flags2@ to be enabled for any
--         device-level functionality
--
--     -   Requires @VK_KHR_synchronization2@ to be enabled for any
--         device-level functionality
--
-- [__Contact__]
--
--     -   Carsten Rohde
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_NV_optical_flow] @crohde%0A*Here describe the issue or question you have about the VK_NV_optical_flow extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2022-09-26
--
-- [__Contributors__]
--
--     -   Carsten Rohde, NVIDIA
--
--     -   Vipul Parashar, NVIDIA
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Eric Werness, NVIDIA
--
-- == Description
--
-- Optical flow are fundamental algorithms in computer vision (CV) area.
-- This extension allows applications to estimate 2D displacement of pixels
-- between two frames.
--
-- == New Object Types
--
-- -   'Vulkan.Extensions.Handles.OpticalFlowSessionNV'
--
-- == New Commands
--
-- -   'bindOpticalFlowSessionImageNV'
--
-- -   'cmdOpticalFlowExecuteNV'
--
-- -   'createOpticalFlowSessionNV'
--
-- -   'destroyOpticalFlowSessionNV'
--
-- -   'getPhysicalDeviceOpticalFlowImageFormatsNV'
--
-- == New Structures
--
-- -   'OpticalFlowExecuteInfoNV'
--
-- -   'OpticalFlowImageFormatPropertiesNV'
--
-- -   'OpticalFlowSessionCreateInfoNV'
--
-- -   Extending 'OpticalFlowSessionCreateInfoNV':
--
--     -   'OpticalFlowSessionCreatePrivateDataInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceOpticalFlowFeaturesNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2',
--     'Vulkan.Core10.Image.ImageCreateInfo':
--
--     -   'OpticalFlowImageFormatInfoNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceOpticalFlowPropertiesNV'
--
-- == New Enums
--
-- -   'OpticalFlowExecuteFlagBitsNV'
--
-- -   'OpticalFlowGridSizeFlagBitsNV'
--
-- -   'OpticalFlowPerformanceLevelNV'
--
-- -   'OpticalFlowSessionBindingPointNV'
--
-- -   'OpticalFlowSessionCreateFlagBitsNV'
--
-- -   'OpticalFlowUsageFlagBitsNV'
--
-- == New Bitmasks
--
-- -   'OpticalFlowExecuteFlagsNV'
--
-- -   'OpticalFlowGridSizeFlagsNV'
--
-- -   'OpticalFlowSessionCreateFlagsNV'
--
-- -   'OpticalFlowUsageFlagsNV'
--
-- == New Enum Constants
--
-- -   'NV_OPTICAL_FLOW_EXTENSION_NAME'
--
-- -   'NV_OPTICAL_FLOW_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core13.Enums.AccessFlags2.AccessFlagBits2':
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_OPTICAL_FLOW_READ_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.AccessFlags2.ACCESS_2_OPTICAL_FLOW_WRITE_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.Format.Format':
--
--     -   'Vulkan.Core10.Enums.Format.FORMAT_R16G16_S10_5_NV'
--
-- -   Extending
--     'Vulkan.Core13.Enums.FormatFeatureFlags2.FormatFeatureFlagBits2':
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV'
--
--     -   'Vulkan.Core13.Enums.FormatFeatureFlags2.FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.ObjectType.ObjectType':
--
--     -   'Vulkan.Core10.Enums.ObjectType.OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV'
--
-- -   Extending
--     'Vulkan.Core13.Enums.PipelineStageFlags2.PipelineStageFlagBits2':
--
--     -   'Vulkan.Core13.Enums.PipelineStageFlags2.PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.QueueFlagBits.QueueFlagBits':
--
--     -   'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_OPTICAL_FLOW_BIT_NV'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_IMAGE_FORMAT_PROPERTIES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_FEATURES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_OPTICAL_FLOW_PROPERTIES_NV'
--
-- == 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"
--
-- == Version History
--
-- -   Revision 1, 2022-09-26 (Carsten Rohde)
--
--     -   Internal revisions
--
-- == See Also
--
-- 'OpticalFlowExecuteFlagBitsNV', 'OpticalFlowExecuteFlagsNV',
-- 'OpticalFlowExecuteInfoNV', 'OpticalFlowGridSizeFlagBitsNV',
-- 'OpticalFlowGridSizeFlagsNV', 'OpticalFlowImageFormatInfoNV',
-- 'OpticalFlowImageFormatPropertiesNV', 'OpticalFlowPerformanceLevelNV',
-- 'OpticalFlowSessionBindingPointNV',
-- 'OpticalFlowSessionCreateFlagBitsNV', 'OpticalFlowSessionCreateFlagsNV',
-- 'OpticalFlowSessionCreateInfoNV',
-- 'OpticalFlowSessionCreatePrivateDataInfoNV',
-- 'Vulkan.Extensions.Handles.OpticalFlowSessionNV',
-- 'OpticalFlowUsageFlagBitsNV', 'OpticalFlowUsageFlagsNV',
-- 'PhysicalDeviceOpticalFlowFeaturesNV',
-- 'PhysicalDeviceOpticalFlowPropertiesNV',
-- 'bindOpticalFlowSessionImageNV', 'cmdOpticalFlowExecuteNV',
-- 'createOpticalFlowSessionNV', 'destroyOpticalFlowSessionNV',
-- 'getPhysicalDeviceOpticalFlowImageFormatsNV'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_NV_optical_flow Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_NV_optical_flow  ( OpticalFlowExecuteInfoNV
                                             , OpticalFlowImageFormatInfoNV
                                             , OpticalFlowImageFormatPropertiesNV
                                             , OpticalFlowSessionCreateInfoNV
                                             , OpticalFlowSessionCreatePrivateDataInfoNV
                                             , PhysicalDeviceOpticalFlowFeaturesNV
                                             , PhysicalDeviceOpticalFlowPropertiesNV
                                             , OpticalFlowSessionBindingPointNV
                                             ) where

import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (ToCStruct)
import Data.Kind (Type)
import {-# SOURCE #-} Vulkan.CStruct.Extends (Chain)
import {-# SOURCE #-} Vulkan.CStruct.Extends (Extendss)
import {-# SOURCE #-} Vulkan.CStruct.Extends (PeekChain)
import {-# SOURCE #-} Vulkan.CStruct.Extends (PokeChain)
data OpticalFlowExecuteInfoNV

instance ToCStruct OpticalFlowExecuteInfoNV
instance Show OpticalFlowExecuteInfoNV

instance FromCStruct OpticalFlowExecuteInfoNV


data OpticalFlowImageFormatInfoNV

instance ToCStruct OpticalFlowImageFormatInfoNV
instance Show OpticalFlowImageFormatInfoNV

instance FromCStruct OpticalFlowImageFormatInfoNV


data OpticalFlowImageFormatPropertiesNV

instance ToCStruct OpticalFlowImageFormatPropertiesNV
instance Show OpticalFlowImageFormatPropertiesNV

instance FromCStruct OpticalFlowImageFormatPropertiesNV


type role OpticalFlowSessionCreateInfoNV nominal
data OpticalFlowSessionCreateInfoNV (es :: [Type])

instance ( Extendss OpticalFlowSessionCreateInfoNV es
         , PokeChain es ) => ToCStruct (OpticalFlowSessionCreateInfoNV es)
instance Show (Chain es) => Show (OpticalFlowSessionCreateInfoNV es)

instance ( Extendss OpticalFlowSessionCreateInfoNV es
         , PeekChain es ) => FromCStruct (OpticalFlowSessionCreateInfoNV es)


data OpticalFlowSessionCreatePrivateDataInfoNV

instance ToCStruct OpticalFlowSessionCreatePrivateDataInfoNV
instance Show OpticalFlowSessionCreatePrivateDataInfoNV

instance FromCStruct OpticalFlowSessionCreatePrivateDataInfoNV


data PhysicalDeviceOpticalFlowFeaturesNV

instance ToCStruct PhysicalDeviceOpticalFlowFeaturesNV
instance Show PhysicalDeviceOpticalFlowFeaturesNV

instance FromCStruct PhysicalDeviceOpticalFlowFeaturesNV


data PhysicalDeviceOpticalFlowPropertiesNV

instance ToCStruct PhysicalDeviceOpticalFlowPropertiesNV
instance Show PhysicalDeviceOpticalFlowPropertiesNV

instance FromCStruct PhysicalDeviceOpticalFlowPropertiesNV


data OpticalFlowSessionBindingPointNV