diff --git a/gpu-vulkan-middle.cabal b/gpu-vulkan-middle.cabal
--- a/gpu-vulkan-middle.cabal
+++ b/gpu-vulkan-middle.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           gpu-vulkan-middle
-version:        0.1.0.61
+version:        0.1.0.62
 synopsis:       Medium wrapper for Vulkan API
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan-middle#readme>
 category:       GPU
@@ -22,9 +22,11 @@
     CHANGELOG.md
 data-files:
     th/vkFormat.txt
-    th/vkPhysicalDeviceDescriptorIndexingFeatures.txt
-    th/vkPhysicalDeviceFeatures.txt
     th/vkPhysicalDeviceLimits.txt
+    th/vkPhysicalDeviceFeatures.txt
+    th/vkPhysicalDeviceVulkan12Features.txt
+    th/vkPhysicalDeviceVulkan13Features.txt
+    th/vkPhysicalDeviceDescriptorIndexingFeatures.txt
     th/vkShaderStageFlagBits.txt
 
 source-repository head
diff --git a/src/Gpu/Vulkan/PhysicalDevice/Struct.hs b/src/Gpu/Vulkan/PhysicalDevice/Struct.hs
--- a/src/Gpu/Vulkan/PhysicalDevice/Struct.hs
+++ b/src/Gpu/Vulkan/PhysicalDevice/Struct.hs
@@ -61,3 +61,53 @@
 	createNextable p n =
 		descriptorIndexingFeaturesFromNoNext n .
 		descriptorIndexingFeaturesFromCore <$> peek (castPtr p)
+
+makeStructure "Vulkan12Features"
+
+instance Peek Vulkan12FeaturesNoNext where
+	peek' = (vulkan12FeaturesFromCore <$>) . peek . castPtr
+
+instance Typeable Vulkan12FeaturesNoNext where
+	structureType = StructureTypePhysicalDeviceVulkan12Features
+
+instance Sizable Vulkan12FeaturesNoNext where
+	sizeOf' = sizeOf @C.Vulkan12Features undefined
+	alignment' = alignment @C.Vulkan12Features undefined
+
+instance WithPoked (TMaybe.M mn) => WithPoked (Vulkan12Features mn) where
+	withPoked' v12fs f = alloca \pv12fs -> do
+		vulkan12FeaturesToCore v12fs $ \cv12fs -> poke pv12fs cv12fs
+		f . ptrS $ castPtr pv12fs
+
+instance Nextable Vulkan12Features where
+	nextableSize = sizeOf @C.Vulkan12Features undefined
+	nextableType = StructureTypePhysicalDeviceVulkan12Features
+	nextPtr p = C.vulkan12FeaturesPNext <$> peek (castPtr p)
+	createNextable p n =
+		vulkan12FeaturesFromNoNext n .
+		vulkan12FeaturesFromCore <$> peek (castPtr p)
+
+makeStructure "Vulkan13Features"
+
+instance Peek Vulkan13FeaturesNoNext where
+	peek' = (vulkan13FeaturesFromCore <$>) . peek . castPtr
+
+instance Typeable Vulkan13FeaturesNoNext where
+	structureType = StructureTypePhysicalDeviceVulkan13Features
+
+instance Sizable Vulkan13FeaturesNoNext where
+	sizeOf' = sizeOf @C.Vulkan13Features undefined
+	alignment' = alignment @C.Vulkan13Features undefined
+
+instance WithPoked (TMaybe.M mn) => WithPoked (Vulkan13Features mn) where
+	withPoked' v13fs f = alloca \pv13fs -> do
+		vulkan13FeaturesToCore v13fs $ \cv13fs -> poke pv13fs cv13fs
+		f . ptrS $ castPtr pv13fs
+
+instance Nextable Vulkan13Features where
+	nextableSize = sizeOf @C.Vulkan13Features undefined
+	nextableType = StructureTypePhysicalDeviceVulkan13Features
+	nextPtr p = C.vulkan13FeaturesPNext <$> peek (castPtr p)
+	createNextable p n =
+		vulkan13FeaturesFromNoNext n .
+		vulkan13FeaturesFromCore <$> peek (castPtr p)
diff --git a/src/Gpu/Vulkan/PhysicalDevice/Struct/Th.hs b/src/Gpu/Vulkan/PhysicalDevice/Struct/Th.hs
--- a/src/Gpu/Vulkan/PhysicalDevice/Struct/Th.hs
+++ b/src/Gpu/Vulkan/PhysicalDevice/Struct/Th.hs
@@ -7,9 +7,7 @@
 	vkPhysicalDeviceLimits, vkPhysicalDeviceFeatures,
 	DeviceSize(..), Size(..),
 
