{-# language CPP #-}
-- No documentation found for Chapter "Device"
module Vulkan.Core10.Device  ( createDevice
                             , withDevice
                             , destroyDevice
                             , DeviceQueueCreateInfo(..)
                             , DeviceCreateInfo(..)
                             , Device(..)
                             , DeviceCreateFlags(..)
                             , DeviceQueueCreateFlagBits(..)
                             , DeviceQueueCreateFlags
                             ) where

import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Exception.Base (bracket)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Marshal.Alloc (callocBytes)
import Foreign.Marshal.Alloc (free)
import Foreign.Marshal.Utils (maybePeek)
import GHC.Base (when)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import Data.ByteString (packCString)
import Data.ByteString (useAsCString)
import Data.Coerce (coerce)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Data.Vector (generateM)
import qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.C.Types (CChar)
import Foreign.C.Types (CFloat)
import Foreign.C.Types (CFloat(..))
import Foreign.C.Types (CFloat(CFloat))
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import Data.Word (Word32)
import Data.ByteString (ByteString)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.CStruct.Utils (advancePtrBytes)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.Dynamic (initDeviceCmds)
import Vulkan.CStruct.Extends (peekSomeCStruct)
import Vulkan.CStruct.Extends (pokeSomeCStruct)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.AllocationCallbacks (AllocationCallbacks)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkDestroyDevice))
import Vulkan.Core10.Enums.DeviceCreateFlags (DeviceCreateFlags)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (DeviceDeviceMemoryReportCreateInfoEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (DeviceDiagnosticsConfigCreateInfoNV)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation (DeviceGroupDeviceCreateInfo)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_memory_overallocation_behavior (DeviceMemoryOverallocationCreateInfoAMD)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_binary (DevicePipelineBinaryInternalCacheControlKHR)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_private_data (DevicePrivateDataCreateInfo)
import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_global_priority (DeviceQueueGlobalPriorityCreateInfo)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_scheduling_controls (DeviceQueueShaderCoreControlCreateInfoARM)
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_compute_queue (ExternalComputeQueueDeviceCreateInfoNV)
import Vulkan.Dynamic (InstanceCmds(pVkCreateDevice))
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.Core10.Handles (PhysicalDevice)
import Vulkan.Core10.Handles (PhysicalDevice(..))
import Vulkan.Core10.Handles (PhysicalDevice(PhysicalDevice))
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage (PhysicalDevice16BitStorageFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_4444_formats (PhysicalDevice4444FormatsFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage (PhysicalDevice8BitStorageFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_astc_decode_mode (PhysicalDeviceASTCDecodeFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_acceleration_structure (PhysicalDeviceAccelerationStructureFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_address_binding_report (PhysicalDeviceAddressBindingReportFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_SEC_amigo_profiling (PhysicalDeviceAmigoProfilingFeaturesSEC)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_anti_lag (PhysicalDeviceAntiLagFeaturesAMD)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state (PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_attachment_feedback_loop_layout (PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_blend_operation_advanced (PhysicalDeviceBlendOperationAdvancedFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_border_color_swizzle (PhysicalDeviceBorderColorSwizzleFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_buffer_device_address (PhysicalDeviceBufferDeviceAddressFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_cluster_culling_shader (PhysicalDeviceClusterCullingShaderFeaturesHUAWEI)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_device_coherent_memory (PhysicalDeviceCoherentMemoryFeaturesAMD)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_color_write_enable (PhysicalDeviceColorWriteEnableFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_command_buffer_inheritance (PhysicalDeviceCommandBufferInheritanceFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_compute_occupancy_priority (PhysicalDeviceComputeOccupancyPriorityFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_compute_shader_derivatives (PhysicalDeviceComputeShaderDerivativesFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_conditional_rendering (PhysicalDeviceConditionalRenderingFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix2 (PhysicalDeviceCooperativeMatrix2FeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_cooperative_matrix_conversion (PhysicalDeviceCooperativeMatrixConversionFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_matrix (PhysicalDeviceCooperativeMatrixFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cooperative_vector (PhysicalDeviceCooperativeVectorFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_copy_memory_indirect (PhysicalDeviceCopyMemoryIndirectFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_copy_memory_indirect (PhysicalDeviceCopyMemoryIndirectFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_corner_sampled_image (PhysicalDeviceCornerSampledImageFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_coverage_reduction_mode (PhysicalDeviceCoverageReductionModeFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_filter_cubic_clamp (PhysicalDeviceCubicClampFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_filter_cubic_weights (PhysicalDeviceCubicWeightsFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_cuda_kernel_launch (PhysicalDeviceCudaKernelLaunchFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_border_color (PhysicalDeviceCustomBorderColorFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_custom_resolve (PhysicalDeviceCustomResolveFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_data_graph (PhysicalDeviceDataGraphFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_data_graph_model (PhysicalDeviceDataGraphModelFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing (PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMDX_dense_geometry_format (PhysicalDeviceDenseGeometryFormatFeaturesAMDX)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_bias_control (PhysicalDeviceDepthBiasControlFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clamp_control (PhysicalDeviceDepthClampControlFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_depth_clamp_zero_one (PhysicalDeviceDepthClampZeroOneFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_control (PhysicalDeviceDepthClipControlFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_depth_clip_enable (PhysicalDeviceDepthClipEnableFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_descriptor_buffer (PhysicalDeviceDescriptorBufferFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_tensors (PhysicalDeviceDescriptorBufferTensorFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_descriptor_heap (PhysicalDeviceDescriptorHeapFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing (PhysicalDeviceDescriptorIndexingFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_descriptor_pool_overallocation (PhysicalDeviceDescriptorPoolOverallocationFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping (PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands_compute (PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_generated_commands (PhysicalDeviceDeviceGeneratedCommandsFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_memory_report (PhysicalDeviceDeviceMemoryReportFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_device_diagnostics_config (PhysicalDeviceDiagnosticsConfigFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_displacement_micromap (PhysicalDeviceDisplacementMicromapFeaturesNV)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering (PhysicalDeviceDynamicRenderingFeatures)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_dynamic_rendering_local_readRoadmap (PhysicalDeviceDynamicRenderingLocalReadFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_dynamic_rendering_unused_attachments (PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_scissor_exclusive (PhysicalDeviceExclusiveScissorFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state2 (PhysicalDeviceExtendedDynamicState2FeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state3 (PhysicalDeviceExtendedDynamicState3FeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_extended_dynamic_state (PhysicalDeviceExtendedDynamicStateFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_extended_sparse_address_space (PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_ANDROID_external_format_resolve (PhysicalDeviceExternalFormatResolveFeaturesANDROID)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_external_memory_rdma (PhysicalDeviceExternalMemoryRDMAFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_QNX_external_memory_screen_buffer (PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_device_fault (PhysicalDeviceFaultFeaturesEXT)
import Vulkan.Core10.DeviceInitialization (PhysicalDeviceFeatures)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2 (PhysicalDeviceFeatures2)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_format_pack (PhysicalDeviceFormatPackFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map2 (PhysicalDeviceFragmentDensityMap2FeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map (PhysicalDeviceFragmentDensityMapFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_VALVE_fragment_density_map_layered (PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_density_map_offset (PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shader_barycentric (PhysicalDeviceFragmentShaderBarycentricFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_fragment_shader_interlock (PhysicalDeviceFragmentShaderInterlockFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_fragment_shading_rate_enums (PhysicalDeviceFragmentShadingRateEnumsFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_fragment_shading_rate (PhysicalDeviceFragmentShadingRateFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_frame_boundary (PhysicalDeviceFrameBoundaryFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_global_priority (PhysicalDeviceGlobalPriorityQueryFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_graphics_pipeline_library (PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_hdr_vivid (PhysicalDeviceHdrVividFeaturesHUAWEI)
import {-# SOURCE #-} Vulkan.Core14.PromotedStreamingTransfers' (PhysicalDeviceHostImageCopyFeatures)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset (PhysicalDeviceHostQueryResetFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_2d_view_of_3d (PhysicalDeviceImage2DViewOf3DFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_MESA_image_alignment_control (PhysicalDeviceImageAlignmentControlFeaturesMESA)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_compression_control (PhysicalDeviceImageCompressionControlFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_compression_control_swapchain (PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_image_processing2 (PhysicalDeviceImageProcessing2FeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_image_processing (PhysicalDeviceImageProcessingFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_image_robustness (PhysicalDeviceImageRobustnessFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_sliced_view_of_3d (PhysicalDeviceImageSlicedViewOf3DFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_image_view_min_lod (PhysicalDeviceImageViewMinLodFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer (PhysicalDeviceImagelessFramebufferFeatures)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_index_type_uint8Roadmap (PhysicalDeviceIndexTypeUint8Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_inherited_viewport_scissor (PhysicalDeviceInheritedViewportScissorFeaturesNV)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block (PhysicalDeviceInlineUniformBlockFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_internally_synchronized_queues (PhysicalDeviceInternallySynchronizedQueuesFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_invocation_mask (PhysicalDeviceInvocationMaskFeaturesHUAWEI)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_legacy_dithering (PhysicalDeviceLegacyDitheringFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_legacy_vertex_attributes (PhysicalDeviceLegacyVertexAttributesFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_line_rasterizationRoadmap (PhysicalDeviceLineRasterizationFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_linear_color_attachment (PhysicalDeviceLinearColorAttachmentFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_maintenance10 (PhysicalDeviceMaintenance10FeaturesKHR)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_maintenance4 (PhysicalDeviceMaintenance4Features)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap (PhysicalDeviceMaintenance5Features)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_maintenance6AdditionalFunctionality' (PhysicalDeviceMaintenance6Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_maintenance7 (PhysicalDeviceMaintenance7FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_maintenance8 (PhysicalDeviceMaintenance8FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_maintenance9 (PhysicalDeviceMaintenance9FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_map_memory_placed (PhysicalDeviceMapMemoryPlacedFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_decompression (PhysicalDeviceMemoryDecompressionFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_memory_priority (PhysicalDeviceMemoryPriorityFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_mesh_shader (PhysicalDeviceMeshShaderFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_mesh_shader (PhysicalDeviceMeshShaderFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multi_draw (PhysicalDeviceMultiDrawFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_multisampled_render_to_single_sampled (PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_multiview (PhysicalDeviceMultiviewFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_multiview_per_view_render_areas (PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_multiview_per_view_viewports (PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_mutable_descriptor_type (PhysicalDeviceMutableDescriptorTypeFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_nested_command_buffer (PhysicalDeviceNestedCommandBufferFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_non_seamless_cube_map (PhysicalDeviceNonSeamlessCubeMapFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_opacity_micromap (PhysicalDeviceOpacityMicromapFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_optical_flow (PhysicalDeviceOpticalFlowFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pageable_device_local_memory (PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_per_stage_descriptor_set (PhysicalDevicePerStageDescriptorSetFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_performance_query (PhysicalDevicePerformanceQueryFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_binary (PhysicalDevicePipelineBinaryFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_SEC_pipeline_cache_incremental_mode (PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_cache_control (PhysicalDevicePipelineCreationCacheControlFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_pipeline_executable_properties (PhysicalDevicePipelineExecutablePropertiesFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_library_group_handles (PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_pipeline_opacity_micromap (PhysicalDevicePipelineOpacityMicromapFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_pipeline_properties (PhysicalDevicePipelinePropertiesFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_EXT_pipeline_protected_accessAdditionalFunctionality' (PhysicalDevicePipelineProtectedAccessFeatures)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality' (PhysicalDevicePipelineRobustnessFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_portability_subset (PhysicalDevicePortabilitySubsetFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_present_barrier (PhysicalDevicePresentBarrierFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id2 (PhysicalDevicePresentId2FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_id (PhysicalDevicePresentIdFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_present_metering (PhysicalDevicePresentMeteringFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_mode_fifo_latest_ready (PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_present_timing (PhysicalDevicePresentTimingFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait2 (PhysicalDevicePresentWait2FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_present_wait (PhysicalDevicePresentWaitFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitive_topology_list_restart (PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_primitives_generated_query (PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_private_data (PhysicalDevicePrivateDataFeatures)
import {-# SOURCE #-} Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory (PhysicalDeviceProtectedMemoryFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_provoking_vertex (PhysicalDeviceProvokingVertexFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_push_constant_bank (PhysicalDevicePushConstantBankFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_rgba10x6_formats (PhysicalDeviceRGBA10X6FormatsFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_rasterization_order_attachment_access (PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_raw_access_chains (PhysicalDeviceRawAccessChainsFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_query (PhysicalDeviceRayQueryFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ray_tracing_invocation_reorder (PhysicalDeviceRayTracingInvocationReorderFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_invocation_reorder (PhysicalDeviceRayTracingInvocationReorderFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_linear_swept_spheres (PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_maintenance1 (PhysicalDeviceRayTracingMaintenance1FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_motion_blur (PhysicalDeviceRayTracingMotionBlurFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_pipeline (PhysicalDeviceRayTracingPipelineFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_ray_tracing_position_fetch (PhysicalDeviceRayTracingPositionFetchFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_ray_tracing_validation (PhysicalDeviceRayTracingValidationFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_IMG_relaxed_line_rasterization (PhysicalDeviceRelaxedLineRasterizationFeaturesIMG)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_render_pass_striped (PhysicalDeviceRenderPassStripedFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_representative_fragment_test (PhysicalDeviceRepresentativeFragmentTestFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_robustness2 (PhysicalDeviceRobustness2FeaturesKHR)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion (PhysicalDeviceSamplerYcbcrConversionFeatures)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout (PhysicalDeviceScalarBlockLayoutFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_scheduling_controls (PhysicalDeviceSchedulingControlsFeaturesARM)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts (PhysicalDeviceSeparateDepthStencilLayoutsFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_64bit_indexing (PhysicalDeviceShader64BitIndexingFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_atomic_float16_vector (PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float2 (PhysicalDeviceShaderAtomicFloat2FeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_atomic_float (PhysicalDeviceShaderAtomicFloatFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64 (PhysicalDeviceShaderAtomicInt64Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_bfloat16 (PhysicalDeviceShaderBfloat16FeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_clock (PhysicalDeviceShaderClockFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_shader_core_builtins (PhysicalDeviceShaderCoreBuiltinsFeaturesARM)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_shader_demote_to_helper_invocation (PhysicalDeviceShaderDemoteToHelperInvocationFeatures)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters (PhysicalDeviceShaderDrawParametersFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMD_shader_early_and_late_fragment_tests (PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD)
import {-# SOURCE #-} Vulkan.Extensions.VK_AMDX_shader_enqueue (PhysicalDeviceShaderEnqueueFeaturesAMDX)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_shader_expect_assumeRoadmap (PhysicalDeviceShaderExpectAssumeFeatures)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8 (PhysicalDeviceShaderFloat16Int8Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_float8 (PhysicalDeviceShaderFloat8FeaturesEXT)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_shader_float_controls2Roadmap (PhysicalDeviceShaderFloatControls2Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_fma (PhysicalDeviceShaderFmaFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_image_atomic_int64 (PhysicalDeviceShaderImageAtomicInt64FeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_image_footprint (PhysicalDeviceShaderImageFootprintFeaturesNV)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_shader_integer_dot_product (PhysicalDeviceShaderIntegerDotProductFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_INTEL_shader_integer_functions2 (PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_long_vector (PhysicalDeviceShaderLongVectorFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_maximal_reconvergence (PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_module_identifier (PhysicalDeviceShaderModuleIdentifierFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_object (PhysicalDeviceShaderObjectFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_quad_control (PhysicalDeviceShaderQuadControlFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_relaxed_extended_instruction (PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_replicated_composites (PhysicalDeviceShaderReplicatedCompositesFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shader_sm_builtins (PhysicalDeviceShaderSMBuiltinsFeaturesNV)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types (PhysicalDeviceShaderSubgroupExtendedTypesFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_subgroup_partitioned (PhysicalDeviceShaderSubgroupPartitionedFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_shader_subgroup_rotateRoadmap (PhysicalDeviceShaderSubgroupRotateFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_subgroup_uniform_control_flow (PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_shader_terminate_invocation (PhysicalDeviceShaderTerminateInvocationFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_tile_image (PhysicalDeviceShaderTileImageFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_shader_uniform_buffer_unsized_array (PhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_shader_untyped_pointers (PhysicalDeviceShaderUntypedPointersFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_NV_shading_rate_image (PhysicalDeviceShadingRateImageFeaturesNV)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control (PhysicalDeviceSubgroupSizeControlFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_subpass_merge_feedback (PhysicalDeviceSubpassMergeFeedbackFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_HUAWEI_subpass_shading (PhysicalDeviceSubpassShadingFeaturesHUAWEI)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_swapchain_maintenance1 (PhysicalDeviceSwapchainMaintenance1FeaturesKHR)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_synchronization2 (PhysicalDeviceSynchronization2Features)
import {-# SOURCE #-} Vulkan.Extensions.VK_ARM_tensors (PhysicalDeviceTensorFeaturesARM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texel_buffer_alignment (PhysicalDeviceTexelBufferAlignmentFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_texture_compression_astc_3d (PhysicalDeviceTextureCompressionASTC3DFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_EXT_texture_compression_astc_hdr (PhysicalDeviceTextureCompressionASTCHDRFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_tile_memory_heap (PhysicalDeviceTileMemoryHeapFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_tile_properties (PhysicalDeviceTilePropertiesFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_tile_shading (PhysicalDeviceTileShadingFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore (PhysicalDeviceTimelineSemaphoreFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_transform_feedback (PhysicalDeviceTransformFeedbackFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_unified_image_layouts (PhysicalDeviceUnifiedImageLayoutsFeaturesKHR)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout (PhysicalDeviceUniformBufferStandardLayoutFeatures)
import {-# SOURCE #-} Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers (PhysicalDeviceVariablePointersFeatures)
import {-# SOURCE #-} Vulkan.Core14.Promoted_From_VK_KHR_vertex_attribute_divisorRoadmap (PhysicalDeviceVertexAttributeDivisorFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_attribute_robustness (PhysicalDeviceVertexAttributeRobustnessFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state (PhysicalDeviceVertexInputDynamicStateFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan11Features)
import {-# SOURCE #-} Vulkan.Core12 (PhysicalDeviceVulkan12Features)
import {-# SOURCE #-} Vulkan.Core13 (PhysicalDeviceVulkan13Features)
import {-# SOURCE #-} Vulkan.Core14 (PhysicalDeviceVulkan14Features)
import {-# SOURCE #-} Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model (PhysicalDeviceVulkanMemoryModelFeatures)
import {-# SOURCE #-} Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout (PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_2plane_444_formats (PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_QCOM_ycbcr_degamma (PhysicalDeviceYcbcrDegammaFeaturesQCOM)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_ycbcr_image_arrays (PhysicalDeviceYcbcrImageArraysFeaturesEXT)
import {-# SOURCE #-} Vulkan.Extensions.VK_EXT_zero_initialize_device_memory (PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT)
import {-# SOURCE #-} Vulkan.Core13.Promoted_From_VK_KHR_zero_initialize_workgroup_memory (PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures)
import Vulkan.Core10.Handles (PhysicalDevice_T)
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.Core10.Enums.Result (Result)
import Vulkan.Core10.Enums.Result (Result(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Exception (VulkanException(..))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_CREATE_INFO))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO))
import Vulkan.Core10.Enums.Result (Result(SUCCESS))
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Enums.DeviceCreateFlags (DeviceCreateFlags(..))
import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlagBits(..))
import Vulkan.Core10.Enums.DeviceQueueCreateFlagBits (DeviceQueueCreateFlags)
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCreateDevice
  :: FunPtr (Ptr PhysicalDevice_T -> Ptr (SomeStruct DeviceCreateInfo) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result) -> Ptr PhysicalDevice_T -> Ptr (SomeStruct DeviceCreateInfo) -> Ptr AllocationCallbacks -> Ptr (Ptr Device_T) -> IO Result

-- | vkCreateDevice - Create a new device instance
--
-- = Description
--
-- 'createDevice' verifies that extensions and features requested in the
-- @ppEnabledExtensionNames@ and @pEnabledFeatures@ members of
-- @pCreateInfo@, respectively, are supported by the implementation. If any
-- requested extension is not supported, 'createDevice' /must/ return
-- 'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'. If any
-- requested feature is not supported, 'createDevice' /must/ return
-- 'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'. Support for
-- extensions /can/ be checked before creating a device by querying
-- 'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties'.
-- Support for features /can/ similarly be checked by querying
-- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceFeatures'.
--
-- After verifying and enabling the extensions the
-- 'Vulkan.Core10.Handles.Device' object is created and returned to the
-- application.
--
-- Multiple logical devices /can/ be created from the same physical device.
-- Logical device creation /may/ fail due to lack of device-specific
-- resources (in addition to other errors). If that occurs, 'createDevice'
-- will return 'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'.
--
-- == Valid Usage
--
-- -   #VUID-vkCreateDevice-ppEnabledExtensionNames-01387# All
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#extendingvulkan-extensions-extensiondependencies required device extensions>
--     for each extension in the
--     'DeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
--     present in that list
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCreateDevice-physicalDevice-parameter# @physicalDevice@
--     /must/ be a valid 'Vulkan.Core10.Handles.PhysicalDevice' handle
--
-- -   #VUID-vkCreateDevice-pCreateInfo-parameter# @pCreateInfo@ /must/ be
--     a valid pointer to a valid 'DeviceCreateInfo' structure
--
-- -   #VUID-vkCreateDevice-pAllocator-parameter# If @pAllocator@ is not
--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
--
-- -   #VUID-vkCreateDevice-pDevice-parameter# @pDevice@ /must/ be a valid
--     pointer to a 'Vulkan.Core10.Handles.Device' handle
--
-- == Return Codes
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-successcodes Success>]
--
--     -   'Vulkan.Core10.Enums.Result.SUCCESS'
--
-- [<https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-errorcodes Failure>]
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_DEVICE_LOST'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_EXTENSION_NOT_PRESENT'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_FEATURE_NOT_PRESENT'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_INITIALIZATION_FAILED'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_DEVICE_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_OUT_OF_HOST_MEMORY'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_TOO_MANY_OBJECTS'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_UNKNOWN'
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_VALIDATION_FAILED'
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device', 'DeviceCreateInfo',
-- 'Vulkan.Core10.Handles.PhysicalDevice'
createDevice :: forall a io
              . (Extendss DeviceCreateInfo a, PokeChain a, MonadIO io)
             => -- | @physicalDevice@ /must/ be one of the device handles returned from a
                -- call to 'Vulkan.Core10.DeviceInitialization.enumeratePhysicalDevices'
                -- (see
                -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#devsandqueues-physical-device-enumeration Physical Device Enumeration>).
                PhysicalDevice
             -> -- | @pCreateInfo@ is a pointer to a 'DeviceCreateInfo' structure containing
                -- information about how to create the device.
                (DeviceCreateInfo a)
             -> -- | @pAllocator@ controls host memory allocation as described in the
                -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#memory-allocation Memory Allocation>
                -- chapter.
                ("allocator" ::: Maybe AllocationCallbacks)
             -> io (Device)
createDevice :: forall (a :: [*]) (io :: * -> *).
(Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) =>
PhysicalDevice
-> DeviceCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io Device
createDevice PhysicalDevice
physicalDevice DeviceCreateInfo a
createInfo "allocator" ::: Maybe AllocationCallbacks
allocator = IO Device -> io Device
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Device -> io Device)
-> (ContT Device IO Device -> IO Device)
-> ContT Device IO Device
-> io Device
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT Device IO Device -> IO Device
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT Device IO Device -> io Device)
-> ContT Device IO Device -> io Device
forall a b. (a -> b) -> a -> b
$ do
  let cmds :: InstanceCmds
cmds = case PhysicalDevice
physicalDevice of PhysicalDevice{InstanceCmds
instanceCmds :: InstanceCmds
instanceCmds :: PhysicalDevice -> InstanceCmds
instanceCmds} -> InstanceCmds
instanceCmds
  let vkCreateDevicePtr :: FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
vkCreateDevicePtr = InstanceCmds
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr (SomeStruct DeviceCreateInfo)
      -> Ptr AllocationCallbacks
      -> Ptr (Ptr Device_T)
      -> IO Result)
pVkCreateDevice InstanceCmds
cmds
  IO () -> ContT Device IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT Device m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT Device IO ()) -> IO () -> ContT Device IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
vkCreateDevicePtr FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
-> FunPtr
     (Ptr PhysicalDevice_T
      -> Ptr (SomeStruct DeviceCreateInfo)
      -> Ptr AllocationCallbacks
      -> Ptr (Ptr Device_T)
      -> IO Result)
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkCreateDevice is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCreateDevice' :: Ptr PhysicalDevice_T
-> Ptr (SomeStruct DeviceCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr (Ptr Device_T)
-> IO Result
vkCreateDevice' = FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
-> Ptr PhysicalDevice_T
-> Ptr (SomeStruct DeviceCreateInfo)
-> Ptr AllocationCallbacks
-> Ptr (Ptr Device_T)
-> IO Result
mkVkCreateDevice FunPtr
  (Ptr PhysicalDevice_T
   -> Ptr (SomeStruct DeviceCreateInfo)
   -> Ptr AllocationCallbacks
   -> Ptr (Ptr Device_T)
   -> IO Result)
vkCreateDevicePtr
  pCreateInfo <- ((Ptr (DeviceCreateInfo a) -> IO Device) -> IO Device)
-> ContT Device IO (Ptr (DeviceCreateInfo a))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (DeviceCreateInfo a) -> IO Device) -> IO Device)
 -> ContT Device IO (Ptr (DeviceCreateInfo a)))
-> ((Ptr (DeviceCreateInfo a) -> IO Device) -> IO Device)
-> ContT Device IO (Ptr (DeviceCreateInfo a))
forall a b. (a -> b) -> a -> b
$ DeviceCreateInfo a
-> (Ptr (DeviceCreateInfo a) -> IO Device) -> IO Device
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
DeviceCreateInfo a -> (Ptr (DeviceCreateInfo a) -> IO b) -> IO b
withCStruct (DeviceCreateInfo a
createInfo)
  pAllocator <- case (allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks
-> ContT Device IO (Ptr AllocationCallbacks)
forall a. a -> ContT Device IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO Device) -> IO Device)
-> ContT Device IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO Device) -> IO Device)
 -> ContT Device IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO Device) -> IO Device)
-> ContT Device IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks
-> (Ptr AllocationCallbacks -> IO Device) -> IO Device
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  pPDevice <- ContT $ bracket (callocBytes @(Ptr Device_T) 8) free
  r <- lift $ traceAroundEvent "vkCreateDevice" (vkCreateDevice'
                                                   (physicalDeviceHandle (physicalDevice))
                                                   (forgetExtensions pCreateInfo)
                                                   pAllocator
                                                   (pPDevice))
  lift $ when (r < SUCCESS) (throwIO (VulkanException r))
  pDevice <- lift $ peek @(Ptr Device_T) pPDevice
  pDevice' <- lift $ (\Ptr Device_T
h -> Ptr Device_T -> DeviceCmds -> Device
Device Ptr Device_T
h (DeviceCmds -> Device) -> IO DeviceCmds -> IO Device
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> InstanceCmds -> Ptr Device_T -> IO DeviceCmds
initDeviceCmds InstanceCmds
cmds Ptr Device_T
h) pDevice
  pure $ (pDevice')

-- | A convenience wrapper to make a compatible pair of calls to
-- 'createDevice' and 'destroyDevice'
--
-- To ensure that 'destroyDevice' is always called: pass
-- 'Control.Exception.bracket' (or the allocate function from your
-- favourite resource management library) as the last argument.
-- To just extract the pair pass '(,)' as the last argument.
--
withDevice :: forall a io r . (Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) => PhysicalDevice -> DeviceCreateInfo a -> Maybe AllocationCallbacks -> (io Device -> (Device -> io ()) -> r) -> r
withDevice :: forall (a :: [*]) (io :: * -> *) r.
(Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) =>
PhysicalDevice
-> DeviceCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> (io Device -> (Device -> io ()) -> r)
-> r
withDevice PhysicalDevice
physicalDevice DeviceCreateInfo a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator io Device -> (Device -> io ()) -> r
b =
  io Device -> (Device -> io ()) -> r
b (PhysicalDevice
-> DeviceCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io Device
forall (a :: [*]) (io :: * -> *).
(Extendss DeviceCreateInfo a, PokeChain a, MonadIO io) =>
PhysicalDevice
-> DeviceCreateInfo a
-> ("allocator" ::: Maybe AllocationCallbacks)
-> io Device
createDevice PhysicalDevice
physicalDevice DeviceCreateInfo a
pCreateInfo "allocator" ::: Maybe AllocationCallbacks
pAllocator)
    (\(Device
o0) -> Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
forall (io :: * -> *).
MonadIO io =>
Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
destroyDevice Device
o0 "allocator" ::: Maybe AllocationCallbacks
pAllocator)


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkDestroyDevice
  :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ()) -> Ptr Device_T -> Ptr AllocationCallbacks -> IO ()

-- | vkDestroyDevice - Destroy a logical device
--
-- = Description
--
-- To ensure that no work is active on the device,
-- 'Vulkan.Core10.Queue.deviceWaitIdle' /can/ be used to gate the
-- destruction of the device. Prior to destroying a device, an application
-- is responsible for destroying\/freeing any Vulkan objects with explicit
-- @vkDestroy*@ or @vkFree*@ commands that were created using that device
-- as the first parameter of the corresponding @vkCreate*@ or @vkAllocate*@
-- command.
--
-- The lifetime of each of these objects is bound by the lifetime of the
-- 'Vulkan.Core10.Handles.Device' object. Therefore, to avoid resource
-- leaks, it is critical that an application explicitly free all of these
-- resources prior to calling 'destroyDevice'.
--
-- == Valid Usage
--
-- -   #VUID-vkDestroyDevice-device-05137# All child objects created on
--     @device@ that can be destroyed or freed /must/ have been destroyed
--     or freed prior to destroying @device@
--
-- -   #VUID-vkDestroyDevice-device-00379# If
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @device@ was created, a compatible set of callbacks
--     /must/ be provided here
--
-- -   #VUID-vkDestroyDevice-device-00380# If no
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' were
--     provided when @device@ was created, @pAllocator@ /must/ be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkDestroyDevice-device-parameter# If @device@ is not @NULL@,
--     @device@ /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkDestroyDevice-pAllocator-parameter# If @pAllocator@ is not
--     @NULL@, @pAllocator@ /must/ be a valid pointer to a valid
--     'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks' structure
--
-- == Host Synchronization
--
-- -   Host access to @device@ /must/ be externally synchronized
--
-- -   Host access to all 'Vulkan.Core10.Handles.Queue' objects created
--     from @device@ /must/ be externally synchronized
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
-- 'Vulkan.Core10.AllocationCallbacks.AllocationCallbacks',
-- 'Vulkan.Core10.Handles.Device'
destroyDevice :: forall io
               . (MonadIO io)
              => -- | @device@ is the logical device to destroy.
                 Device
              -> -- | @pAllocator@ controls host memory allocation as described in the
                 -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#memory-allocation Memory Allocation>
                 -- chapter.
                 ("allocator" ::: Maybe AllocationCallbacks)
              -> io ()
destroyDevice :: forall (io :: * -> *).
MonadIO io =>
Device -> ("allocator" ::: Maybe AllocationCallbacks) -> io ()
destroyDevice Device
device "allocator" ::: Maybe AllocationCallbacks
allocator = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkDestroyDevicePtr :: FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
vkDestroyDevicePtr = DeviceCmds
-> FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
pVkDestroyDevice (case Device
device of Device{DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds :: Device -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
vkDestroyDevicePtr FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
-> FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. (HasCallStack, Exception e) => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkDestroyDevice is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkDestroyDevice' :: Ptr Device_T -> Ptr AllocationCallbacks -> IO ()
vkDestroyDevice' = FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
-> Ptr Device_T -> Ptr AllocationCallbacks -> IO ()
mkVkDestroyDevice FunPtr (Ptr Device_T -> Ptr AllocationCallbacks -> IO ())
vkDestroyDevicePtr
  pAllocator <- case ("allocator" ::: Maybe AllocationCallbacks
allocator) of
    "allocator" ::: Maybe AllocationCallbacks
Nothing -> Ptr AllocationCallbacks -> ContT () IO (Ptr AllocationCallbacks)
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr AllocationCallbacks
forall a. Ptr a
nullPtr
    Just AllocationCallbacks
j -> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr AllocationCallbacks -> IO ()) -> IO ())
 -> ContT () IO (Ptr AllocationCallbacks))
-> ((Ptr AllocationCallbacks -> IO ()) -> IO ())
-> ContT () IO (Ptr AllocationCallbacks)
forall a b. (a -> b) -> a -> b
$ AllocationCallbacks -> (Ptr AllocationCallbacks -> IO ()) -> IO ()
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
AllocationCallbacks -> (Ptr AllocationCallbacks -> IO b) -> IO b
withCStruct (AllocationCallbacks
j)
  lift $ traceAroundEvent "vkDestroyDevice" (vkDestroyDevice'
                                               (deviceHandle (device))
                                               pAllocator)
  pure $ ()


-- | VkDeviceQueueCreateInfo - Structure specifying parameters of a newly
-- created device queue
--
-- = Description
--
-- Some queue families support functionality which requires a device
-- feature or extension to be enabled, as indicated by the
-- 'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'::@queueFlags@
-- member. Applications /may/ create such queues and submit
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#devsandqueues-submission queue submission commands>
-- to them without enabling the corresponding feature or extension, but
-- /must/ not utilize the specific functionality that they did not enable.
--
-- For example,
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#sparsememory sparse memory management operations>
-- /can/ be performed on queues from queue families exposing the
-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_SPARSE_BINDING_BIT' bit,
-- provided the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseBinding sparseBinding>
-- feature is enabled. If a queue family supports both the
-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_SPARSE_BINDING_BIT' and
-- 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_TRANSFER_BIT' bits,
-- applications /may/ create a queue from this family and issue transfer
-- operations without enabling the
-- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseBinding sparseBinding>
-- feature.
--
-- == Valid Usage
--
-- -   #VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381#
--     @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
--     returned by
--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
--
-- -   #VUID-VkDeviceQueueCreateInfo-queueCount-00382# @queueCount@ /must/
--     be less than or equal to the @queueCount@ member of the
--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
--     structure, as returned by
--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
--     in the @pQueueFamilyProperties@[queueFamilyIndex]
--
-- -   #VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383# Each element
--     of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@ inclusive
--
-- -   #VUID-VkDeviceQueueCreateInfo-flags-02861# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-protectedMemory protectedMemory>
--     feature is not enabled, the
--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT'
--     bit of @flags@ /must/ not be set
--
-- -   #VUID-VkDeviceQueueCreateInfo-flags-06449# If @flags@ includes
--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_PROTECTED_BIT',
--     @queueFamilyIndex@ /must/ be the index of a queue family that
--     includes the 'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_PROTECTED_BIT'
--     capability
--
-- -   #VUID-VkDeviceQueueCreateInfo-pNext-09398# If the @pNext@ chain
--     includes a
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.DeviceQueueShaderCoreControlCreateInfoARM'
--     structure then
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.PhysicalDeviceSchedulingControlsPropertiesARM'::@schedulingControlsFlags@
--     /must/ contain
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM'
--
-- -   #VUID-VkDeviceQueueCreateInfo-internallySynchronizedQueues-12348# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-internallySynchronizedQueues internallySynchronizedQueues>
--     feature is not enabled, @flags@ /must/ not include
--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DEVICE_QUEUE_CREATE_INTERNALLY_SYNCHRONIZED_BIT_KHR'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDeviceQueueCreateInfo-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO'
--
-- -   #VUID-VkDeviceQueueCreateInfo-pNext-pNext# Each @pNext@ member of
--     any structure (including this one) in the @pNext@ chain /must/ be
--     either @NULL@ or a pointer to a valid instance of
--     'Vulkan.Core14.Promoted_From_VK_KHR_global_priority.DeviceQueueGlobalPriorityCreateInfo'
--     or
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.DeviceQueueShaderCoreControlCreateInfoARM'
--
-- -   #VUID-VkDeviceQueueCreateInfo-sType-unique# The @sType@ value of
--     each structure in the @pNext@ chain /must/ be unique
--
-- -   #VUID-VkDeviceQueueCreateInfo-flags-parameter# @flags@ /must/ be a
--     valid combination of
--     'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlagBits'
--     values
--
-- -   #VUID-VkDeviceQueueCreateInfo-pQueuePriorities-parameter#
--     @pQueuePriorities@ /must/ be a valid pointer to an array of
--     @queueCount@ @float@ values
--
-- -   #VUID-VkDeviceQueueCreateInfo-queueCount-arraylength# @queueCount@
--     /must/ be greater than @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
-- 'DeviceCreateInfo',
-- 'Vulkan.Core10.Enums.DeviceQueueCreateFlagBits.DeviceQueueCreateFlags',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DeviceQueueCreateInfo (es :: [Type]) = DeviceQueueCreateInfo
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). DeviceQueueCreateInfo es -> Chain es
next :: Chain es
  , -- | @flags@ is a bitmask indicating behavior of the queues.
    forall (es :: [*]).
DeviceQueueCreateInfo es -> DeviceQueueCreateFlags
flags :: DeviceQueueCreateFlags
  , -- | @queueFamilyIndex@ is an unsigned integer indicating the index of the
    -- queue family in which to create the queues on this device. This index
    -- corresponds to the index of an element of the @pQueueFamilyProperties@
    -- array that was returned by
    -- 'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'.
    forall (es :: [*]). DeviceQueueCreateInfo es -> Word32
queueFamilyIndex :: Word32
  , -- | @pQueuePriorities@ is a pointer to an array of @queueCount@ normalized
    -- floating-point values, specifying priorities of work that will be
    -- submitted to each created queue. See
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#devsandqueues-priority Queue Priority>
    -- for more information.
    forall (es :: [*]). DeviceQueueCreateInfo es -> Vector Float
queuePriorities :: Vector Float
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceQueueCreateInfo (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DeviceQueueCreateInfo es)

instance Extensible DeviceQueueCreateInfo where
  extensibleTypeName :: String
extensibleTypeName = String
"DeviceQueueCreateInfo"
  setNext :: forall (ds :: [*]) (es :: [*]).
DeviceQueueCreateInfo ds -> Chain es -> DeviceQueueCreateInfo es
setNext DeviceQueueCreateInfo{Word32
Vector Float
DeviceQueueCreateFlags
Chain ds
next :: forall (es :: [*]). DeviceQueueCreateInfo es -> Chain es
flags :: forall (es :: [*]).
DeviceQueueCreateInfo es -> DeviceQueueCreateFlags
queueFamilyIndex :: forall (es :: [*]). DeviceQueueCreateInfo es -> Word32
queuePriorities :: forall (es :: [*]). DeviceQueueCreateInfo es -> Vector Float
next :: Chain ds
flags :: DeviceQueueCreateFlags
queueFamilyIndex :: Word32
queuePriorities :: Vector Float
..} Chain es
next' = DeviceQueueCreateInfo{next :: Chain es
next = Chain es
next', Word32
Vector Float
DeviceQueueCreateFlags
flags :: DeviceQueueCreateFlags
queueFamilyIndex :: Word32
queuePriorities :: Vector Float
flags :: DeviceQueueCreateFlags
queueFamilyIndex :: Word32
queuePriorities :: Vector Float
..}
  getNext :: forall (es :: [*]). DeviceQueueCreateInfo es -> Chain es
getNext DeviceQueueCreateInfo{Word32
Vector Float
DeviceQueueCreateFlags
Chain es
next :: forall (es :: [*]). DeviceQueueCreateInfo es -> Chain es
flags :: forall (es :: [*]).
DeviceQueueCreateInfo es -> DeviceQueueCreateFlags
queueFamilyIndex :: forall (es :: [*]). DeviceQueueCreateInfo es -> Word32
queuePriorities :: forall (es :: [*]). DeviceQueueCreateInfo es -> Vector Float
next :: Chain es
flags :: DeviceQueueCreateFlags
queueFamilyIndex :: Word32
queuePriorities :: Vector Float
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceQueueCreateInfo e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends DeviceQueueCreateInfo e => b) -> Maybe b
extends proxy e
_ Extends DeviceQueueCreateInfo e => b
f
    | Just e :~: DeviceQueueShaderCoreControlCreateInfoARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceQueueShaderCoreControlCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceQueueCreateInfo e => b
f
    | Just e :~: DeviceQueueGlobalPriorityCreateInfo
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceQueueGlobalPriorityCreateInfo = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceQueueCreateInfo e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DeviceQueueCreateInfo es
         , PokeChain es ) => ToCStruct (DeviceQueueCreateInfo es) where
  withCStruct :: forall b.
DeviceQueueCreateInfo es
-> (Ptr (DeviceQueueCreateInfo es) -> IO b) -> IO b
withCStruct DeviceQueueCreateInfo es
x Ptr (DeviceQueueCreateInfo es) -> IO b
f = Int -> (Ptr (DeviceQueueCreateInfo es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr (DeviceQueueCreateInfo es) -> IO b) -> IO b)
-> (Ptr (DeviceQueueCreateInfo es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DeviceQueueCreateInfo es)
p -> Ptr (DeviceQueueCreateInfo es)
-> DeviceQueueCreateInfo es -> IO b -> IO b
forall b.
Ptr (DeviceQueueCreateInfo es)
-> DeviceQueueCreateInfo es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DeviceQueueCreateInfo es)
p DeviceQueueCreateInfo es
x (Ptr (DeviceQueueCreateInfo es) -> IO b
f Ptr (DeviceQueueCreateInfo es)
p)
  pokeCStruct :: forall b.
Ptr (DeviceQueueCreateInfo es)
-> DeviceQueueCreateInfo es -> IO b -> IO b
pokeCStruct Ptr (DeviceQueueCreateInfo es)
p DeviceQueueCreateInfo{Word32
Vector Float
DeviceQueueCreateFlags
Chain es
next :: forall (es :: [*]). DeviceQueueCreateInfo es -> Chain es
flags :: forall (es :: [*]).
DeviceQueueCreateInfo es -> DeviceQueueCreateFlags
queueFamilyIndex :: forall (es :: [*]). DeviceQueueCreateInfo es -> Word32
queuePriorities :: forall (es :: [*]). DeviceQueueCreateInfo es -> Vector Float
next :: Chain es
flags :: DeviceQueueCreateFlags
queueFamilyIndex :: Word32
queuePriorities :: Vector Float
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DeviceQueueCreateInfo es)
p Ptr (DeviceQueueCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags)) (flags)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (queueFamilyIndex)
    lift $ poke ((p `plusPtr` 24 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queuePriorities)) :: Word32))
    pPQueuePriorities' <- ContT $ allocaBytes @CFloat ((Data.Vector.length (queuePriorities)) * 4)
    lift $ Data.Vector.imapM_ (\Int
i Float
e -> Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr CFloat
pPQueuePriorities' Ptr CFloat -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CFloat) (Float -> CFloat
CFloat (Float
e))) (queuePriorities)
    lift $ poke ((p `plusPtr` 32 :: Ptr (Ptr CFloat))) (pPQueuePriorities')
    lift $ f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (DeviceQueueCreateInfo es) -> IO b -> IO b
pokeZeroCStruct Ptr (DeviceQueueCreateInfo es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DeviceQueueCreateInfo es)
p Ptr (DeviceQueueCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) (zero)
    lift $ f

instance ( Extendss DeviceQueueCreateInfo es
         , PeekChain es ) => FromCStruct (DeviceQueueCreateInfo es) where
  peekCStruct :: Ptr (DeviceQueueCreateInfo es) -> IO (DeviceQueueCreateInfo es)
peekCStruct Ptr (DeviceQueueCreateInfo es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (DeviceQueueCreateInfo es)
p Ptr (DeviceQueueCreateInfo es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    flags <- peek @DeviceQueueCreateFlags ((p `plusPtr` 16 :: Ptr DeviceQueueCreateFlags))
    queueFamilyIndex <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    queueCount <- peek @Word32 ((p `plusPtr` 24 :: Ptr Word32))
    pQueuePriorities <- peek @(Ptr CFloat) ((p `plusPtr` 32 :: Ptr (Ptr CFloat)))
    pQueuePriorities' <- generateM (fromIntegral queueCount) (\Int
i -> do
      pQueuePrioritiesElem <- forall a. Storable a => Ptr a -> IO a
peek @CFloat ((Ptr CFloat
pQueuePriorities Ptr CFloat -> Int -> Ptr CFloat
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr CFloat))
      pure $ coerce @CFloat @Float pQueuePrioritiesElem)
    pure $ DeviceQueueCreateInfo
             next flags queueFamilyIndex pQueuePriorities'

instance es ~ '[] => Zero (DeviceQueueCreateInfo es) where
  zero :: DeviceQueueCreateInfo es
zero = Chain es
-> DeviceQueueCreateFlags
-> Word32
-> Vector Float
-> DeviceQueueCreateInfo es
forall (es :: [*]).
Chain es
-> DeviceQueueCreateFlags
-> Word32
-> Vector Float
-> DeviceQueueCreateInfo es
DeviceQueueCreateInfo
           ()
           DeviceQueueCreateFlags
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Vector Float
forall a. Monoid a => a
mempty


-- | VkDeviceCreateInfo - Structure specifying parameters of a newly created
-- device
--
-- == Valid Usage
--
-- -   #VUID-VkDeviceCreateInfo-queueFamilyIndex-02802# The combination of
--     the values in the @queueFamilyIndex@ and @flags@ members of each
--     element of @pQueueCreateInfos@ /must/ be unique within
--     @pQueueCreateInfos@
--
-- -   #VUID-VkDeviceCreateInfo-pQueueCreateInfos-06755# If multiple
--     elements of @pQueueCreateInfos@ share the same @queueFamilyIndex@,
--     the sum of their @queueCount@ members /must/ be less than or equal
--     to the @queueCount@ member of the
--     'Vulkan.Core10.DeviceInitialization.QueueFamilyProperties'
--     structure, as returned by
--     'Vulkan.Core10.DeviceInitialization.getPhysicalDeviceQueueFamilyProperties'
--     in the @pQueueFamilyProperties@[queueFamilyIndex]
--
-- -   #VUID-VkDeviceCreateInfo-pQueueCreateInfos-06654# If multiple
--     elements of @pQueueCreateInfos@ share the same @queueFamilyIndex@,
--     then all of such elements /must/ have the same global priority
--     level, which /can/ be specified explicitly by the including a
--     'Vulkan.Core14.Promoted_From_VK_KHR_global_priority.DeviceQueueGlobalPriorityCreateInfo'
--     structure in the @pNext@ chain, or by the implicit default value
--
-- -   #VUID-VkDeviceCreateInfo-pNext-00373# If the @pNext@ chain includes
--     a
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
--     structure, then @pEnabledFeatures@ /must/ be @NULL@
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-01840# If
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceProperties'::@apiVersion@
--     advertises Vulkan 1.1 or later, @ppEnabledExtensionNames@ /must/ not
--     contain @VK_AMD_negative_viewport_height@
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374#
--     @ppEnabledExtensionNames@ /must/ not contain both
--     @VK_KHR_maintenance1@ and @VK_AMD_negative_viewport_height@
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-03328#
--     @ppEnabledExtensionNames@ /must/ not contain both
--     @VK_KHR_buffer_device_address@ and @VK_EXT_buffer_device_address@
--
-- -   #VUID-VkDeviceCreateInfo-pNext-04748# If the @pNext@ chain includes
--     a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure and
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@bufferDeviceAddress@
--     is 'Vulkan.Core10.FundamentalTypes.TRUE', @ppEnabledExtensionNames@
--     /must/ not contain @VK_EXT_buffer_device_address@
--
-- -   #VUID-VkDeviceCreateInfo-pNext-02829# If the @pNext@ chain includes
--     a 'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then it
--     /must/ not include a
--     'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
--     'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
--     or
--     'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures'
--     structure
--
-- -   #VUID-VkDeviceCreateInfo-pNext-02830# If the @pNext@ chain includes
--     a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then it
--     /must/ not include a
--     'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
--     'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
--     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
--     or
--     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures'
--     structure
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-04476# If
--     @ppEnabledExtensionNames@ contains
--     @\"VK_KHR_shader_draw_parameters\"@ and the @pNext@ chain includes a
--     'Vulkan.Core12.PhysicalDeviceVulkan11Features' structure, then
--     'Vulkan.Core12.PhysicalDeviceVulkan11Features'::@shaderDrawParameters@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02831# If
--     @ppEnabledExtensionNames@ contains @\"VK_KHR_draw_indirect_count\"@
--     and the @pNext@ chain includes a
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@drawIndirectCount@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02832# If
--     @ppEnabledExtensionNames@ contains
--     @\"VK_KHR_sampler_mirror_clamp_to_edge\"@ and the @pNext@ chain
--     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
--     then
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerMirrorClampToEdge@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02833# If
--     @ppEnabledExtensionNames@ contains @\"VK_EXT_descriptor_indexing\"@
--     and the @pNext@ chain includes a
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@descriptorIndexing@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02834# If
--     @ppEnabledExtensionNames@ contains
--     @\"VK_EXT_sampler_filter_minmax\"@ and the @pNext@ chain includes a
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure, then
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@samplerFilterMinmax@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-02835# If
--     @ppEnabledExtensionNames@ contains
--     @\"VK_EXT_shader_viewport_index_layer\"@ and the @pNext@ chain
--     includes a 'Vulkan.Core12.PhysicalDeviceVulkan12Features' structure,
--     then
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputViewportIndex@
--     and
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features'::@shaderOutputLayer@
--     /must/ both be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-pNext-06532# If the @pNext@ chain includes
--     a 'Vulkan.Core13.PhysicalDeviceVulkan13Features' structure, then it
--     /must/ not include a
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PhysicalDeviceDynamicRenderingFeatures',
--     'Vulkan.Core13.Promoted_From_VK_EXT_image_robustness.PhysicalDeviceImageRobustnessFeatures',
--     'Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeatures',
--     'Vulkan.Core13.Promoted_From_VK_KHR_maintenance4.PhysicalDeviceMaintenance4Features',
--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeatures',
--     'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PhysicalDevicePrivateDataFeatures',
--     'Vulkan.Core13.Promoted_From_VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeatures',
--     'Vulkan.Core13.Promoted_From_VK_KHR_shader_integer_dot_product.PhysicalDeviceShaderIntegerDotProductFeatures',
--     'Vulkan.Core13.Promoted_From_VK_KHR_shader_terminate_invocation.PhysicalDeviceShaderTerminateInvocationFeatures',
--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeatures',
--     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.PhysicalDeviceSynchronization2Features',
--     'Vulkan.Core13.Promoted_From_VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeatures',
--     or
--     'Vulkan.Core13.Promoted_From_VK_KHR_zero_initialize_workgroup_memory.PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures'
--     structure
--
-- -   #VUID-VkDeviceCreateInfo-pNext-10360# If the @pNext@ chain includes
--     a 'Vulkan.Core14.PhysicalDeviceVulkan14Features' structure, then it
--     /must/ not include a
--     'Vulkan.Core14.Promoted_From_VK_KHR_global_priority.PhysicalDeviceGlobalPriorityQueryFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_subgroup_rotateRoadmap.PhysicalDeviceShaderSubgroupRotateFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_float_controls2Roadmap.PhysicalDeviceShaderFloatControls2Features',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_expect_assumeRoadmap.PhysicalDeviceShaderExpectAssumeFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_line_rasterizationRoadmap.PhysicalDeviceLineRasterizationFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_vertex_attribute_divisorRoadmap.PhysicalDeviceVertexAttributeDivisorFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_index_type_uint8Roadmap.PhysicalDeviceIndexTypeUint8Features',
--     'Vulkan.Core14.Promoted_From_VK_KHR_dynamic_rendering_local_readRoadmap.PhysicalDeviceDynamicRenderingLocalReadFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PhysicalDeviceMaintenance5Features',
--     'Vulkan.Core14.Promoted_From_VK_KHR_maintenance6AdditionalFunctionality'.PhysicalDeviceMaintenance6Features',
--     'Vulkan.Core14.Promoted_From_VK_EXT_pipeline_protected_accessAdditionalFunctionality'.PhysicalDevicePipelineProtectedAccessFeatures',
--     'Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality'.PhysicalDevicePipelineRobustnessFeatures',
--     or
--     'Vulkan.Core14.PromotedStreamingTransfers'.PhysicalDeviceHostImageCopyFeatures'
--     structure
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-10858# If
--     @ppEnabledExtensionNames@ contains @\"VK_KHR_push_descriptor\"@ and
--     the @pNext@ chain includes a
--     'Vulkan.Core14.PhysicalDeviceVulkan14Features' structure, then
--     'Vulkan.Core14.PhysicalDeviceVulkan14Features'::@pushDescriptor@
--     /must/ be 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- -   #VUID-VkDeviceCreateInfo-pProperties-04451# If the
--     @VK_KHR_portability_subset@ extension is included in @pProperties@
--     of
--     'Vulkan.Core10.ExtensionDiscovery.enumerateDeviceExtensionProperties',
--     @ppEnabledExtensionNames@ /must/ include
--     @\"VK_KHR_portability_subset\"@
--
-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04478# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shadingRateImage shadingRateImage>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04479# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shadingRateImage shadingRateImage>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-shadingRateImage-04480# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shadingRateImage shadingRateImage>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04481# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-pipelineFragmentShadingRate pipelineFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04482# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-primitiveFragmentShadingRate primitiveFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-fragmentDensityMap-04483# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-fragmentDensityMap fragmentDensityMap>
--     feature is enabled, the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-attachmentFragmentShadingRate attachmentFragmentShadingRate>
--     feature /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-None-04896# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseImageInt64Atomics sparseImageInt64Atomics>
--     feature is enabled,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shaderImageInt64Atomics shaderImageInt64Atomics>
--     /must/ be enabled
--
-- -   #VUID-VkDeviceCreateInfo-None-04897# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseImageFloat32Atomics sparseImageFloat32Atomics>
--     feature is enabled,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shaderImageFloat32Atomics shaderImageFloat32Atomics>
--     /must/ be enabled
--
-- -   #VUID-VkDeviceCreateInfo-None-04898# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseImageFloat32AtomicAdd sparseImageFloat32AtomicAdd>
--     feature is enabled,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shaderImageFloat32AtomicAdd shaderImageFloat32AtomicAdd>
--     /must/ be enabled
--
-- -   #VUID-VkDeviceCreateInfo-sparseImageFloat32AtomicMinMax-04975# If
--     the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-sparseImageFloat32AtomicMinMax sparseImageFloat32AtomicMinMax>
--     feature is enabled,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-shaderImageFloat32AtomicMinMax shaderImageFloat32AtomicMinMax>
--     /must/ be enabled
--
-- -   #VUID-VkDeviceCreateInfo-robustBufferAccess-10247# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-robustBufferAccess robustBufferAccess>
--     feature is enabled, and
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#limits-robustBufferAccessUpdateAfterBind robustBufferAccessUpdateAfterBind>
--     is 'Vulkan.Core10.FundamentalTypes.FALSE', then
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingUniformBufferUpdateAfterBind descriptorBindingUniformBufferUpdateAfterBind>,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingStorageBufferUpdateAfterBind descriptorBindingStorageBufferUpdateAfterBind>,
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingUniformTexelBufferUpdateAfterBind descriptorBindingUniformTexelBufferUpdateAfterBind>,
--     and
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBindingStorageTexelBufferUpdateAfterBind descriptorBindingStorageTexelBufferUpdateAfterBind>
--     /must/ not be enabled
--
-- -   #VUID-VkDeviceCreateInfo-None-08095# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-descriptorBuffer descriptorBuffer>
--     feature is enabled, @ppEnabledExtensionNames@ /must/ not contain
--     @VK_AMD_shader_fragment_mask@
--
-- -   #VUID-VkDeviceCreateInfo-pNext-09396# If the @pNext@ chain includes
--     a
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.DeviceQueueShaderCoreControlCreateInfoARM'
--     structure, then it /must/ not be included in the @pNext@ chain of
--     any of the 'DeviceQueueCreateInfo' structures in @pQueueCreateInfos@
--
-- -   #VUID-VkDeviceCreateInfo-pNext-09397# If the @pNext@ chain includes
--     a
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.DeviceQueueShaderCoreControlCreateInfoARM'
--     structure then
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.PhysicalDeviceSchedulingControlsPropertiesARM'::@schedulingControlsFlags@
--     /must/ contain
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.PHYSICAL_DEVICE_SCHEDULING_CONTROLS_SHADER_CORE_COUNT_ARM'
--
-- -   #VUID-VkDeviceCreateInfo-None-10778# If the
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-maintenance9 maintenance9>
--     feature is not supported, @queueCreateInfoCount@ /must/ be greater
--     than @0@
--
-- -   #VUID-VkDeviceCreateInfo-queueFamilyIndex-11831# If any element of
--     pQueueCreateInfos specifies a @queueFamilyIndex@ that supports
--     'Vulkan.Core10.Enums.QueueFlagBits.QUEUE_DATA_GRAPH_BIT_ARM' and
--     that @queueFamilyIndex@ enumerates an engine through
--     'Vulkan.Extensions.VK_ARM_data_graph.getPhysicalDeviceQueueFamilyDataGraphPropertiesARM'
--     with @type@
--     'Vulkan.Extensions.VK_ARM_data_graph.PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_NEURAL_QCOM'
--     or
--     'Vulkan.Extensions.VK_ARM_data_graph.PHYSICAL_DEVICE_DATA_GRAPH_PROCESSING_ENGINE_TYPE_COMPUTE_QCOM',
--     a
--     'Vulkan.Extensions.VK_QCOM_data_graph_model.PhysicalDeviceDataGraphModelFeaturesQCOM'
--     structure /must/ be included in @pNext@ with
--     <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features-dataGraphModelQCOM dataGraphModel>
--     set to 'Vulkan.Core10.FundamentalTypes.TRUE'
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDeviceCreateInfo-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_CREATE_INFO'
--
-- -   #VUID-VkDeviceCreateInfo-pNext-pNext# Each @pNext@ member of any
--     structure (including this one) in the @pNext@ chain /must/ be either
--     @NULL@ or a pointer to a valid instance of
--     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT',
--     'Vulkan.Extensions.VK_NV_device_diagnostics_config.DeviceDiagnosticsConfigCreateInfoNV',
--     'Vulkan.Core11.Promoted_From_VK_KHR_device_group_creation.DeviceGroupDeviceCreateInfo',
--     'Vulkan.Extensions.VK_AMD_memory_overallocation_behavior.DeviceMemoryOverallocationCreateInfoAMD',
--     'Vulkan.Extensions.VK_KHR_pipeline_binary.DevicePipelineBinaryInternalCacheControlKHR',
--     'Vulkan.Core13.Promoted_From_VK_EXT_private_data.DevicePrivateDataCreateInfo',
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.DeviceQueueShaderCoreControlCreateInfoARM',
--     'Vulkan.Extensions.VK_NV_external_compute_queue.ExternalComputeQueueDeviceCreateInfoNV',
--     'Vulkan.Core11.Promoted_From_VK_KHR_16bit_storage.PhysicalDevice16BitStorageFeatures',
--     'Vulkan.Extensions.VK_EXT_4444_formats.PhysicalDevice4444FormatsFeaturesEXT',
--     'Vulkan.Core12.Promoted_From_VK_KHR_8bit_storage.PhysicalDevice8BitStorageFeatures',
--     'Vulkan.Extensions.VK_EXT_astc_decode_mode.PhysicalDeviceASTCDecodeFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_acceleration_structure.PhysicalDeviceAccelerationStructureFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_device_address_binding_report.PhysicalDeviceAddressBindingReportFeaturesEXT',
--     'Vulkan.Extensions.VK_SEC_amigo_profiling.PhysicalDeviceAmigoProfilingFeaturesSEC',
--     'Vulkan.Extensions.VK_AMD_anti_lag.PhysicalDeviceAntiLagFeaturesAMD',
--     'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_dynamic_state.PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_attachment_feedback_loop_layout.PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_blend_operation_advanced.PhysicalDeviceBlendOperationAdvancedFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_border_color_swizzle.PhysicalDeviceBorderColorSwizzleFeaturesEXT',
--     'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeatures',
--     'Vulkan.Extensions.VK_EXT_buffer_device_address.PhysicalDeviceBufferDeviceAddressFeaturesEXT',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceClusterAccelerationStructureFeaturesNV VkPhysicalDeviceClusterAccelerationStructureFeaturesNV>,
--     'Vulkan.Extensions.VK_HUAWEI_cluster_culling_shader.PhysicalDeviceClusterCullingShaderFeaturesHUAWEI',
--     'Vulkan.Extensions.VK_AMD_device_coherent_memory.PhysicalDeviceCoherentMemoryFeaturesAMD',
--     'Vulkan.Extensions.VK_EXT_color_write_enable.PhysicalDeviceColorWriteEnableFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_command_buffer_inheritance.PhysicalDeviceCommandBufferInheritanceFeaturesNV',
--     'Vulkan.Extensions.VK_NV_compute_occupancy_priority.PhysicalDeviceComputeOccupancyPriorityFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_compute_shader_derivatives.PhysicalDeviceComputeShaderDerivativesFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_conditional_rendering.PhysicalDeviceConditionalRenderingFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_cooperative_matrix2.PhysicalDeviceCooperativeMatrix2FeaturesNV',
--     'Vulkan.Extensions.VK_QCOM_cooperative_matrix_conversion.PhysicalDeviceCooperativeMatrixConversionFeaturesQCOM',
--     'Vulkan.Extensions.VK_KHR_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_cooperative_matrix.PhysicalDeviceCooperativeMatrixFeaturesNV',
--     'Vulkan.Extensions.VK_NV_cooperative_vector.PhysicalDeviceCooperativeVectorFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_copy_memory_indirect.PhysicalDeviceCopyMemoryIndirectFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_copy_memory_indirect.PhysicalDeviceCopyMemoryIndirectFeaturesNV',
--     'Vulkan.Extensions.VK_NV_corner_sampled_image.PhysicalDeviceCornerSampledImageFeaturesNV',
--     'Vulkan.Extensions.VK_NV_coverage_reduction_mode.PhysicalDeviceCoverageReductionModeFeaturesNV',
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_clamp.PhysicalDeviceCubicClampFeaturesQCOM',
--     'Vulkan.Extensions.VK_QCOM_filter_cubic_weights.PhysicalDeviceCubicWeightsFeaturesQCOM',
--     'Vulkan.Extensions.VK_NV_cuda_kernel_launch.PhysicalDeviceCudaKernelLaunchFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_custom_border_color.PhysicalDeviceCustomBorderColorFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_custom_resolve.PhysicalDeviceCustomResolveFeaturesEXT',
--     'Vulkan.Extensions.VK_ARM_data_graph.PhysicalDeviceDataGraphFeaturesARM',
--     'Vulkan.Extensions.VK_QCOM_data_graph_model.PhysicalDeviceDataGraphModelFeaturesQCOM',
--     'Vulkan.Extensions.VK_NV_dedicated_allocation_image_aliasing.PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV',
--     'Vulkan.Extensions.VK_AMDX_dense_geometry_format.PhysicalDeviceDenseGeometryFormatFeaturesAMDX',
--     'Vulkan.Extensions.VK_EXT_depth_bias_control.PhysicalDeviceDepthBiasControlFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_depth_clamp_control.PhysicalDeviceDepthClampControlFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_depth_clamp_zero_one.PhysicalDeviceDepthClampZeroOneFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_depth_clip_control.PhysicalDeviceDepthClipControlFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_depth_clip_enable.PhysicalDeviceDepthClipEnableFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_descriptor_buffer.PhysicalDeviceDescriptorBufferFeaturesEXT',
--     'Vulkan.Extensions.VK_ARM_tensors.PhysicalDeviceDescriptorBufferTensorFeaturesARM',
--     'Vulkan.Extensions.VK_EXT_descriptor_heap.PhysicalDeviceDescriptorHeapFeaturesEXT',
--     'Vulkan.Core12.Promoted_From_VK_EXT_descriptor_indexing.PhysicalDeviceDescriptorIndexingFeatures',
--     'Vulkan.Extensions.VK_NV_descriptor_pool_overallocation.PhysicalDeviceDescriptorPoolOverallocationFeaturesNV',
--     'Vulkan.Extensions.VK_VALVE_descriptor_set_host_mapping.PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE',
--     'Vulkan.Extensions.VK_NV_device_generated_commands_compute.PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_device_generated_commands.PhysicalDeviceDeviceGeneratedCommandsFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_device_memory_report.PhysicalDeviceDeviceMemoryReportFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_device_diagnostics_config.PhysicalDeviceDiagnosticsConfigFeaturesNV',
--     'Vulkan.Extensions.VK_NV_displacement_micromap.PhysicalDeviceDisplacementMicromapFeaturesNV',
--     'Vulkan.Core13.Promoted_From_VK_KHR_dynamic_rendering.PhysicalDeviceDynamicRenderingFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_dynamic_rendering_local_readRoadmap.PhysicalDeviceDynamicRenderingLocalReadFeatures',
--     'Vulkan.Extensions.VK_EXT_dynamic_rendering_unused_attachments.PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_scissor_exclusive.PhysicalDeviceExclusiveScissorFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state2.PhysicalDeviceExtendedDynamicState2FeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state3.PhysicalDeviceExtendedDynamicState3FeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_extended_dynamic_state.PhysicalDeviceExtendedDynamicStateFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_extended_sparse_address_space.PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV',
--     'Vulkan.Extensions.VK_ANDROID_external_format_resolve.PhysicalDeviceExternalFormatResolveFeaturesANDROID',
--     'Vulkan.Extensions.VK_NV_external_memory_rdma.PhysicalDeviceExternalMemoryRDMAFeaturesNV',
--     'Vulkan.Extensions.VK_QNX_external_memory_screen_buffer.PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX',
--     'Vulkan.Extensions.VK_EXT_device_fault.PhysicalDeviceFaultFeaturesEXT',
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Extensions.VK_ARM_format_pack.PhysicalDeviceFormatPackFeaturesARM',
--     'Vulkan.Extensions.VK_EXT_fragment_density_map2.PhysicalDeviceFragmentDensityMap2FeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_fragment_density_map.PhysicalDeviceFragmentDensityMapFeaturesEXT',
--     'Vulkan.Extensions.VK_VALVE_fragment_density_map_layered.PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE',
--     'Vulkan.Extensions.VK_EXT_fragment_density_map_offset.PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_fragment_shader_barycentric.PhysicalDeviceFragmentShaderBarycentricFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_fragment_shader_interlock.PhysicalDeviceFragmentShaderInterlockFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_fragment_shading_rate_enums.PhysicalDeviceFragmentShadingRateEnumsFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_fragment_shading_rate.PhysicalDeviceFragmentShadingRateFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_frame_boundary.PhysicalDeviceFrameBoundaryFeaturesEXT',
--     'Vulkan.Core14.Promoted_From_VK_KHR_global_priority.PhysicalDeviceGlobalPriorityQueryFeatures',
--     'Vulkan.Extensions.VK_EXT_graphics_pipeline_library.PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT',
--     'Vulkan.Extensions.VK_HUAWEI_hdr_vivid.PhysicalDeviceHdrVividFeaturesHUAWEI',
--     'Vulkan.Core14.PromotedStreamingTransfers'.PhysicalDeviceHostImageCopyFeatures',
--     'Vulkan.Core12.Promoted_From_VK_EXT_host_query_reset.PhysicalDeviceHostQueryResetFeatures',
--     'Vulkan.Extensions.VK_EXT_image_2d_view_of_3d.PhysicalDeviceImage2DViewOf3DFeaturesEXT',
--     'Vulkan.Extensions.VK_MESA_image_alignment_control.PhysicalDeviceImageAlignmentControlFeaturesMESA',
--     'Vulkan.Extensions.VK_EXT_image_compression_control.PhysicalDeviceImageCompressionControlFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_image_compression_control_swapchain.PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT',
--     'Vulkan.Extensions.VK_QCOM_image_processing2.PhysicalDeviceImageProcessing2FeaturesQCOM',
--     'Vulkan.Extensions.VK_QCOM_image_processing.PhysicalDeviceImageProcessingFeaturesQCOM',
--     'Vulkan.Core13.Promoted_From_VK_EXT_image_robustness.PhysicalDeviceImageRobustnessFeatures',
--     'Vulkan.Extensions.VK_EXT_image_sliced_view_of_3d.PhysicalDeviceImageSlicedViewOf3DFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_image_view_min_lod.PhysicalDeviceImageViewMinLodFeaturesEXT',
--     'Vulkan.Core12.Promoted_From_VK_KHR_imageless_framebuffer.PhysicalDeviceImagelessFramebufferFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_index_type_uint8Roadmap.PhysicalDeviceIndexTypeUint8Features',
--     'Vulkan.Extensions.VK_NV_inherited_viewport_scissor.PhysicalDeviceInheritedViewportScissorFeaturesNV',
--     'Vulkan.Core13.Promoted_From_VK_EXT_inline_uniform_block.PhysicalDeviceInlineUniformBlockFeatures',
--     'Vulkan.Extensions.VK_KHR_internally_synchronized_queues.PhysicalDeviceInternallySynchronizedQueuesFeaturesKHR',
--     'Vulkan.Extensions.VK_HUAWEI_invocation_mask.PhysicalDeviceInvocationMaskFeaturesHUAWEI',
--     'Vulkan.Extensions.VK_EXT_legacy_dithering.PhysicalDeviceLegacyDitheringFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_legacy_vertex_attributes.PhysicalDeviceLegacyVertexAttributesFeaturesEXT',
--     'Vulkan.Core14.Promoted_From_VK_KHR_line_rasterizationRoadmap.PhysicalDeviceLineRasterizationFeatures',
--     'Vulkan.Extensions.VK_NV_linear_color_attachment.PhysicalDeviceLinearColorAttachmentFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_maintenance10.PhysicalDeviceMaintenance10FeaturesKHR',
--     'Vulkan.Core13.Promoted_From_VK_KHR_maintenance4.PhysicalDeviceMaintenance4Features',
--     'Vulkan.Core14.Promoted_From_VK_KHR_maintenance5Roadmap.PhysicalDeviceMaintenance5Features',
--     'Vulkan.Core14.Promoted_From_VK_KHR_maintenance6AdditionalFunctionality'.PhysicalDeviceMaintenance6Features',
--     'Vulkan.Extensions.VK_KHR_maintenance7.PhysicalDeviceMaintenance7FeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_maintenance8.PhysicalDeviceMaintenance8FeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_maintenance9.PhysicalDeviceMaintenance9FeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_map_memory_placed.PhysicalDeviceMapMemoryPlacedFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_memory_decompression.PhysicalDeviceMemoryDecompressionFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_memory_priority.PhysicalDeviceMemoryPriorityFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_mesh_shader.PhysicalDeviceMeshShaderFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_mesh_shader.PhysicalDeviceMeshShaderFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_multi_draw.PhysicalDeviceMultiDrawFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_multisampled_render_to_single_sampled.PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT',
--     'Vulkan.Core11.Promoted_From_VK_KHR_multiview.PhysicalDeviceMultiviewFeatures',
--     'Vulkan.Extensions.VK_QCOM_multiview_per_view_render_areas.PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM',
--     'Vulkan.Extensions.VK_QCOM_multiview_per_view_viewports.PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM',
--     'Vulkan.Extensions.VK_EXT_mutable_descriptor_type.PhysicalDeviceMutableDescriptorTypeFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_nested_command_buffer.PhysicalDeviceNestedCommandBufferFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_non_seamless_cube_map.PhysicalDeviceNonSeamlessCubeMapFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_opacity_micromap.PhysicalDeviceOpacityMicromapFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_optical_flow.PhysicalDeviceOpticalFlowFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_pageable_device_local_memory.PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV>,
--     'Vulkan.Extensions.VK_NV_per_stage_descriptor_set.PhysicalDevicePerStageDescriptorSetFeaturesNV',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDevicePerformanceCountersByRegionFeaturesARM VkPhysicalDevicePerformanceCountersByRegionFeaturesARM>,
--     'Vulkan.Extensions.VK_KHR_performance_query.PhysicalDevicePerformanceQueryFeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_pipeline_binary.PhysicalDevicePipelineBinaryFeaturesKHR',
--     'Vulkan.Extensions.VK_SEC_pipeline_cache_incremental_mode.PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC',
--     'Vulkan.Core13.Promoted_From_VK_EXT_pipeline_creation_cache_control.PhysicalDevicePipelineCreationCacheControlFeatures',
--     'Vulkan.Extensions.VK_KHR_pipeline_executable_properties.PhysicalDevicePipelineExecutablePropertiesFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_pipeline_library_group_handles.PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT',
--     'Vulkan.Extensions.VK_ARM_pipeline_opacity_micromap.PhysicalDevicePipelineOpacityMicromapFeaturesARM',
--     'Vulkan.Extensions.VK_EXT_pipeline_properties.PhysicalDevicePipelinePropertiesFeaturesEXT',
--     'Vulkan.Core14.Promoted_From_VK_EXT_pipeline_protected_accessAdditionalFunctionality'.PhysicalDevicePipelineProtectedAccessFeatures',
--     'Vulkan.Core14.Promoted_From_VK_EXT_pipeline_robustnessAdditionalFunctionality'.PhysicalDevicePipelineRobustnessFeatures',
--     'Vulkan.Extensions.VK_KHR_portability_subset.PhysicalDevicePortabilitySubsetFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_present_barrier.PhysicalDevicePresentBarrierFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_present_id2.PhysicalDevicePresentId2FeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_present_id.PhysicalDevicePresentIdFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_present_metering.PhysicalDevicePresentMeteringFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_present_mode_fifo_latest_ready.PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_present_timing.PhysicalDevicePresentTimingFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_present_wait2.PhysicalDevicePresentWait2FeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_present_wait.PhysicalDevicePresentWaitFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_primitive_topology_list_restart.PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_primitives_generated_query.PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT',
--     'Vulkan.Core13.Promoted_From_VK_EXT_private_data.PhysicalDevicePrivateDataFeatures',
--     'Vulkan.Core11.Originally_Based_On_VK_KHR_protected_memory.PhysicalDeviceProtectedMemoryFeatures',
--     'Vulkan.Extensions.VK_EXT_provoking_vertex.PhysicalDeviceProvokingVertexFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_push_constant_bank.PhysicalDevicePushConstantBankFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_rgba10x6_formats.PhysicalDeviceRGBA10X6FormatsFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_rasterization_order_attachment_access.PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_raw_access_chains.PhysicalDeviceRawAccessChainsFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_ray_query.PhysicalDeviceRayQueryFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_ray_tracing_invocation_reorder.PhysicalDeviceRayTracingInvocationReorderFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_ray_tracing_invocation_reorder.PhysicalDeviceRayTracingInvocationReorderFeaturesNV',
--     'Vulkan.Extensions.VK_NV_ray_tracing_linear_swept_spheres.PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_ray_tracing_maintenance1.PhysicalDeviceRayTracingMaintenance1FeaturesKHR',
--     'Vulkan.Extensions.VK_NV_ray_tracing_motion_blur.PhysicalDeviceRayTracingMotionBlurFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_ray_tracing_pipeline.PhysicalDeviceRayTracingPipelineFeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_ray_tracing_position_fetch.PhysicalDeviceRayTracingPositionFetchFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_ray_tracing_validation.PhysicalDeviceRayTracingValidationFeaturesNV',
--     'Vulkan.Extensions.VK_IMG_relaxed_line_rasterization.PhysicalDeviceRelaxedLineRasterizationFeaturesIMG',
--     'Vulkan.Extensions.VK_ARM_render_pass_striped.PhysicalDeviceRenderPassStripedFeaturesARM',
--     'Vulkan.Extensions.VK_NV_representative_fragment_test.PhysicalDeviceRepresentativeFragmentTestFeaturesNV',
--     'Vulkan.Extensions.VK_KHR_robustness2.PhysicalDeviceRobustness2FeaturesKHR',
--     'Vulkan.Core11.Promoted_From_VK_KHR_sampler_ycbcr_conversion.PhysicalDeviceSamplerYcbcrConversionFeatures',
--     'Vulkan.Core12.Promoted_From_VK_EXT_scalar_block_layout.PhysicalDeviceScalarBlockLayoutFeatures',
--     'Vulkan.Extensions.VK_ARM_scheduling_controls.PhysicalDeviceSchedulingControlsFeaturesARM',
--     'Vulkan.Core12.Promoted_From_VK_KHR_separate_depth_stencil_layouts.PhysicalDeviceSeparateDepthStencilLayoutsFeatures',
--     'Vulkan.Extensions.VK_EXT_shader_64bit_indexing.PhysicalDeviceShader64BitIndexingFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_shader_atomic_float16_vector.PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV',
--     'Vulkan.Extensions.VK_EXT_shader_atomic_float2.PhysicalDeviceShaderAtomicFloat2FeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_shader_atomic_float.PhysicalDeviceShaderAtomicFloatFeaturesEXT',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_atomic_int64.PhysicalDeviceShaderAtomicInt64Features',
--     'Vulkan.Extensions.VK_KHR_shader_bfloat16.PhysicalDeviceShaderBfloat16FeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_shader_clock.PhysicalDeviceShaderClockFeaturesKHR',
--     'Vulkan.Extensions.VK_ARM_shader_core_builtins.PhysicalDeviceShaderCoreBuiltinsFeaturesARM',
--     'Vulkan.Core13.Promoted_From_VK_EXT_shader_demote_to_helper_invocation.PhysicalDeviceShaderDemoteToHelperInvocationFeatures',
--     'Vulkan.Core11.Promoted_From_VK_KHR_shader_draw_parameters.PhysicalDeviceShaderDrawParametersFeatures',
--     'Vulkan.Extensions.VK_AMD_shader_early_and_late_fragment_tests.PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD',
--     'Vulkan.Extensions.VK_AMDX_shader_enqueue.PhysicalDeviceShaderEnqueueFeaturesAMDX',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_expect_assumeRoadmap.PhysicalDeviceShaderExpectAssumeFeatures',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_float16_int8.PhysicalDeviceShaderFloat16Int8Features',
--     'Vulkan.Extensions.VK_EXT_shader_float8.PhysicalDeviceShaderFloat8FeaturesEXT',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_float_controls2Roadmap.PhysicalDeviceShaderFloatControls2Features',
--     'Vulkan.Extensions.VK_KHR_shader_fma.PhysicalDeviceShaderFmaFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_shader_image_atomic_int64.PhysicalDeviceShaderImageAtomicInt64FeaturesEXT',
--     'Vulkan.Extensions.VK_NV_shader_image_footprint.PhysicalDeviceShaderImageFootprintFeaturesNV',
--     'Vulkan.Core13.Promoted_From_VK_KHR_shader_integer_dot_product.PhysicalDeviceShaderIntegerDotProductFeatures',
--     'Vulkan.Extensions.VK_INTEL_shader_integer_functions2.PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL',
--     'Vulkan.Extensions.VK_EXT_shader_long_vector.PhysicalDeviceShaderLongVectorFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_shader_maximal_reconvergence.PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_shader_module_identifier.PhysicalDeviceShaderModuleIdentifierFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_shader_object.PhysicalDeviceShaderObjectFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_shader_quad_control.PhysicalDeviceShaderQuadControlFeaturesKHR',
--     'Vulkan.Extensions.VK_KHR_shader_relaxed_extended_instruction.PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_shader_replicated_composites.PhysicalDeviceShaderReplicatedCompositesFeaturesEXT',
--     'Vulkan.Extensions.VK_NV_shader_sm_builtins.PhysicalDeviceShaderSMBuiltinsFeaturesNV',
--     'Vulkan.Core12.Promoted_From_VK_KHR_shader_subgroup_extended_types.PhysicalDeviceShaderSubgroupExtendedTypesFeatures',
--     'Vulkan.Extensions.VK_EXT_shader_subgroup_partitioned.PhysicalDeviceShaderSubgroupPartitionedFeaturesEXT',
--     'Vulkan.Core14.Promoted_From_VK_KHR_shader_subgroup_rotateRoadmap.PhysicalDeviceShaderSubgroupRotateFeatures',
--     'Vulkan.Extensions.VK_KHR_shader_subgroup_uniform_control_flow.PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR',
--     'Vulkan.Core13.Promoted_From_VK_KHR_shader_terminate_invocation.PhysicalDeviceShaderTerminateInvocationFeatures',
--     'Vulkan.Extensions.VK_EXT_shader_tile_image.PhysicalDeviceShaderTileImageFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_shader_uniform_buffer_unsized_array.PhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_shader_untyped_pointers.PhysicalDeviceShaderUntypedPointersFeaturesKHR',
--     'Vulkan.Extensions.VK_NV_shading_rate_image.PhysicalDeviceShadingRateImageFeaturesNV',
--     'Vulkan.Core13.Promoted_From_VK_EXT_subgroup_size_control.PhysicalDeviceSubgroupSizeControlFeatures',
--     'Vulkan.Extensions.VK_EXT_subpass_merge_feedback.PhysicalDeviceSubpassMergeFeedbackFeaturesEXT',
--     'Vulkan.Extensions.VK_HUAWEI_subpass_shading.PhysicalDeviceSubpassShadingFeaturesHUAWEI',
--     'Vulkan.Extensions.VK_KHR_swapchain_maintenance1.PhysicalDeviceSwapchainMaintenance1FeaturesKHR',
--     'Vulkan.Core13.Promoted_From_VK_KHR_synchronization2.PhysicalDeviceSynchronization2Features',
--     'Vulkan.Extensions.VK_ARM_tensors.PhysicalDeviceTensorFeaturesARM',
--     'Vulkan.Extensions.VK_EXT_texel_buffer_alignment.PhysicalDeviceTexelBufferAlignmentFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_texture_compression_astc_3d.PhysicalDeviceTextureCompressionASTC3DFeaturesEXT',
--     'Vulkan.Core13.Promoted_From_VK_EXT_texture_compression_astc_hdr.PhysicalDeviceTextureCompressionASTCHDRFeatures',
--     'Vulkan.Extensions.VK_QCOM_tile_memory_heap.PhysicalDeviceTileMemoryHeapFeaturesQCOM',
--     'Vulkan.Extensions.VK_QCOM_tile_properties.PhysicalDeviceTilePropertiesFeaturesQCOM',
--     'Vulkan.Extensions.VK_QCOM_tile_shading.PhysicalDeviceTileShadingFeaturesQCOM',
--     'Vulkan.Core12.Promoted_From_VK_KHR_timeline_semaphore.PhysicalDeviceTimelineSemaphoreFeatures',
--     'Vulkan.Extensions.VK_EXT_transform_feedback.PhysicalDeviceTransformFeedbackFeaturesEXT',
--     'Vulkan.Extensions.VK_KHR_unified_image_layouts.PhysicalDeviceUnifiedImageLayoutsFeaturesKHR',
--     'Vulkan.Core12.Promoted_From_VK_KHR_uniform_buffer_standard_layout.PhysicalDeviceUniformBufferStandardLayoutFeatures',
--     'Vulkan.Core11.Promoted_From_VK_KHR_variable_pointers.PhysicalDeviceVariablePointersFeatures',
--     'Vulkan.Core14.Promoted_From_VK_KHR_vertex_attribute_divisorRoadmap.PhysicalDeviceVertexAttributeDivisorFeatures',
--     'Vulkan.Extensions.VK_EXT_vertex_attribute_robustness.PhysicalDeviceVertexAttributeRobustnessFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_vertex_input_dynamic_state.PhysicalDeviceVertexInputDynamicStateFeaturesEXT',
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoDecodeVP9FeaturesKHR VkPhysicalDeviceVideoDecodeVP9FeaturesKHR>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoEncodeAV1FeaturesKHR VkPhysicalDeviceVideoEncodeAV1FeaturesKHR>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR VkPhysicalDeviceVideoEncodeIntraRefreshFeaturesKHR>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE VkPhysicalDeviceVideoEncodeRgbConversionFeaturesVALVE>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoMaintenance1FeaturesKHR VkPhysicalDeviceVideoMaintenance1FeaturesKHR>,
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceVideoMaintenance2FeaturesKHR VkPhysicalDeviceVideoMaintenance2FeaturesKHR>,
--     'Vulkan.Core12.PhysicalDeviceVulkan11Features',
--     'Vulkan.Core12.PhysicalDeviceVulkan12Features',
--     'Vulkan.Core13.PhysicalDeviceVulkan13Features',
--     'Vulkan.Core14.PhysicalDeviceVulkan14Features',
--     'Vulkan.Core12.Promoted_From_VK_KHR_vulkan_memory_model.PhysicalDeviceVulkanMemoryModelFeatures',
--     'Vulkan.Extensions.VK_KHR_workgroup_memory_explicit_layout.PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR',
--     'Vulkan.Extensions.VK_EXT_ycbcr_2plane_444_formats.PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT',
--     'Vulkan.Extensions.VK_QCOM_ycbcr_degamma.PhysicalDeviceYcbcrDegammaFeaturesQCOM',
--     'Vulkan.Extensions.VK_EXT_ycbcr_image_arrays.PhysicalDeviceYcbcrImageArraysFeaturesEXT',
--     'Vulkan.Extensions.VK_EXT_zero_initialize_device_memory.PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT',
--     or
--     'Vulkan.Core13.Promoted_From_VK_KHR_zero_initialize_workgroup_memory.PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures'
--
-- -   #VUID-VkDeviceCreateInfo-sType-unique# The @sType@ value of each
--     structure in the @pNext@ chain /must/ be unique, with the exception
--     of structures of type
--     'Vulkan.Extensions.VK_EXT_device_memory_report.DeviceDeviceMemoryReportCreateInfoEXT'
--     or
--     'Vulkan.Core13.Promoted_From_VK_EXT_private_data.DevicePrivateDataCreateInfo'
--
-- -   #VUID-VkDeviceCreateInfo-flags-zerobitmask# @flags@ /must/ be @0@
--
-- -   #VUID-VkDeviceCreateInfo-pQueueCreateInfos-parameter# If
--     @queueCreateInfoCount@ is not @0@, @pQueueCreateInfos@ /must/ be a
--     valid pointer to an array of @queueCreateInfoCount@ valid
--     'DeviceQueueCreateInfo' structures
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledLayerNames-parameter# If
--     @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a
--     valid pointer to an array of @enabledLayerCount@ null-terminated
--     UTF-8 strings
--
-- -   #VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-parameter# If
--     @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@ /must/
--     be a valid pointer to an array of @enabledExtensionCount@
--     null-terminated UTF-8 strings
--
-- -   #VUID-VkDeviceCreateInfo-pEnabledFeatures-parameter# If
--     @pEnabledFeatures@ is not @NULL@, @pEnabledFeatures@ /must/ be a
--     valid pointer to a valid
--     'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures'
--     structure
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_0 VK_VERSION_1_0>,
-- 'Vulkan.Core10.Enums.DeviceCreateFlags.DeviceCreateFlags',
-- 'DeviceQueueCreateInfo',
-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures',
-- 'Vulkan.Core10.Enums.StructureType.StructureType', 'createDevice'
data DeviceCreateInfo (es :: [Type]) = DeviceCreateInfo
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    forall (es :: [*]). DeviceCreateInfo es -> Chain es
next :: Chain es
  , -- | @flags@ is reserved for future use.
    forall (es :: [*]). DeviceCreateInfo es -> DeviceCreateFlags
flags :: DeviceCreateFlags
  , -- | @pQueueCreateInfos@ is a pointer to an array of 'DeviceQueueCreateInfo'
    -- structures describing the queues that are requested to be created along
    -- with the logical device. Refer to the
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#devsandqueues-queue-creation Queue Creation>
    -- section below for further details.
    forall (es :: [*]).
DeviceCreateInfo es -> Vector (SomeStruct DeviceQueueCreateInfo)
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
  , -- | @ppEnabledLayerNames@ is legacy and ignored. See
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#legacy-devicelayers>.
    forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledLayerNames :: Vector ByteString
  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
    -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
    -- names of extensions to enable for the created device. See the
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#extendingvulkan-extensions>
    -- section for further details.
    forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledExtensionNames :: Vector ByteString
  , -- | @pEnabledFeatures@ is @NULL@ or a pointer to a
    -- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceFeatures' structure
    -- containing boolean indicators of all the features to be enabled. Refer
    -- to the
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#features Features>
    -- section for further details. This field is legacy. See
    -- <https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#legacy-gpdp2>.
    forall (es :: [*]).
DeviceCreateInfo es -> Maybe PhysicalDeviceFeatures
enabledFeatures :: Maybe PhysicalDeviceFeatures
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceCreateInfo (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (DeviceCreateInfo es)

instance Extensible DeviceCreateInfo where
  extensibleTypeName :: String
extensibleTypeName = String
"DeviceCreateInfo"
  setNext :: forall (ds :: [*]) (es :: [*]).
DeviceCreateInfo ds -> Chain es -> DeviceCreateInfo es
setNext DeviceCreateInfo{Maybe PhysicalDeviceFeatures
Vector ByteString
Vector (SomeStruct DeviceQueueCreateInfo)
DeviceCreateFlags
Chain ds
next :: forall (es :: [*]). DeviceCreateInfo es -> Chain es
flags :: forall (es :: [*]). DeviceCreateInfo es -> DeviceCreateFlags
queueCreateInfos :: forall (es :: [*]).
DeviceCreateInfo es -> Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledExtensionNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledFeatures :: forall (es :: [*]).
DeviceCreateInfo es -> Maybe PhysicalDeviceFeatures
next :: Chain ds
flags :: DeviceCreateFlags
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: Vector ByteString
enabledExtensionNames :: Vector ByteString
enabledFeatures :: Maybe PhysicalDeviceFeatures
..} Chain es
next' = DeviceCreateInfo{next :: Chain es
next = Chain es
next', Maybe PhysicalDeviceFeatures
Vector ByteString
Vector (SomeStruct DeviceQueueCreateInfo)
DeviceCreateFlags
flags :: DeviceCreateFlags
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: Vector ByteString
enabledExtensionNames :: Vector ByteString
enabledFeatures :: Maybe PhysicalDeviceFeatures
flags :: DeviceCreateFlags
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: Vector ByteString
enabledExtensionNames :: Vector ByteString
enabledFeatures :: Maybe PhysicalDeviceFeatures
..}
  getNext :: forall (es :: [*]). DeviceCreateInfo es -> Chain es
getNext DeviceCreateInfo{Maybe PhysicalDeviceFeatures
Vector ByteString
Vector (SomeStruct DeviceQueueCreateInfo)
DeviceCreateFlags
Chain es
next :: forall (es :: [*]). DeviceCreateInfo es -> Chain es
flags :: forall (es :: [*]). DeviceCreateInfo es -> DeviceCreateFlags
queueCreateInfos :: forall (es :: [*]).
DeviceCreateInfo es -> Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledExtensionNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledFeatures :: forall (es :: [*]).
DeviceCreateInfo es -> Maybe PhysicalDeviceFeatures
next :: Chain es
flags :: DeviceCreateFlags
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: Vector ByteString
enabledExtensionNames :: Vector ByteString
enabledFeatures :: Maybe PhysicalDeviceFeatures
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
  extends :: forall e b (proxy :: * -> *).
Typeable e =>
proxy e -> (Extends DeviceCreateInfo e => b) -> Maybe b
extends proxy e
_ Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorHeapFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorHeapFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderSubgroupPartitionedFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderSubgroupPartitionedFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTextureCompressionASTC3DFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTextureCompressionASTC3DFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderLongVectorFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderLongVectorFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceComputeOccupancyPriorityFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceComputeOccupancyPriorityFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShader64BitIndexingFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShader64BitIndexingFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderUntypedPointersFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderUntypedPointersFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDataGraphModelFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDataGraphModelFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineCacheIncrementalModeFeaturesSEC = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDataGraphFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDataGraphFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderFloat8FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderFloat8FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorBufferTensorFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorBufferTensorFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTensorFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTensorFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFormatPackFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFormatPackFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderUniformBufferUnsizedArrayFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: ExternalComputeQueueDeviceCreateInfoNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @ExternalComputeQueueDeviceCreateInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentMeteringFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentMeteringFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentDensityMapLayeredFeaturesVALVE = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTileShadingFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTileShadingFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCooperativeVectorFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCooperativeVectorFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDepthClampZeroOneFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDepthClampZeroOneFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDenseGeometryFormatFeaturesAMDX
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDenseGeometryFormatFeaturesAMDX = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVertexAttributeRobustnessFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVertexAttributeRobustnessFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceHdrVividFeaturesHUAWEI
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceHdrVividFeaturesHUAWEI = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCooperativeMatrix2FeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCooperativeMatrix2FeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentModeFifoLatestReadyFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderReplicatedCompositesFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderReplicatedCompositesFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageAlignmentControlFeaturesMESA
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageAlignmentControlFeaturesMESA = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCommandBufferInheritanceFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCommandBufferInheritanceFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRawAccessChainsFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRawAccessChainsFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderBfloat16FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderBfloat16FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMapMemoryPlacedFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMapMemoryPlacedFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderAtomicFloat16VectorFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderQuadControlFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderQuadControlFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDynamicRenderingLocalReadFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDynamicRenderingLocalReadFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderFloatControls2Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderFloatControls2Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderExpectAssumeFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderExpectAssumeFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderSubgroupRotateFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderSubgroupRotateFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderMaximalReconvergenceFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineOpacityMicromapFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineOpacityMicromapFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRenderPassStripedFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRenderPassStripedFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRelaxedLineRasterizationFeaturesIMG
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRelaxedLineRasterizationFeaturesIMG = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSchedulingControlsFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSchedulingControlsFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DeviceQueueShaderCoreControlCreateInfoARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceQueueShaderCoreControlCreateInfoARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCudaKernelLaunchFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCudaKernelLaunchFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExternalFormatResolveFeaturesANDROID
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExternalFormatResolveFeaturesANDROID = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePerStageDescriptorSetFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePerStageDescriptorSetFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorPoolOverallocationFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorPoolOverallocationFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageProcessing2FeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageProcessing2FeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCubicWeightsFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCubicWeightsFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceYcbcrDegammaFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceYcbcrDegammaFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCubicClampFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCubicClampFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTileMemoryHeapFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTileMemoryHeapFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAntiLagFeaturesAMD
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAntiLagFeaturesAMD = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderEnqueueFeaturesAMDX
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderEnqueueFeaturesAMDX = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCooperativeMatrixConversionFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCooperativeMatrixConversionFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCooperativeMatrixFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCooperativeMatrixFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExternalMemoryScreenBufferFeaturesQNX = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderTileImageFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderTileImageFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderObjectFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderObjectFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMultiviewPerViewRenderAreasFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingPositionFetchFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingPositionFetchFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExtendedSparseAddressSpaceFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingInvocationReorderFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingInvocationReorderFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingInvocationReorderFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingInvocationReorderFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDepthBiasControlFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDepthBiasControlFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSwapchainMaintenance1FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSwapchainMaintenance1FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceInternallySynchronizedQueuesFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceInternallySynchronizedQueuesFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDynamicRenderingUnusedAttachmentsFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFrameBoundaryFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFrameBoundaryFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderCoreBuiltinsFeaturesARM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderCoreBuiltinsFeaturesARM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineLibraryGroupHandlesFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFaultFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFaultFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceOpticalFlowFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceOpticalFlowFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAddressBindingReportFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAddressBindingReportFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAttachmentFeedbackLoopLayoutFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAmigoProfilingFeaturesSEC
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAmigoProfilingFeaturesSEC = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTilePropertiesFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTilePropertiesFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageProcessingFeaturesQCOM
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageProcessingFeaturesQCOM = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineRobustnessFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineRobustnessFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceNonSeamlessCubeMapFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceNonSeamlessCubeMapFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderEarlyAndLateFragmentTestsFeaturesAMD = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelinePropertiesFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelinePropertiesFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDisplacementMicromapFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDisplacementMicromapFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceOpacityMicromapFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceOpacityMicromapFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSubpassMergeFeedbackFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSubpassMergeFeedbackFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageCompressionControlSwapchainFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageCompressionControlFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageCompressionControlFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderModuleIdentifierFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderModuleIdentifierFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceNestedCommandBufferFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceNestedCommandBufferFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorSetHostMappingFeaturesVALVE = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DevicePipelineBinaryInternalCacheControlKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DevicePipelineBinaryInternalCacheControlKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineBinaryFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineBinaryFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceGraphicsPipelineLibraryFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceLinearColorAttachmentFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceLinearColorAttachmentFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageViewMinLodFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageViewMinLodFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDynamicRenderingFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDynamicRenderingFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRGBA10X6FormatsFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRGBA10X6FormatsFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingValidationFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingValidationFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingMotionBlurFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingMotionBlurFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderFmaFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderFmaFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentShaderBarycentricFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentShaderBarycentricFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderIntegerDotProductFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderIntegerDotProductFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorBufferFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorBufferFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceProvokingVertexFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceProvokingVertexFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceInheritedViewportScissorFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceInheritedViewportScissorFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineProtectedAccessFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineProtectedAccessFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMultisampledRenderToSingleSampledFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceLegacyDitheringFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceLegacyDitheringFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePrimitivesGeneratedQueryFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceHostImageCopyFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceHostImageCopyFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceUnifiedImageLayoutsFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceUnifiedImageLayoutsFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSynchronization2Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSynchronization2Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceColorWriteEnableFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceColorWriteEnableFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderRelaxedExtendedInstructionFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExternalMemoryRDMAFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExternalMemoryRDMAFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVertexInputDynamicStateFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVertexInputDynamicStateFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDepthClampControlFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDepthClampControlFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCustomResolveFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCustomResolveFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDepthClipControlFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDepthClipControlFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMutableDescriptorTypeFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMutableDescriptorTypeFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceLegacyVertexAttributesFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceLegacyVertexAttributesFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAttachmentFeedbackLoopDynamicStateFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageSlicedViewOf3DFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageSlicedViewOf3DFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImage2DViewOf3DFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImage2DViewOf3DFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentShadingRateEnumsFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderTerminateInvocationFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderTerminateInvocationFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentShadingRateFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentShadingRateFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderImageAtomicInt64FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderImageAtomicInt64FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceClusterCullingShaderFeaturesHUAWEI '[]
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @(PhysicalDeviceClusterCullingShaderFeaturesHUAWEI '[]) = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSubpassShadingFeaturesHUAWEI
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSubpassShadingFeaturesHUAWEI = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevice4444FormatsFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevice4444FormatsFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePortabilitySubsetFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePortabilitySubsetFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImageRobustnessFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImageRobustnessFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRobustness2FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRobustness2FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DeviceDiagnosticsConfigCreateInfoNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceDiagnosticsConfigCreateInfoNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDiagnosticsConfigFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDiagnosticsConfigFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExtendedDynamicState3FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExtendedDynamicState3FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExtendedDynamicState2FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExtendedDynamicState2FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExtendedDynamicStateFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExtendedDynamicStateFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceBorderColorSwizzleFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceBorderColorSwizzleFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCustomBorderColorFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCustomBorderColorFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCoherentMemoryFeaturesAMD
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCoherentMemoryFeaturesAMD = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVulkan14Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVulkan14Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVulkan13Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVulkan13Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVulkan12Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVulkan12Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVulkan11Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVulkan11Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineCreationCacheControlFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineCreationCacheControlFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceLineRasterizationFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceLineRasterizationFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSubgroupSizeControlFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSubgroupSizeControlFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTexelBufferAlignmentFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTexelBufferAlignmentFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderDemoteToHelperInvocationFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderDemoteToHelperInvocationFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePipelineExecutablePropertiesFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSeparateDepthStencilLayoutsFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSeparateDepthStencilLayoutsFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentShaderInterlockFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentShaderInterlockFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderSMBuiltinsFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderSMBuiltinsFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceIndexTypeUint8Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceIndexTypeUint8Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderClockFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderClockFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCoverageReductionModeFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCoverageReductionModeFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePerformanceQueryFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePerformanceQueryFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentBarrierFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentBarrierFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceYcbcrImageArraysFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceYcbcrImageArraysFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCooperativeMatrixFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCooperativeMatrixFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTextureCompressionASTCHDRFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTextureCompressionASTCHDRFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceImagelessFramebufferFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceImagelessFramebufferFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceBufferDeviceAddressFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceBufferDeviceAddressFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceBufferDeviceAddressFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceBufferDeviceAddressFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMemoryPriorityFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMemoryPriorityFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDepthClipEnableFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDepthClipEnableFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceUniformBufferStandardLayoutFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceUniformBufferStandardLayoutFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceScalarBlockLayoutFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceScalarBlockLayoutFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentDensityMapOffsetFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentDensityMap2FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentDensityMap2FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFragmentDensityMapFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceFragmentDensityMapFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DeviceMemoryOverallocationCreateInfoAMD
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceMemoryOverallocationCreateInfoAMD = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingMaintenance1FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingMaintenance1FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayQueryFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayQueryFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRayTracingPipelineFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRayTracingPipelineFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceAccelerationStructureFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceAccelerationStructureFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMeshShaderFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMeshShaderFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMeshShaderFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMeshShaderFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceInvocationMaskFeaturesHUAWEI
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceInvocationMaskFeaturesHUAWEI = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShadingRateImageFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShadingRateImageFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMemoryDecompressionFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMemoryDecompressionFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCopyMemoryIndirectFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCopyMemoryIndirectFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCopyMemoryIndirectFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCopyMemoryIndirectFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderImageFootprintFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderImageFootprintFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceComputeShaderDerivativesFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceComputeShaderDerivativesFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceCornerSampledImageFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceCornerSampledImageFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceExclusiveScissorFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceExclusiveScissorFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceRepresentativeFragmentTestFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceRepresentativeFragmentTestFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTransformFeedbackFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTransformFeedbackFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceASTCDecodeFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceASTCDecodeFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVertexAttributeDivisorFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVertexAttributeDivisorFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderAtomicFloat2FeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderAtomicFloat2FeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderAtomicFloatFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderAtomicFloatFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderAtomicInt64Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderAtomicInt64Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVulkanMemoryModelFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVulkanMemoryModelFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceConditionalRenderingFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceConditionalRenderingFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevice8BitStorageFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevice8BitStorageFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceTimelineSemaphoreFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceTimelineSemaphoreFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDescriptorIndexingFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDescriptorIndexingFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DeviceDeviceMemoryReportCreateInfoEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceDeviceMemoryReportCreateInfoEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDeviceMemoryReportFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDeviceMemoryReportFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceGlobalPriorityQueryFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceGlobalPriorityQueryFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceHostQueryResetFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceHostQueryResetFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderFloat16Int8Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderFloat16Int8Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderDrawParametersFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderDrawParametersFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance10FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance10FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance9FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance9FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance8FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance8FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance7FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance7FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance6Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance6Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance5Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance5Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMaintenance4Features
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMaintenance4Features = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceInlineUniformBlockFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceInlineUniformBlockFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMultiDrawFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMultiDrawFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceBlendOperationAdvancedFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceBlendOperationAdvancedFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceProtectedMemoryFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceProtectedMemoryFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceSamplerYcbcrConversionFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceSamplerYcbcrConversionFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceShaderSubgroupExtendedTypesFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceShaderSubgroupExtendedTypesFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevice16BitStorageFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevice16BitStorageFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentTimingFeaturesEXT
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentTimingFeaturesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentWait2FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentWait2FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentWaitFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentWaitFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentId2FeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentId2FeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePresentIdFeaturesKHR
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePresentIdFeaturesKHR = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DeviceGroupDeviceCreateInfo
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DeviceGroupDeviceCreateInfo = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceMultiviewFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceMultiviewFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceVariablePointersFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceVariablePointersFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceFeatures2 '[]
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @(PhysicalDeviceFeatures2 '[]) = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePrivateDataFeatures
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePrivateDataFeatures = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: DevicePrivateDataCreateInfo
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @DevicePrivateDataCreateInfo = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDevicePushConstantBankFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDevicePushConstantBankFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Just e :~: PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
Refl <- forall {k} (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
forall a b. (Typeable a, Typeable b) => Maybe (a :~: b)
eqT @e @PhysicalDeviceDeviceGeneratedCommandsFeaturesNV = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends DeviceCreateInfo e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance ( Extendss DeviceCreateInfo es
         , PokeChain es ) => ToCStruct (DeviceCreateInfo es) where
  withCStruct :: forall b.
DeviceCreateInfo es -> (Ptr (DeviceCreateInfo es) -> IO b) -> IO b
withCStruct DeviceCreateInfo es
x Ptr (DeviceCreateInfo es) -> IO b
f = Int -> (Ptr (DeviceCreateInfo es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
72 ((Ptr (DeviceCreateInfo es) -> IO b) -> IO b)
-> (Ptr (DeviceCreateInfo es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (DeviceCreateInfo es)
p -> Ptr (DeviceCreateInfo es) -> DeviceCreateInfo es -> IO b -> IO b
forall b.
Ptr (DeviceCreateInfo es) -> DeviceCreateInfo es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (DeviceCreateInfo es)
p DeviceCreateInfo es
x (Ptr (DeviceCreateInfo es) -> IO b
f Ptr (DeviceCreateInfo es)
p)
  pokeCStruct :: forall b.
Ptr (DeviceCreateInfo es) -> DeviceCreateInfo es -> IO b -> IO b
pokeCStruct Ptr (DeviceCreateInfo es)
p DeviceCreateInfo{Maybe PhysicalDeviceFeatures
Vector ByteString
Vector (SomeStruct DeviceQueueCreateInfo)
DeviceCreateFlags
Chain es
next :: forall (es :: [*]). DeviceCreateInfo es -> Chain es
flags :: forall (es :: [*]). DeviceCreateInfo es -> DeviceCreateFlags
queueCreateInfos :: forall (es :: [*]).
DeviceCreateInfo es -> Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledExtensionNames :: forall (es :: [*]). DeviceCreateInfo es -> Vector ByteString
enabledFeatures :: forall (es :: [*]).
DeviceCreateInfo es -> Maybe PhysicalDeviceFeatures
next :: Chain es
flags :: DeviceCreateFlags
queueCreateInfos :: Vector (SomeStruct DeviceQueueCreateInfo)
enabledLayerNames :: Vector ByteString
enabledExtensionNames :: Vector ByteString
enabledFeatures :: Maybe PhysicalDeviceFeatures
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DeviceCreateInfo es)
p Ptr (DeviceCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_CREATE_INFO)
    pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
forall a. Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext''
    lift $ poke ((p `plusPtr` 16 :: Ptr DeviceCreateFlags)) (flags)
    lift $ poke ((p `plusPtr` 20 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (queueCreateInfos)) :: Word32))
    pPQueueCreateInfos' <- ContT $ allocaBytes @(DeviceQueueCreateInfo _) ((Data.Vector.length (queueCreateInfos)) * 40)
    Data.Vector.imapM_ (\Int
i SomeStruct DeviceQueueCreateInfo
e -> ((() -> IO b) -> IO b) -> ContT b IO ()
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((() -> IO b) -> IO b) -> ContT b IO ())
-> ((() -> IO b) -> IO b) -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (SomeStruct DeviceQueueCreateInfo)
-> SomeStruct DeviceQueueCreateInfo -> IO b -> IO b
forall (a :: [*] -> *) b.
(forall (es :: [*]).
 (Extendss a es, PokeChain es) =>
 ToCStruct (a es)) =>
Ptr (SomeStruct a) -> SomeStruct a -> IO b -> IO b
pokeSomeCStruct (Ptr (DeviceQueueCreateInfo (ZonkAny 1))
-> Ptr (SomeStruct DeviceQueueCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (DeviceQueueCreateInfo (ZonkAny 0))
pPQueueCreateInfos' Ptr (DeviceQueueCreateInfo (ZonkAny 0))
-> Int -> Ptr (DeviceQueueCreateInfo w)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DeviceQueueCreateInfo _))) (SomeStruct DeviceQueueCreateInfo
e) (IO b -> IO b) -> ((() -> IO b) -> IO b) -> (() -> IO b) -> IO b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((() -> IO b) -> () -> IO b
forall a b. (a -> b) -> a -> b
$ ())) (queueCreateInfos)
    lift $ poke ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _)))) (pPQueueCreateInfos')
    lift $ poke ((p `plusPtr` 32 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledLayerNames)) :: Word32))
    pPpEnabledLayerNames' <- ContT $ allocaBytes @(Ptr CChar) ((Data.Vector.length (enabledLayerNames)) * 8)
    Data.Vector.imapM_ (\Int
i ByteString
e -> do
      ppEnabledLayerNames'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
e)
      lift $ poke (pPpEnabledLayerNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledLayerNames'') (enabledLayerNames)
    lift $ poke ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledLayerNames')
    lift $ poke ((p `plusPtr` 48 :: Ptr Word32)) ((fromIntegral (Data.Vector.length $ (enabledExtensionNames)) :: Word32))
    pPpEnabledExtensionNames' <- ContT $ allocaBytes @(Ptr CChar) ((Data.Vector.length (enabledExtensionNames)) * 8)
    Data.Vector.imapM_ (\Int
i ByteString
e -> do
      ppEnabledExtensionNames'' <- ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar))
-> ((Ptr CChar -> IO b) -> IO b) -> ContT b IO (Ptr CChar)
forall a b. (a -> b) -> a -> b
$ ByteString -> (Ptr CChar -> IO b) -> IO b
forall a. ByteString -> (Ptr CChar -> IO a) -> IO a
useAsCString (ByteString
e)
      lift $ poke (pPpEnabledExtensionNames' `plusPtr` (8 * (i)) :: Ptr (Ptr CChar)) ppEnabledExtensionNames'') (enabledExtensionNames)
    lift $ poke ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar)))) (pPpEnabledExtensionNames')
    pEnabledFeatures'' <- case (enabledFeatures) of
      Maybe PhysicalDeviceFeatures
Nothing -> Ptr PhysicalDeviceFeatures
-> ContT b IO (Ptr PhysicalDeviceFeatures)
forall a. a -> ContT b IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Ptr PhysicalDeviceFeatures
forall a. Ptr a
nullPtr
      Just PhysicalDeviceFeatures
j -> ((Ptr PhysicalDeviceFeatures -> IO b) -> IO b)
-> ContT b IO (Ptr PhysicalDeviceFeatures)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr PhysicalDeviceFeatures -> IO b) -> IO b)
 -> ContT b IO (Ptr PhysicalDeviceFeatures))
-> ((Ptr PhysicalDeviceFeatures -> IO b) -> IO b)
-> ContT b IO (Ptr PhysicalDeviceFeatures)
forall a b. (a -> b) -> a -> b
$ PhysicalDeviceFeatures
-> (Ptr PhysicalDeviceFeatures -> IO b) -> IO b
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
forall b.
PhysicalDeviceFeatures
-> (Ptr PhysicalDeviceFeatures -> IO b) -> IO b
withCStruct (PhysicalDeviceFeatures
j)
    lift $ poke ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures))) pEnabledFeatures''
    lift $ f
  cStructSize :: Int
cStructSize = Int
72
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr (DeviceCreateInfo es) -> IO b -> IO b
pokeZeroCStruct Ptr (DeviceCreateInfo es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT b m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (DeviceCreateInfo es)
p Ptr (DeviceCreateInfo es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_DEVICE_CREATE_INFO)
    pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> ContT b IO a -> ContT b IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    lift $ poke ((p `plusPtr` 8 :: Ptr (Ptr ()))) pNext'
    lift $ f

instance ( Extendss DeviceCreateInfo es
         , PeekChain es ) => FromCStruct (DeviceCreateInfo es) where
  peekCStruct :: Ptr (DeviceCreateInfo es) -> IO (DeviceCreateInfo es)
peekCStruct Ptr (DeviceCreateInfo es)
p = do
    pNext <- forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (DeviceCreateInfo es)
p Ptr (DeviceCreateInfo es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    next <- peekChain (castPtr pNext)
    flags <- peek @DeviceCreateFlags ((p `plusPtr` 16 :: Ptr DeviceCreateFlags))
    queueCreateInfoCount <- peek @Word32 ((p `plusPtr` 20 :: Ptr Word32))
    pQueueCreateInfos <- peek @(Ptr (DeviceQueueCreateInfo _)) ((p `plusPtr` 24 :: Ptr (Ptr (DeviceQueueCreateInfo _))))
    pQueueCreateInfos' <- generateM (fromIntegral queueCreateInfoCount) (\Int
i -> Ptr (SomeStruct DeviceQueueCreateInfo)
-> IO (SomeStruct DeviceQueueCreateInfo)
forall (a :: [*] -> *).
(Extensible a,
 forall (es :: [*]).
 (Extendss a es, PeekChain es) =>
 FromCStruct (a es)) =>
Ptr (SomeStruct a) -> IO (SomeStruct a)
peekSomeCStruct (Ptr (DeviceQueueCreateInfo (ZonkAny 2))
-> Ptr (SomeStruct DeviceQueueCreateInfo)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions ((Ptr (DeviceQueueCreateInfo (ZonkAny 2))
pQueueCreateInfos Ptr (DeviceQueueCreateInfo (ZonkAny 2))
-> Int -> Ptr (DeviceQueueCreateInfo (ZonkAny 2))
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (DeviceQueueCreateInfo _)))))
    enabledLayerCount <- peek @Word32 ((p `plusPtr` 32 :: Ptr Word32))
    ppEnabledLayerNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 40 :: Ptr (Ptr (Ptr CChar))))
    ppEnabledLayerNames' <- generateM (fromIntegral enabledLayerCount) (\Int
i -> Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek ((Ptr (Ptr CChar)
ppEnabledLayerNames Ptr (Ptr CChar) -> Int -> Ptr (Ptr CChar)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (Ptr CChar))))
    enabledExtensionCount <- peek @Word32 ((p `plusPtr` 48 :: Ptr Word32))
    ppEnabledExtensionNames <- peek @(Ptr (Ptr CChar)) ((p `plusPtr` 56 :: Ptr (Ptr (Ptr CChar))))
    ppEnabledExtensionNames' <- generateM (fromIntegral enabledExtensionCount) (\Int
i -> Ptr CChar -> IO ByteString
packCString (Ptr CChar -> IO ByteString) -> IO (Ptr CChar) -> IO ByteString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (Ptr CChar) -> IO (Ptr CChar)
forall a. Storable a => Ptr a -> IO a
peek ((Ptr (Ptr CChar)
ppEnabledExtensionNames Ptr (Ptr CChar) -> Int -> Ptr (Ptr CChar)
forall a. Ptr a -> Int -> Ptr a
`advancePtrBytes` (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr (Ptr CChar))))
    pEnabledFeatures <- peek @(Ptr PhysicalDeviceFeatures) ((p `plusPtr` 64 :: Ptr (Ptr PhysicalDeviceFeatures)))
    pEnabledFeatures' <- maybePeek (\Ptr PhysicalDeviceFeatures
j -> forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @PhysicalDeviceFeatures (Ptr PhysicalDeviceFeatures
j)) pEnabledFeatures
    pure $ DeviceCreateInfo
             next
             flags
             pQueueCreateInfos'
             ppEnabledLayerNames'
             ppEnabledExtensionNames'
             pEnabledFeatures'

instance es ~ '[] => Zero (DeviceCreateInfo es) where
  zero :: DeviceCreateInfo es
zero = Chain es
-> DeviceCreateFlags
-> Vector (SomeStruct DeviceQueueCreateInfo)
-> Vector ByteString
-> Vector ByteString
-> Maybe PhysicalDeviceFeatures
-> DeviceCreateInfo es
forall (es :: [*]).
Chain es
-> DeviceCreateFlags
-> Vector (SomeStruct DeviceQueueCreateInfo)
-> Vector ByteString
-> Vector ByteString
-> Maybe PhysicalDeviceFeatures
-> DeviceCreateInfo es
DeviceCreateInfo
           ()
           DeviceCreateFlags
forall a. Zero a => a
zero
           Vector (SomeStruct DeviceQueueCreateInfo)
forall a. Monoid a => a
mempty
           Vector ByteString
forall a. Monoid a => a
mempty
           Vector ByteString
forall a. Monoid a => a
mempty
           Maybe PhysicalDeviceFeatures
forall a. Maybe a
Nothing