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.20
+version:        0.1.0.21
 synopsis:       Thin wrapper for Vulkan API
 description:    Please see the README on GitHub at <https://github.com/YoshikuniJujo/gpu-vulkan-core#readme>
 category:       GPU
@@ -42,6 +42,7 @@
       Gpu.Vulkan.DescriptorSetLayout.Core
       Gpu.Vulkan.DescriptorSetLayout.BindingFlags.Core
       Gpu.Vulkan.Device.Core
+      Gpu.Vulkan.Device.GroupDevice.Core
       Gpu.Vulkan.Fence.Core
       Gpu.Vulkan.Framebuffer.Core
       Gpu.Vulkan.Image.Core
diff --git a/src/Gpu/Vulkan/Device/GroupDevice/Core.hsc b/src/Gpu/Vulkan/Device/GroupDevice/Core.hsc
new file mode 100644
--- /dev/null
+++ b/src/Gpu/Vulkan/Device/GroupDevice/Core.hsc
@@ -0,0 +1,38 @@
+{-# LANGUAGE ImportQualifiedPost #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
+{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
+
+module Gpu.Vulkan.Device.GroupDevice.Core (
+	CreateInfo, pattern CreateInfo,
+	createInfoSType, createInfoPNext,
+	createInfoPhysicalDeviceCount, createInfoPPhysicalDevices ) where
+
+import Foreign.Storable
+import Foreign.C.Struct
+import Foreign.C.Struct.TypeSynonyms
+import Data.Word
+
+import Gpu.Vulkan.PhysicalDevice.Core qualified as PhysicalDevice
+
+#include <vulkan/vulkan.h>
+
+createInfoType :: #{type VkStructureType}
+createInfoType = #{const VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO}
+
+struct "CreateInfo" #{size VkDeviceGroupDeviceCreateInfo}
+		#{alignment VkDeviceGroupDeviceCreateInfo} [
+	("sType", ''(), [| const $ pure () |],
+		[| \p _ -> #{poke VkDeviceGroupDeviceCreateInfo, sType}
+			p createInfoType |]),
+	("pNext", ''PtrVoid,
+		[| #{peek VkDeviceGroupDeviceCreateInfo, pNext} |],
+		[| #{poke VkDeviceGroupDeviceCreateInfo, pNext} |]),
+	("physicalDeviceCount", ''#{type uint32_t},
+		[| #{peek VkDeviceGroupDeviceCreateInfo, physicalDeviceCount} |],
+		[| #{poke VkDeviceGroupDeviceCreateInfo, physicalDeviceCount} |]),
+	("pPhysicalDevices", ''PhysicalDevice.PtrP,
+		[| #{peek VkDeviceGroupDeviceCreateInfo, pPhysicalDevices} |],
+		[| #{poke VkDeviceGroupDeviceCreateInfo, pPhysicalDevices} |]) ]
+	[''Show, ''Storable]
diff --git a/src/Gpu/Vulkan/PhysicalDevice/Core.hsc b/src/Gpu/Vulkan/PhysicalDevice/Core.hsc
--- a/src/Gpu/Vulkan/PhysicalDevice/Core.hsc
+++ b/src/Gpu/Vulkan/PhysicalDevice/Core.hsc
@@ -7,7 +7,7 @@
 
 	-- * ENUMERATE
 
-	enumerate, P,
+	enumerate, P, PtrP,
 
 	-- * PROPERTIES
 
@@ -95,6 +95,7 @@
 
 data PTag
 type P = Ptr PTag
+type PtrP = Ptr P
 
 foreign import ccall "vkEnumeratePhysicalDevices" enumerate ::
 	Instance.I -> Ptr #{type uint32_t} -> Ptr P ->
