content: {-# LANGUAGE CPP #-}
  
  module OpenXR.VulkanTypes
    ( Instance_T
    , PhysicalDevice_T
    , Device_T
    , Image(..)
    , Result(..)
    , Format(..)
    , InstanceCreateInfo
    , DeviceCreateInfo
    , AllocationCallbacks
    , PFN_vkGetInstanceProcAddr
    , SomeStruct(..)
    ) where
  
  #if defined(USE_VULKAN_TYPES)
  
  import           Vulkan
  import           Vulkan.CStruct.Extends
  import           Foreign.C.String
  import           Foreign.Ptr
  
  type PFN_vkGetInstanceProcAddr = FunPtr (CString -> IO (FunPtr ()))
  
  #else
  
  import           Data.Kind
  import           Data.Word
  import           Foreign.C.String
  import           Foreign.Ptr
  import           Foreign.Storable
  import           OpenXR.Zero
  
  data Instance_T
  
  data PhysicalDevice_T
  
  data Device_T
  
  newtype Image = Image Word64
    deriving stock (Eq, Show)
    deriving newtype (Zero, Storable)
  
  newtype Result = Result Word32
    deriving stock (Eq, Show)
    deriving newtype (Zero, Storable)
  
  newtype Format = Format Word32
    deriving stock (Eq, Show)
    deriving newtype (Zero, Storable)
  
  data InstanceCreateInfo es
  data DeviceCreateInfo es
  
  data AllocationCallbacks
  
  type PFN_vkGetInstanceProcAddr = FunPtr (CString -> IO (FunPtr ()))
  
  data SomeStruct (a :: [Type] -> Type) where
    SomeStruct :: forall a es. a es -> SomeStruct a
  
  #endif
  