diff --git a/gpu-vulkan-core.cabal b/gpu-vulkan-core.cabal
--- a/gpu-vulkan-core.cabal
+++ b/gpu-vulkan-core.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           gpu-vulkan-core
-version:        0.1.0.19
+version:        0.1.0.20
 synopsis:       Thin wrapper for Vulkan API
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan-core#readme>
 category:       GPU
diff --git a/src/Gpu/Vulkan/Cmd/Core.hsc b/src/Gpu/Vulkan/Cmd/Core.hsc
--- a/src/Gpu/Vulkan/Cmd/Core.hsc
+++ b/src/Gpu/Vulkan/Cmd/Core.hsc
@@ -18,7 +18,7 @@
 
 	-- * COPY BUFFER AND IMAGE
 
-	copyBuffer, copyBufferToImage, copyImageToBuffer, blitImage,
+	copyBuffer, copyBufferToImage, copyImageToBuffer, blitImage, blitImage2,
 
 	-- * CLEAR COLOR IMAGE
 
@@ -107,6 +107,9 @@
 	CommandBuffer.C ->
 	Image.I -> #{type VkImageLayout} -> Image.I -> #{type VkImageLayout} ->
 	#{type uint32_t} -> Ptr Image.Blit -> #{type VkFilter} -> IO ()
+
+foreign import ccall "vkCmdBlitImage2" blitImage2 ::
+	CommandBuffer.C -> Ptr BlitImageInfo2 -> IO()
 
 foreign import ccall "vkCmdDispatch" dispatch ::
 	CommandBuffer.C ->
diff --git a/src/Gpu/Vulkan/Core.hsc b/src/Gpu/Vulkan/Core.hsc
--- a/src/Gpu/Vulkan/Core.hsc
+++ b/src/Gpu/Vulkan/Core.hsc
@@ -123,8 +123,16 @@
 	dependencyInfoBufferMemoryBarrierCount,
 	dependencyInfoPBufferMemoryBarriers,
 	dependencyInfoImageMemoryBarrierCount,
-	dependencyInfoPImageMemoryBarriers
+	dependencyInfoPImageMemoryBarriers,
 
+	-- * BLIT IMAGE INFO 2
+
+	BlitImageInfo2, pattern BlitImageInfo2,
+	blitImageInfo2SType, blitImageInfo2PNext,
+	blitImageInfo2SrcImage, blitImageInfo2SrcImageLayout,
+	blitImageInfo2DstImage, blitImageInfo2DstImageLayout,
+	blitImageInfo2RegionCount, blitImageInfo2PRegions, blitImageInfo2Filter
+
 	) where
 
 import Foreign.Ptr
