{-# LINE 1 "src/Gpu/Vulkan/Descriptor/Middle/Internal.hsc" #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables, TypeApplications #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Descriptor.Middle.Internal (
	indexingExtensionName,
	ImageInfo(..), imageInfoToCore, BufferInfo(..), bufferInfoToCore ) where

import Control.Monad.Trans

import qualified Gpu.Vulkan.Device.Middle.Internal as Device
import qualified Gpu.Vulkan.Buffer.Middle.Internal as Buffer
import qualified Gpu.Vulkan.Image.Enum as Image
import qualified Gpu.Vulkan.ImageView.Middle.Internal as ImageView
import qualified Gpu.Vulkan.Sampler.Middle.Internal as Sampler
import qualified Gpu.Vulkan.Descriptor.Core as C

import Data.Text qualified as T



indexingExtensionName :: T.Text
indexingExtensionName :: Text
indexingExtensionName = Text
"VK_EXT_descriptor_indexing"
{-# LINE 27 "src/Gpu/Vulkan/Descriptor/Middle/Internal.hsc" #-}

data BufferInfo = BufferInfo {
	BufferInfo -> B
bufferInfoBuffer :: Buffer.B,
	BufferInfo -> Size
bufferInfoOffset :: Device.Size,
	BufferInfo -> Size
bufferInfoRange :: Device.Size }
	deriving Int -> BufferInfo -> ShowS
[BufferInfo] -> ShowS
BufferInfo -> String
(Int -> BufferInfo -> ShowS)
-> (BufferInfo -> String)
-> ([BufferInfo] -> ShowS)
-> Show BufferInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BufferInfo -> ShowS
showsPrec :: Int -> BufferInfo -> ShowS
$cshow :: BufferInfo -> String
show :: BufferInfo -> String
$cshowList :: [BufferInfo] -> ShowS
showList :: [BufferInfo] -> ShowS
Show

bufferInfoToCore :: BufferInfo -> C.BufferInfo
bufferInfoToCore :: BufferInfo -> BufferInfo
bufferInfoToCore BufferInfo {
	bufferInfoBuffer :: BufferInfo -> B
bufferInfoBuffer = Buffer.B B
b,
	bufferInfoOffset :: BufferInfo -> Size
bufferInfoOffset = Device.Size Word64
os,
	bufferInfoRange :: BufferInfo -> Size
bufferInfoRange = Device.Size Word64
rg } = C.BufferInfo {
	bufferInfoBuffer :: B
C.bufferInfoBuffer = B
b,
	bufferInfoOffset :: Word64
C.bufferInfoOffset = Word64
os,
	bufferInfoRange :: Word64
C.bufferInfoRange = Word64
rg }

data ImageInfo = ImageInfo {
	ImageInfo -> S
imageInfoSampler :: Sampler.S,
	ImageInfo -> I
imageInfoImageView :: ImageView.I,
	ImageInfo -> Layout
imageInfoImageLayout :: Image.Layout }
	deriving Int -> ImageInfo -> ShowS
[ImageInfo] -> ShowS
ImageInfo -> String
(Int -> ImageInfo -> ShowS)
-> (ImageInfo -> String)
-> ([ImageInfo] -> ShowS)
-> Show ImageInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ImageInfo -> ShowS
showsPrec :: Int -> ImageInfo -> ShowS
$cshow :: ImageInfo -> String
show :: ImageInfo -> String
$cshowList :: [ImageInfo] -> ShowS
showList :: [ImageInfo] -> ShowS
Show

imageInfoToCore :: ImageInfo -> IO C.ImageInfo
imageInfoToCore :: ImageInfo -> IO ImageInfo
imageInfoToCore ImageInfo {
	imageInfoSampler :: ImageInfo -> S
imageInfoSampler = Sampler.S S
s,
	imageInfoImageView :: ImageInfo -> I
imageInfoImageView = I
iv,
	imageInfoImageLayout :: ImageInfo -> Layout
imageInfoImageLayout = Image.Layout Word32
l } = do
	I
iv' <- I -> IO I
ImageView.iToCore I
iv
	ImageInfo -> IO ImageInfo
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure C.ImageInfo {
		imageInfoSampler :: S
C.imageInfoSampler = S
s,
		imageInfoImageView :: I
C.imageInfoImageView = I
iv',
		imageInfoImageLayout :: Word32
C.imageInfoImageLayout = Word32
l }