diff --git a/gpu-vulkan.cabal b/gpu-vulkan.cabal
--- a/gpu-vulkan.cabal
+++ b/gpu-vulkan.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           gpu-vulkan
-version:        0.1.0.164
+version:        0.1.0.165
 synopsis:       Vulkan library
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan#readme>
 category:       GPU
@@ -193,6 +193,7 @@
     , bytestring <1
     , containers <1
     , data-default <1
+    , fixed-generic <1
     , gpu-vulkan-middle >=0.1.0.60 && <1
     , hetero-parameter-list <1
     , hetero-parameter-list-with-typelevel-tools <1
@@ -232,6 +233,7 @@
     , bytestring <1
     , containers <1
     , data-default <1
+    , fixed-generic <1
     , gpu-vulkan
     , gpu-vulkan-middle >=0.1.0.60 && <1
     , hetero-parameter-list <1
diff --git a/src/Gpu/Vulkan.hs b/src/Gpu/Vulkan.hs
--- a/src/Gpu/Vulkan.hs
+++ b/src/Gpu/Vulkan.hs
@@ -89,6 +89,10 @@
 
 	DependencyInfo(..), BlitImageInfo2(..),
 
+	Sec(..), pattern NanoSec, pattern MicroSec, pattern MilliSec,
+
+	remainingMipLevels, remainingArrayLayers,
+
 	-- * ENUM
 
 	module Gpu.Vulkan.Enum,
diff --git a/src/Gpu/Vulkan/Fence.hs b/src/Gpu/Vulkan/Fence.hs
--- a/src/Gpu/Vulkan/Fence.hs
+++ b/src/Gpu/Vulkan/Fence.hs
@@ -12,7 +12,7 @@
 
 	-- * WAIT FOR FENCES AND RESET FENCES
 
-	waitForFs, resetFs,
+	waitForFs, waitForFs', resetFs,
 
 	-- * ENUM
 
diff --git a/src/Gpu/Vulkan/Fence/Internal.hs b/src/Gpu/Vulkan/Fence/Internal.hs
--- a/src/Gpu/Vulkan/Fence/Internal.hs
+++ b/src/Gpu/Vulkan/Fence/Internal.hs
@@ -18,7 +18,7 @@
 
 	-- * WAIT FOR FENCES AND RESET FENCES
 
-	waitForFs, resetFs
+	waitForFs, waitForFs', resetFs
 
 	) where
 
@@ -33,8 +33,10 @@
 import Data.HeteroParList qualified as HeteroParList
 import Data.Map qualified as Map
 import Data.Word
+import Data.Fixed.Generic qualified as FixedG
 import Data.Time
 
+import Gpu.Vulkan
 import Gpu.Vulkan.Fence.Type
 
 import qualified Gpu.Vulkan.Device.Type as Device
@@ -49,8 +51,12 @@
 create (Device.D dvc) ci (AllocationCallbacks.toMiddle -> mac) f =
 	bracket (M.create dvc ci mac) (\fnc -> M.destroy dvc fnc mac) (f . F)
 
-waitForFs :: Device.D sd -> HeteroParList.PL F sfs -> Bool -> Maybe DiffTime -> IO ()
-waitForFs (Device.D dvc) fs wa (maybe maxBound diffTimeToNanoseconds -> to) =
+waitForFs :: Device.D sd -> HeteroParList.PL F sfs -> Bool -> Maybe Sec -> IO ()
+waitForFs (Device.D dvc) fs wa (maybe maxBound (\(Sec (FixedG.MkF ns)) -> ns) -> to) =
+	M.waitForFs dvc (HeteroParList.toList (\(F f) -> f) fs) wa to
+
+waitForFs' :: Device.D sd -> HeteroParList.PL F sfs -> Bool -> Maybe DiffTime -> IO ()
+waitForFs' (Device.D dvc) fs wa (maybe maxBound diffTimeToNanoseconds -> to) =
 	M.waitForFs dvc (HeteroParList.toList (\(F f) -> f) fs) wa to
 
 resetFs :: Device.D sd -> HeteroParList.PL F sfs -> IO ()
diff --git a/src/Gpu/Vulkan/Internal.hs b/src/Gpu/Vulkan/Internal.hs
--- a/src/Gpu/Vulkan/Internal.hs
+++ b/src/Gpu/Vulkan/Internal.hs
@@ -88,8 +88,12 @@
 	M.Size(..),
 
 	DependencyInfo(..), dependencyInfoToMiddle,
-	BlitImageInfo2(..), blitImageInfo2ToMiddle
+	BlitImageInfo2(..), blitImageInfo2ToMiddle,
 
+	Sec(..), pattern NanoSec, pattern MicroSec, pattern MilliSec,
+
+	M.remainingMipLevels, M.remainingArrayLayers
+
 	) where
 
 import Foreign.Storable.PeekPoke
@@ -101,6 +105,9 @@
 import Data.HeteroParList qualified as HeteroParList
 import Data.HeteroParList qualified as HPList
 import Data.HeteroParList (pattern (:**))
+import Data.Word
+import Data.Fixed
+import Data.Fixed.Generic qualified as FixedG
 import Data.Text qualified as T
 
 import qualified Gpu.Vulkan.Middle as M
@@ -347,3 +354,16 @@
 	M.blitImageInfo2SrcImage = si, M.blitImageInfo2SrcImageLayout = sil,
 	M.blitImageInfo2DstImage = di, M.blitImageInfo2DstImageLayout = dil,
 	M.blitImageInfo2Regions = rs, M.blitImageInfo2Filter = flt }
+
+newtype Sec = Sec (FixedG.F E9 Word64)
+
+pattern NanoSec :: Word64 -> Sec
+pattern NanoSec ns = Sec (FixedG.MkF ns)
+
+pattern MicroSec :: FixedG.F E3 Word64 -> Sec
+pattern MicroSec ms <- Sec (FixedG.changeUnit -> ms) where
+	MicroSec ms = Sec $ FixedG.changeUnit ms
+
+pattern MilliSec :: FixedG.F E6 Word64 -> Sec
+pattern MilliSec ms <- Sec (FixedG.changeUnit -> ms) where
+	MilliSec ms = Sec $ FixedG.changeUnit ms
