{-# LANGUAGE ImportQualifiedPost #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Gpu.Vulkan.Sparse.Middle.Internal where

import Gpu.Vulkan.Device.Middle.Internal qualified as Device
import Gpu.Vulkan.Memory.Middle.Internal qualified as Memory
import Gpu.Vulkan.Sparse.Enum

import Gpu.Vulkan.Sparse.Core qualified as C

data MemoryBind = MemoryBind {
	MemoryBind -> Size
memoryBindResourceOffset :: Device.Size,
	MemoryBind -> Size
memoryBindSize :: Device.Size,
	MemoryBind -> M
memoryBindMemory :: Memory.M,
	MemoryBind -> Size
memoryBindMemoryOffset :: Device.Size,
	MemoryBind -> MemoryBindFlags
memoryBindFlags :: MemoryBindFlags }

memoryBindToCore :: MemoryBind -> IO C.MemoryBind
memoryBindToCore :: MemoryBind -> IO MemoryBind
memoryBindToCore MemoryBind {
	memoryBindResourceOffset :: MemoryBind -> Size
memoryBindResourceOffset = Device.Size Word64
ro,
	memoryBindSize :: MemoryBind -> Size
memoryBindSize = Device.Size Word64
sz,
	memoryBindMemory :: MemoryBind -> M
memoryBindMemory = M
mm,
	memoryBindMemoryOffset :: MemoryBind -> Size
memoryBindMemoryOffset = Device.Size Word64
mo,
	memoryBindFlags :: MemoryBind -> MemoryBindFlags
memoryBindFlags = MemoryBindFlagBits Word32
fs } = do
	cmm <- M -> IO M
Memory.mToCore M
mm
	pure C.MemoryBind {
		C.memoryBindResourceOffset = ro,
		C.memoryBindSize = sz,
		C.memoryBindMemory = cmm,
		C.memoryBindMemoryOffset = mo,
		C.memoryBindFlags = fs }