@@ -469,4 +477,35 @@
 	("pImageMemoryBarriers", ''Image.PtrMemoryBarrier2,
 		[| #{peek VkDependencyInfo, pImageMemoryBarriers} |],
 		[| #{poke VkDependencyInfo, pImageMemoryBarriers} |]) ]
+	[''Show, ''Storable]
+
+struct "BlitImageInfo2" #{size VkBlitImageInfo2} #{alignment VkBlitImageInfo2} [
+	("sType", ''(), [| const $ pure () |],
+		[| \p _ -> #{poke VkBlitImageInfo2, sType} p
+			(#{const VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2} ::
+				#{type VkStructureType}) |]),
+	("pNext", ''PtrVoid,
+		[| #{peek VkBlitImageInfo2, pNext} |],
+		[| #{poke VkBlitImageInfo2, pNext} |]),
+	("srcImage", ''Image.I,
+		[| #{peek VkBlitImageInfo2, srcImage} |],
+		[| #{poke VkBlitImageInfo2, srcImage} |]),
+	("srcImageLayout", ''#{type VkImageLayout},
+		[| #{peek VkBlitImageInfo2, srcImageLayout} |],
+		[| #{poke VkBlitImageInfo2, srcImageLayout} |]),
+	("dstImage", ''Image.I,
+		[| #{peek VkBlitImageInfo2, dstImage} |],
+		[| #{poke VkBlitImageInfo2, dstImage} |]),
+	("dstImageLayout", ''#{type VkImageLayout},
+		[| #{peek VkBlitImageInfo2, dstImageLayout} |],
+		[| #{poke VkBlitImageInfo2, dstImageLayout} |]),
+	("regionCount", ''#{type uint32_t},
+		[| #{peek VkBlitImageInfo2, regionCount} |],
+		[| #{poke VkBlitImageInfo2, regionCount} |]),
+	("pRegions", ''Image.PtrBlit2,
+		[| #{peek VkBlitImageInfo2, pRegions} |],
+		[| #{poke VkBlitImageInfo2, pRegions} |]),
+	("filter", ''#{type VkFilter},
+		[| #{peek VkBlitImageInfo2, filter} |],
+		[| #{poke VkBlitImageInfo2, filter} |]) ]
 	[''Show, ''Storable]
diff --git a/src/Gpu/Vulkan/Image/Core.hs-boot b/src/Gpu/Vulkan/Image/Core.hs-boot
--- a/src/Gpu/Vulkan/Image/Core.hs-boot
+++ b/src/Gpu/Vulkan/Image/Core.hs-boot
@@ -1,6 +1,12 @@
-module Gpu.Vulkan.Image.Core where
+module Gpu.Vulkan.Image.Core (MemoryBarrier2, PtrMemoryBarrier2, I, Blit2, PtrBlit2) where
 
 import Foreign.Ptr
 
 data MemoryBarrier2
 type PtrMemoryBarrier2 = Ptr MemoryBarrier2
+
+data Blit2
+type PtrBlit2 = Ptr Blit2
+
+data ITag
+type I = Ptr ITag
diff --git a/src/Gpu/Vulkan/Image/Core.hsc b/src/Gpu/Vulkan/Image/Core.hsc
--- a/src/Gpu/Vulkan/Image/Core.hsc
+++ b/src/Gpu/Vulkan/Image/Core.hsc
@@ -48,6 +48,11 @@
 	Blit, pattern Blit,
 	blitSrcSubresource, blitSrcOffsets, blitDstSubresource, blitDstOffsets,
 
+	Blit2, PtrBlit2, pattern Blit2,
+	blit2SType, blit2PNext,
+	blit2SrcSubresource, blit2SrcOffsets,
+	blit2DstSubresource, blit2DstOffsets,
+
 	-- ** SubresourceLayers
 
 	SubresourceLayers, pattern SubresourceLayers,
@@ -276,6 +281,32 @@
 		[| \p os -> pokeArray
 			(#{ptr VkImageBlit, dstOffsets} p) $ take 2 os |]) ]
 	[''Show, ''Storable]
+
+struct "Blit2" #{size VkImageBlit2} #{alignment VkImageBlit2} [
+	("sType", ''(), [| const $ pure () |],
+		[| \p _ -> #{poke VkImageBlit2, sType} p
+			(#{const VK_STRUCTURE_TYPE_IMAGE_BLIT_2} ::
+				#{type VkStructureType}) |]),
+	("pNext", ''PtrVoid,
+		[| #{peek VkImageBlit2, pNext} |],
+		[| #{poke VkImageBlit2, pNext} |]),
+	("srcSubresource", ''SubresourceLayers,
+		[| #{peek VkImageBlit2, srcSubresource} |],
+		[| #{poke VkImageBlit2, srcSubresource} |]),
+	("srcOffsets", ''ListOffset3d,
+		[| \p -> peekArray 2  (#{ptr VkImageBlit2, srcOffsets} p) |],
+		[| \p os -> pokeArray
+			(#{ptr VkImageBlit2, srcOffsets} p) $ take 2 os |]),
+	("dstSubresource", ''SubresourceLayers,
+		[| #{peek VkImageBlit2, dstSubresource} |],
+		[| #{poke VkImageBlit2, dstSubresource} |]),
+	("dstOffsets", ''ListOffset3d,
+		[| \p -> peekArray 2 (#{ptr VkImageBlit2, dstOffsets} p) |],
+		[| \p os -> pokeArray
+			(#{ptr VkImageBlit2, dstOffsets} p) $ take 2 os |]) ]
+	[''Show, ''Storable]
+
+type PtrBlit2 = Ptr Blit2
 
 struct "Subresource" #{size VkImageSubresource}
 	#{alignment VkImageSubresource} [
