packages feed

gpu-vulkan-middle-0.1.0.54: src/Gpu/Vulkan/PhysicalDevice/Struct.hs

{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts, UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.PhysicalDevice.Struct where

import Foreign.Ptr
import Foreign.Marshal.Alloc
import Foreign.Storable
import Foreign.Storable.PeekPoke

import Data.Default
import System.IO.Unsafe

import Gpu.Vulkan.PhysicalDevice.Struct.Th
import qualified Gpu.Vulkan.PhysicalDevice.Core as C
import qualified Gpu.Vulkan.PhysicalDevice.Struct.Core as C

import Gpu.Vulkan.PhysicalDevice.Struct.ThTest

import Gpu.Vulkan.Enum
import Gpu.Vulkan.PNext.Middle.Internal

import Data.TypeLevel.Maybe qualified as TMaybe

vkPhysicalDeviceLimits
vkPhysicalDeviceFeatures

featuresZero :: Features
featuresZero = unsafePerformIO $ featuresFromCore <$> C.getClearedFeatures

instance Default Features where def = featuresZero

makeStructure "DescriptorIndexingFeatures"

instance Peek DescriptorIndexingFeaturesNoNext where
	peek' = (descriptorIndexingFeaturesFromCore <$>) . peek . castPtr

instance Typeable DescriptorIndexingFeaturesNoNext where
	structureType = StructureTypePhysicalDeviceDescriptorIndexingFeatures

instance Sizable DescriptorIndexingFeaturesNoNext where
	sizeOf' = sizeOf @C.DescriptorIndexingFeatures undefined
	alignment' = alignment @C.DescriptorIndexingFeatures undefined

instance WithPoked (TMaybe.M mn) => WithPoked (DescriptorIndexingFeatures mn) where
	withPoked' difs f = alloca \pcdifs -> do
		descriptorIndexingFeaturesToCore difs $ \cdifs -> poke pcdifs cdifs
		f . ptrS $ castPtr pcdifs

instance Nextable DescriptorIndexingFeatures where
	nextableSize = sizeOf @C.DescriptorIndexingFeatures undefined
	nextableType = StructureTypePhysicalDeviceDescriptorIndexingFeatures
	nextPtr p = C.descriptorIndexingFeaturesPNext <$> peek (castPtr p)
	createNextable p n =
		descriptorIndexingFeaturesFromNoNext n .
		descriptorIndexingFeaturesFromCore <$> peek (castPtr p)