-
-	vkPhysicalDeviceData, vkPhysicalDeviceFromFunBody
-	) where
+	vkPhysicalDeviceData, vkPhysicalDeviceFromFunBody ) where
 
 import Language.Haskell.TH
 import Control.Arrow
diff --git a/th/vkPhysicalDeviceVulkan12Features.txt b/th/vkPhysicalDeviceVulkan12Features.txt
new file mode 100644
--- /dev/null
+++ b/th/vkPhysicalDeviceVulkan12Features.txt
@@ -0,0 +1,49 @@
+VkStructureType|A sType
+void*|A pNext
+VkBool32|A samplerMirrorClampToEdge
+VkBool32|A drawIndirectCount
+VkBool32|A storageBuffer8BitAccess
+VkBool32|A uniformAndStorageBuffer8BitAccess
+VkBool32|A storagePushConstant8
+VkBool32|A shaderBufferInt64Atomics
+VkBool32|A shaderSharedInt64Atomics
+VkBool32|A shaderFloat16
+VkBool32|A shaderInt8
+VkBool32|A descriptorIndexing
+VkBool32|A shaderInputAttachmentArrayDynamicIndexing
+VkBool32|A shaderUniformTexelBufferArrayDynamicIndexing
+VkBool32|A shaderStorageTexelBufferArrayDynamicIndexing
+VkBool32|A shaderUniformBufferArrayNonUniformIndexing
+VkBool32|A shaderSampledImageArrayNonUniformIndexing
+VkBool32|A shaderStorageBufferArrayNonUniformIndexing
+VkBool32|A shaderStorageImageArrayNonUniformIndexing
+VkBool32|A shaderInputAttachmentArrayNonUniformIndexing
+VkBool32|A shaderUniformTexelBufferArrayNonUniformIndexing
+VkBool32|A shaderStorageTexelBufferArrayNonUniformIndexing
+VkBool32|A descriptorBindingUniformBufferUpdateAfterBind
+VkBool32|A descriptorBindingSampledImageUpdateAfterBind
+VkBool32|A descriptorBindingStorageImageUpdateAfterBind
+VkBool32|A descriptorBindingStorageBufferUpdateAfterBind
+VkBool32|A descriptorBindingUniformTexelBufferUpdateAfterBind
+VkBool32|A descriptorBindingStorageTexelBufferUpdateAfterBind
+VkBool32|A descriptorBindingUpdateUnusedWhilePending
+VkBool32|A descriptorBindingPartiallyBound
+VkBool32|A descriptorBindingVariableDescriptorCount
+VkBool32|A runtimeDescriptorArray
+VkBool32|A samplerFilterMinmax
+VkBool32|A scalarBlockLayout
+VkBool32|A imagelessFramebuffer
+VkBool32|A uniformBufferStandardLayout
+VkBool32|A shaderSubgroupExtendedTypes
+VkBool32|A separateDepthStencilLayouts
+VkBool32|A hostQueryReset
+VkBool32|A timelineSemaphore
+VkBool32|A bufferDeviceAddress
+VkBool32|A bufferDeviceAddressCaptureReplay
+VkBool32|A bufferDeviceAddressMultiDevice
+VkBool32|A vulkanMemoryModel
+VkBool32|A vulkanMemoryModelDeviceScope
+VkBool32|A vulkanMemoryModelAvailabilityVisibilityChains
+VkBool32|A shaderOutputViewportIndex
+VkBool32|A shaderOutputLayer
+VkBool32|A subgroupBroadcastDynamicId
diff --git a/th/vkPhysicalDeviceVulkan13Features.txt b/th/vkPhysicalDeviceVulkan13Features.txt
new file mode 100644
--- /dev/null
+++ b/th/vkPhysicalDeviceVulkan13Features.txt
@@ -0,0 +1,17 @@
+VkStructureType|A sType
+void*|A pNext
+VkBool32|A robustImageAccess
+VkBool32|A inlineUniformBlock
+VkBool32|A descriptorBindingInlineUniformBlockUpdateAfterBind
+VkBool32|A pipelineCreationCacheControl
+VkBool32|A privateData
+VkBool32|A shaderDemoteToHelperInvocation
+VkBool32|A shaderTerminateInvocation
+VkBool32|A subgroupSizeControl
+VkBool32|A computeFullSubgroups
+VkBool32|A synchronization2
+VkBool32|A textureCompressionASTC_HDR
+VkBool32|A shaderZeroInitializeWorkgroupMemory
+VkBool32|A dynamicRendering
+VkBool32|A shaderIntegerDotProduct
+VkBool32|A maintenance4
