diff --git a/.version b/.version
index 4f9aed6f..7806c2e2 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-1.3.257
\ No newline at end of file
+1.3.259
\ No newline at end of file
diff --git a/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.bitmasks.cs b/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.bitmasks.cs
new file mode 100644
index 00000000..4a4af378
--- /dev/null
+++ b/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.bitmasks.cs
@@ -0,0 +1 @@
+global using VkHostImageCopyFlagsEXT = Exomia.Vulkan.Api.Core.VkHostImageCopyFlagBitsEXT;
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkDescriptorSetLayoutCreateFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkDescriptorSetLayoutCreateFlagBits.cs
index 20cd3b1c..01f63690 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkDescriptorSetLayoutCreateFlagBits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkDescriptorSetLayoutCreateFlagBits.cs
@@ -59,6 +59,18 @@ public enum VkDescriptorSetLayoutCreateFlagBits
///
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x20,
+ ///
+ /// VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV specifies that descriptor sets using this layout allows
+ /// them to be bound with compute pipelines that are created with VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV flag set
+ /// to be used in
+ ///
+ /// Device-Generated
+ /// Commands
+ ///
+ /// .
+ ///
+ VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x80,
+
///
/// VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT specifies that descriptor sets using this layout must
/// be allocated from a descriptor pool created with the VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set.
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkFormatFeatureFlagBits2.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkFormatFeatureFlagBits2.cs
index 764d3cd7..a31fd524 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkFormatFeatureFlagBits2.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkFormatFeatureFlagBits2.cs
@@ -355,6 +355,12 @@ public enum VkFormatFeatureFlagBits2 : ulong
///
VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000,
+ ///
+ /// VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT specifies that an image can be created with
+ /// VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT.
+ ///
+ VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 0x400000000000,
+
///
/// VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR specifies that an image view with this format can be used as an
///
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkImageUsageFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkImageUsageFlagBits.cs
index cf1b06f9..d10cb882 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkImageUsageFlagBits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkImageUsageFlagBits.cs
@@ -132,6 +132,12 @@ public enum VkImageUsageFlagBits
///
VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x100,
+ ///
+ /// VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT specifies that the image canbe used with host copy commands and host
+ /// layout transitions.
+ ///
+ VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = 0x400000,
+
/// VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR is reserved for future use.
VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x2000,
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs
index 20b787f5..875444b7 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs
@@ -3265,6 +3265,66 @@ public enum VkStructureType
///
VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = 1000270000,
+
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = 1000270001,
+
+ ///
+ /// VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = 1000270002,
+
+ ///
+ /// VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = 1000270003,
+
+ ///
+ /// VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = 1000270004,
+
+ ///
+ /// VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = 1000270005,
+
+ ///
+ /// VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = 1000270006,
+
+ ///
+ /// VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = 1000270007,
+
+ ///
+ /// VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = 1000270008,
+
+ ///
+ /// VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = 1000270009,
+
///
/// VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
@@ -4441,6 +4501,24 @@ public enum VkStructureType
///
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV = 1000427001,
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000,
+
+ ///
+ /// VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001,
+
+ ///
+ /// VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002,
+
///
/// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToImageInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToImageInfoEXT.cs
new file mode 100644
index 00000000..91db44a7
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToImageInfoEXT.cs
@@ -0,0 +1,52 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkCopyImageToImageInfoEXT - Structure specifying parameters of an image to image host copy command -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkCopyImageToImageInfoEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkCopyImageToImageInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// flags is a bitmask of VkHostImageCopyFlagBitsEXT values describing additional copy parameters.
+ public VkHostImageCopyFlagsEXT flags;
+
+ /// srcImage is the source image.
+ public VkImage srcImage;
+
+ /// srcImageLayout is the layout of the source image subresources for the copy.
+ public VkImageLayout srcImageLayout;
+
+ /// dstImage is the destination image.
+ public VkImage dstImage;
+
+ /// dstImageLayout is the layout of the destination image subresources for the copy.
+ public VkImageLayout dstImageLayout;
+
+ /// regionCount is the number of regions to copy.
+ public uint regionCount;
+
+ /// pRegions is a pointer to an array of VkImageCopy2 structures specifying the regions to copy.
+ public VkImageCopy2* pRegions;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToMemoryInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToMemoryInfoEXT.cs
new file mode 100644
index 00000000..451fc0ee
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyImageToMemoryInfoEXT.cs
@@ -0,0 +1,46 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkCopyImageToMemoryInfoEXT - Structure specifying parameters of an image to host memory copy command -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkCopyImageToMemoryInfoEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkCopyImageToMemoryInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// flags is a bitmask of VkHostImageCopyFlagBitsEXT values describing additional copy parameters.
+ public VkHostImageCopyFlagsEXT flags;
+
+ /// srcImage is the source image.
+ public VkImage srcImage;
+
+ /// srcImageLayout is the layout of the source image subresources for the copy.
+ public VkImageLayout srcImageLayout;
+
+ /// regionCount is the number of regions to copy.
+ public uint regionCount;
+
+ /// pRegions is a pointer to an array of VkImageToMemoryCopyEXTstructures specifying the regions to copy.
+ public VkImageToMemoryCopyEXT* pRegions;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyMemoryToImageInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyMemoryToImageInfoEXT.cs
new file mode 100644
index 00000000..dd820fed
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkCopyMemoryToImageInfoEXT.cs
@@ -0,0 +1,46 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkCopyMemoryToImageInfoEXT - Structure specifying parameters of host memory to image copy command -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkCopyMemoryToImageInfoEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkCopyMemoryToImageInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// flags is a bitmask of VkHostImageCopyFlagBitsEXT values describing additional copy parameters.
+ public VkHostImageCopyFlagsEXT flags;
+
+ /// dstImage is the destination image.
+ public VkImage dstImage;
+
+ /// dstImageLayout is the layout of the destination image subresources for the copy.
+ public VkImageLayout dstImageLayout;
+
+ /// regionCount is the number of regions to copy.
+ public uint regionCount;
+
+ /// pRegions is a pointer to an array of VkMemoryToImageCopyEXTstructures specifying the regions to copy.
+ public VkMemoryToImageCopyEXT* pRegions;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.cs
new file mode 100644
index 00000000..16bb7f77
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkExtHostImageCopy.cs
@@ -0,0 +1,223 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+global using static Exomia.Vulkan.Api.Core.VkExtHostImageCopy;
+
+#pragma warning disable CA2211 // Non-constant fields should not be visible
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VK_EXT_host_image_copy - device extension (nr. 271) - author 'EXT' [platform '' | contact 'Shahbaz Youssefi
+/// @syoussefi']
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_host_image_copy.html
+///
+[VkDepends("VK_KHR_get_physical_device_properties2+VK_KHR_copy_commands2+VK_KHR_format_feature_flags2")]
+public static unsafe class VkExtHostImageCopy
+{
+ /// The spec version.
+ public const uint VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION = 1;
+
+ /// The extension name.
+ public const string VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME = "VK_EXT_host_image_copy";
+
+ ///
+ /// An UTF8 null terminated version of represented by an
+ /// UTF16 string.
+ ///
+ ///
+ /// Example usage:
+ ///
+ /// fixed(char* ptr = VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME_UTF8_NT) {
+ /// sbyte* utf8NtPtr = (sbyte*)ptr; // utf8NtPtr - can now be passed and used directly as a utf8_nt string for
+ /// unmanaged code.
+ /// }
+ ///
+ public const string VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME_UTF8_NT = "\u4b56\u455f\u5458\u485f\u534f\u5f54\u4d49\u4741\u5f45\u4f43\u5950\u455f\u5458\u4e45\u4953\u4e4f\u4e5f\u4d41\u0045";
+
+ ///
+ /// vkCopyMemoryToImageEXT - Copy data from host memory into an image -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCopyMemoryToImageEXT.html
+ ///
+ /// device is the device which owns pCopyMemoryToImageInfo->dstImage.
+ ///
+ /// pCopyMemoryToImageInfo is a pointer to a VkCopyMemoryToImageInfoEXT structure
+ /// describing the copy parameters.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodes
+ /// VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkCopyMemoryToImageInfoEXT* /*pCopyMemoryToImageInfo*/,
+ VkResult> vkCopyMemoryToImageEXT = null;
+
+ ///
+ /// vkCopyImageToMemoryEXT - Copy image data into host memory -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCopyImageToMemoryEXT.html
+ ///
+ /// device is the device which owns pCopyImageToMemoryInfo->srcImage.
+ ///
+ /// pCopyImageToMemoryInfo is a pointer to a VkCopyImageToMemoryInfoEXT structure
+ /// describing the copy parameters.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodes
+ /// VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkCopyImageToMemoryInfoEXT* /*pCopyImageToMemoryInfo*/,
+ VkResult> vkCopyImageToMemoryEXT = null;
+
+ ///
+ /// vkCopyImageToImageEXT - Copy image data using the host -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCopyImageToImageEXT.html
+ ///
+ /// device is the device which owns pCopyImageToMemoryInfo->srcImage.
+ ///
+ /// pCopyImageToImageInfo is a pointer to a VkCopyImageToImageInfoEXT structure
+ /// describing the copy parameters.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodes
+ /// VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkCopyImageToImageInfoEXT* /*pCopyImageToImageInfo*/,
+ VkResult> vkCopyImageToImageEXT = null;
+
+ ///
+ /// vkTransitionImageLayoutEXT - Perform an image layout transition on the host -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkTransitionImageLayoutEXT.html
+ ///
+ /// device is the device which owns pTransitions[i].image.
+ /// transitionCount is the number of image layout transitions to perform.
+ ///
+ /// pTransitions is a pointer to an array of VkHostImageLayoutTransitionInfoEXT structures
+ /// specifying the image and subresource ranges within them to transition.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodes
+ /// VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_MEMORY_MAP_FAILED
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ uint /*transitionCount*/,
+ VkHostImageLayoutTransitionInfoEXT* /*pTransitions*/,
+ VkResult> vkTransitionImageLayoutEXT = null;
+
+ ///
+ /// vkGetImageSubresourceLayout2EXT - Retrieve information about an image subresource -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetImageSubresourceLayout2EXT.html
+ ///
+ ///
+ /// device is the logical device that owns the image.
+ /// image is the image whose layout is being queried.
+ ///
+ /// pSubresource is a pointer to a VkImageSubresource2EXTstructure selecting a specific image
+ /// for the image subresource.
+ ///
+ /// pLayout is a pointer to a VkSubresourceLayout2EXT structure in which the layout is returned.
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkImage /*image*/,
+ VkImageSubresource2EXT* /*pSubresource*/,
+ VkSubresourceLayout2EXT* /*pLayout*/,
+ void> vkGetImageSubresourceLayout2EXT = null;
+
+ /// Loads all function pointer based on the device for this extension. (see remarks!)
+ /// The device that the function pointers will be compatible with.
+ ///
+ /// This load method makes the following function pointers available:
+ ///
+ /// -
+ /// vkCopyMemoryToImageEXT
+ ///
+ /// -
+ /// vkCopyImageToMemoryEXT
+ ///
+ /// -
+ /// vkCopyImageToImageEXT
+ ///
+ /// -
+ /// vkTransitionImageLayoutEXT
+ ///
+ /// -
+ /// vkGetImageSubresourceLayout2EXT
+ ///
+ ///
+ ///
+ public static void Load(VkDevice device)
+ {
+ fixed (delegate** pvkCopyMemoryToImageEXT = &vkCopyMemoryToImageEXT)
+ {
+ *pvkCopyMemoryToImageEXT = (delegate*)GetVkFunction(device, "\u6b76\u6f43\u7970\u654d\u6f6d\u7972\u6f54\u6d49\u6761\u4565\u5458\u0000");
+ }
+
+ fixed (delegate** pvkCopyImageToMemoryEXT = &vkCopyImageToMemoryEXT)
+ {
+ *pvkCopyImageToMemoryEXT = (delegate*)GetVkFunction(device, "\u6b76\u6f43\u7970\u6d49\u6761\u5465\u4d6f\u6d65\u726f\u4579\u5458\u0000");
+ }
+
+ fixed (delegate** pvkCopyImageToImageEXT = &vkCopyImageToImageEXT)
+ {
+ *pvkCopyImageToImageEXT = (delegate*)GetVkFunction(device, "\u6b76\u6f43\u7970\u6d49\u6761\u5465\u496f\u616d\u6567\u5845\u0054");
+ }
+
+ fixed (delegate** pvkTransitionImageLayoutEXT = &vkTransitionImageLayoutEXT)
+ {
+ *pvkTransitionImageLayoutEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u7254\u6e61\u6973\u6974\u6e6f\u6d49\u6761\u4c65\u7961\u756f\u4574\u5458\u0000");
+ }
+
+ fixed (delegate** pvkGetImageSubresourceLayout2EXT = &vkGetImageSubresourceLayout2EXT)
+ {
+ *pvkGetImageSubresourceLayout2EXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6547\u4974\u616d\u6567\u7553\u7262\u7365\u756f\u6372\u4c65\u7961\u756f\u3274\u5845\u0054");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyDevicePerformanceQueryEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyDevicePerformanceQueryEXT.cs
new file mode 100644
index 00000000..f5720924
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyDevicePerformanceQueryEXT.cs
@@ -0,0 +1,61 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkHostImageCopyDevicePerformanceQueryEXT - Struct containing information about optimality of device access -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkHostImageCopyDevicePerformanceQueryEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkImageFormatProperties2
+///
+/// -
+/// returnedonlytrue
+///
+///
+///
+[VkStructExtends("VkImageFormatProperties2")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkHostImageCopyDevicePerformanceQueryEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ ///
+ /// optimalDeviceAccess returns VK_TRUE if use of host image copy has no adverse effect on device access
+ /// performance, compared to an image that is created with exact same creation parameters, and bound to the same
+ /// VkDeviceMemory, except that VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+ /// and VK_IMAGE_USAGE_TRANSFER_DST_BIT.
+ ///
+ public VkBool32 optimalDeviceAccess;
+
+ ///
+ /// identicalMemoryLayout returns VK_TRUE if use of host image copy has no impact on memory layout compared to an
+ /// image that is created with exact same creation parameters, and bound to the same VkDeviceMemory, except that
+ /// VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT is replaced with VK_IMAGE_USAGE_TRANSFER_SRC_BIT and
+ /// VK_IMAGE_USAGE_TRANSFER_DST_BIT.
+ ///
+ public VkBool32 identicalMemoryLayout;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyFlagBitsEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyFlagBitsEXT.cs
new file mode 100644
index 00000000..ef6fbd12
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageCopyFlagBitsEXT.cs
@@ -0,0 +1,31 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkHostImageCopyFlagBitsEXT - Bitmask specifying additional copy parameters -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkHostImageCopyFlagBitsEXT.html
+///
+[Flags]
+public enum VkHostImageCopyFlagBitsEXT
+{
+ ///
+ /// VK_HOST_IMAGE_COPY_MEMCPY_EXT specifies that no memory layout swizzling is to be applied during data copy. For
+ /// copies between memory and images, this flag indicates that image data in host memory is swizzled in exactly the
+ /// same way as the image data on the device. Using this flag indicates that the implementations may use a simple
+ /// memory copy to transfer the data between the host memory and the device memory. The format of the swizzled data in
+ /// host memory is platform dependent and is not defined in this specification.
+ ///
+ VK_HOST_IMAGE_COPY_MEMCPY_EXT = 0x1
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageLayoutTransitionInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageLayoutTransitionInfoEXT.cs
new file mode 100644
index 00000000..d327af4f
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkHostImageLayoutTransitionInfoEXT.cs
@@ -0,0 +1,50 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkHostImageLayoutTransitionInfoEXT - Structure specifying the parameters of a host-side image layout
+/// transition -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkHostImageLayoutTransitionInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkHostImageLayoutTransitionInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// image is a handle to the image affected by this layout transition.
+ public VkImage image;
+
+ /// oldLayout is the old layout in an image layout transition.
+ public VkImageLayout oldLayout;
+
+ /// newLayout is the new layout in an image layout transition.
+ public VkImageLayout newLayout;
+
+ ///
+ /// subresourceRange describes the image subresource range within image that is affected by this layout
+ /// transition.
+ ///
+ public VkImageSubresourceRange subresourceRange;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_compression_control/VkImageSubresource2EXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkImageSubresource2EXT.cs
similarity index 100%
rename from src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_compression_control/VkImageSubresource2EXT.cs
rename to src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkImageSubresource2EXT.cs
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkImageToMemoryCopyEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkImageToMemoryCopyEXT.cs
new file mode 100644
index 00000000..bbd6f5b0
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkImageToMemoryCopyEXT.cs
@@ -0,0 +1,60 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkImageToMemoryCopyEXT - Structure specifying an image to host memory copy operation -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkImageToMemoryCopyEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkImageToMemoryCopyEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// pHostPointer is the host memory address which is the destination of the copy.
+ public void* pHostPointer;
+
+ ///
+ /// memoryRowLength and memoryImageHeight specify in texels a subregion of a larger two- or three-dimensional
+ /// image in host memory, and control the addressing calculations. If either of these values is zero, that aspect of
+ /// the host memory is considered to be tightly packed according to the imageExtent.
+ ///
+ public uint memoryRowLength;
+
+ ///
+ /// memoryRowLength and memoryImageHeight specify in texels a subregion of a larger two- or three-dimensional
+ /// image in host memory, and control the addressing calculations. If either of these values is zero, that aspect of
+ /// the host memory is considered to be tightly packed according to the imageExtent.
+ ///
+ public uint memoryImageHeight;
+
+ ///
+ /// imageSubresource is a VkImageSubresourceLayers used to specify the specific image subresources of the image
+ /// used for the source or destination image data.
+ ///
+ public VkImageSubresourceLayers imageSubresource;
+
+ /// imageOffset selects the initial x, y, z offsets in texels of the sub-region of the source image data.
+ public VkOffset3D imageOffset;
+
+ /// imageExtent is the size in texels of the image to copy in width, height and depth.
+ public VkExtent3D imageExtent;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkMemoryToImageCopyEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkMemoryToImageCopyEXT.cs
new file mode 100644
index 00000000..6f92b6f7
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkMemoryToImageCopyEXT.cs
@@ -0,0 +1,60 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkMemoryToImageCopyEXT - Structure specifying a host memory to image copy operation -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkMemoryToImageCopyEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkMemoryToImageCopyEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// pHostPointer is the host memory address which is the source of the copy.
+ public void* pHostPointer;
+
+ ///
+ /// memoryRowLength and memoryImageHeight specify in texels a subregion of a larger two- or three-dimensional
+ /// image in host memory, and control the addressing calculations. If either of these values is zero, that aspect of
+ /// the host memory is considered to be tightly packed according to the imageExtent.
+ ///
+ public uint memoryRowLength;
+
+ ///
+ /// memoryRowLength and memoryImageHeight specify in texels a subregion of a larger two- or three-dimensional
+ /// image in host memory, and control the addressing calculations. If either of these values is zero, that aspect of
+ /// the host memory is considered to be tightly packed according to the imageExtent.
+ ///
+ public uint memoryImageHeight;
+
+ ///
+ /// imageSubresource is a VkImageSubresourceLayers used to specify the specific image subresources of the image
+ /// used for the source or destination image data.
+ ///
+ public VkImageSubresourceLayers imageSubresource;
+
+ /// imageOffset selects the initial x, y, z offsets in texels of the sub-region of the destination image data.
+ public VkOffset3D imageOffset;
+
+ /// imageExtent is the size in texels of the image to copy in width, height and depth.
+ public VkExtent3D imageExtent;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyFeaturesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyFeaturesEXT.cs
new file mode 100644
index 00000000..14cf5640
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyFeaturesEXT.cs
@@ -0,0 +1,50 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkPhysicalDeviceHostImageCopyFeaturesEXT - Structure indicating support for copies to or from images from host
+/// memory -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceHostImageCopyFeaturesEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceFeatures2,VkDeviceCreateInfo
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceFeatures2,VkDeviceCreateInfo")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceHostImageCopyFeaturesEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ ///
+ /// hostImageCopy indicates that the implementation supports copying from host memory to images using the
+ /// vkCopyMemoryToImageEXT command, copying from images to host memory using the vkCopyImageToMemoryEXT command, and
+ /// copying between images using the vkCopyImageToImageEXT command.
+ ///
+ public VkBool32 hostImageCopy;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyPropertiesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyPropertiesEXT.cs
new file mode 100644
index 00000000..2983b9d9
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkPhysicalDeviceHostImageCopyPropertiesEXT.cs
@@ -0,0 +1,79 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkPhysicalDeviceHostImageCopyPropertiesEXT - Structure enumerating image layouts supported by an implementation for
+/// host memory copies -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceHostImageCopyPropertiesEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceProperties2
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceProperties2")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceHostImageCopyPropertiesEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ ///
+ /// copySrcLayoutCount is an integer related to the number of image layouts for host copies from images available
+ /// or queried, as described below.
+ ///
+ public uint copySrcLayoutCount;
+
+ ///
+ /// pCopySrcLayouts is a pointer to an array of VkImageLayout in which supported image layouts for use with host
+ /// copy operations from images are returned.
+ ///
+ public VkImageLayout* pCopySrcLayouts;
+
+ ///
+ /// copyDstLayoutCount is an integer related to the number of image layouts for host copies to images available or
+ /// queried, as described below.
+ ///
+ public uint copyDstLayoutCount;
+
+ ///
+ /// pCopyDstLayouts is a pointer to an array of VkImageLayout in which supported image layouts for use with host
+ /// copy operations to images are returned.
+ ///
+ public VkImageLayout* pCopyDstLayouts;
+
+ ///
+ /// optimalTilingLayoutUUID is an array of VK_UUID_SIZEuint8_t values representing a universally unique identifier
+ /// for the implementation’s swizzling layout of images created with VK_IMAGE_TILING_OPTIMAL.
+ ///
+ public fixed byte optimalTilingLayoutUUID[(int)VK_UUID_SIZE];
+
+ ///
+ /// identicalMemoryTypeRequirements indicates that specifying the VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT flag in
+ /// VkImageCreateInfo::usage does not affect the memory type requirements of the image.
+ ///
+ public VkBool32 identicalMemoryTypeRequirements;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkSubresourceHostMemcpySizeEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkSubresourceHostMemcpySizeEXT.cs
new file mode 100644
index 00000000..d1324b6c
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkSubresourceHostMemcpySizeEXT.cs
@@ -0,0 +1,46 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkSubresourceHostMemcpySizeEXT - Memory size needed to copy to or from an image on the host with
+/// VK_HOST_IMAGE_COPY_MEMCPY_EXT -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkSubresourceHostMemcpySizeEXT.html
+///
+///
+///
+/// -
+/// structextendsVkSubresourceLayout2EXT
+///
+/// -
+/// returnedonlytrue
+///
+///
+///
+[VkStructExtends("VkSubresourceLayout2EXT")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkSubresourceHostMemcpySizeEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// size is the size in bytes of the image subresource.
+ public VkDeviceSize size;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_compression_control/VkSubresourceLayout2EXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkSubresourceLayout2EXT.cs
similarity index 100%
rename from src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_compression_control/VkSubresourceLayout2EXT.cs
rename to src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_host_image_copy/VkSubresourceLayout2EXT.cs
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkBindShaderGroupIndirectCommandNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkBindShaderGroupIndirectCommandNV.cs
index 9bd5c01a..94719f38 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkBindShaderGroupIndirectCommandNV.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkBindShaderGroupIndirectCommandNV.cs
@@ -24,12 +24,6 @@ namespace Exomia.Vulkan.Api.Core;
[StructLayout(LayoutKind.Sequential)]
public struct VkBindShaderGroupIndirectCommandNV
{
- ///
- /// groupIndex
- ///
- /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkBindShaderGroupIndirectCommandNV
- ///
- ///
+ /// groupIndex specifies which shader group of the current bound graphics pipeline is used.
public uint groupIndex;
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsNV.cs
index 5c195134..27b40f23 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsNV.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsNV.cs
@@ -48,6 +48,8 @@ public enum VkIndirectCommandsLayoutUsageFlagBitsNV
///
/// VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVspecifies that the processing of sequences can
/// happen at an implementation-dependent order, which is not: guaranteed to be coherent using the same input data.
+ /// This flag is ignored when the pipelineBindPoint is VK_PIPELINE_BIND_POINT_COMPUTE as it is implied that the
+ /// dispatch sequence is always unordered.
///
VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x4
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsTokenTypeNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsTokenTypeNV.cs
index 3bcbb4c8..82d3178e 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsTokenTypeNV.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands/VkIndirectCommandsTokenTypeNV.cs
@@ -98,5 +98,23 @@ public enum VkIndirectCommandsTokenTypeNV
///
///
///
- VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV = 1000328000,
+
+ ///
+ ///
+ /// -
+ /// Equivalent commandvkCmdBindPipeline
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NV = 1000428003,
+
+ ///
+ ///
+ /// -
+ /// Equivalent commandvkCmdDispatchIndirect
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NV = 1000428004
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkBindPipelineIndirectCommandNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkBindPipelineIndirectCommandNV.cs
new file mode 100644
index 00000000..db8350a7
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkBindPipelineIndirectCommandNV.cs
@@ -0,0 +1,31 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkBindPipelineIndirectCommandNV - Structure specifying input data for the compute pipeline dispatch token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindPipelineIndirectCommandNV.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkBindPipelineIndirectCommandNV
+{
+ ///
+ /// pipelineAddress specifies the pipeline address of the compute pipeline that will be used in device generated
+ /// rendering.
+ ///
+ public VkDeviceAddress pipelineAddress;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkComputePipelineIndirectBufferInfoNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkComputePipelineIndirectBufferInfoNV.cs
new file mode 100644
index 00000000..8da57803
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkComputePipelineIndirectBufferInfoNV.cs
@@ -0,0 +1,73 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkComputePipelineIndirectBufferInfoNV - Structure describing the device address where pipeline -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkComputePipelineIndirectBufferInfoNV.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkComputePipelineIndirectBufferInfoNV
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV;
+
+ ///
+ /// sType
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkComputePipelineIndirectBufferInfoNV
+ ///
+ ///
+ public VkStructureType sType;
+
+ ///
+ /// pNext
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkComputePipelineIndirectBufferInfoNV
+ ///
+ ///
+ public void* pNext;
+
+ ///
+ /// deviceAddress
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkComputePipelineIndirectBufferInfoNV
+ ///
+ ///
+ public VkDeviceAddress deviceAddress;
+
+ ///
+ /// size
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkComputePipelineIndirectBufferInfoNV
+ ///
+ ///
+ public VkDeviceSize size;
+
+ ///
+ /// pipelineDeviceAddressCaptureReplay
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkComputePipelineIndirectBufferInfoNV
+ ///
+ ///
+ public VkDeviceAddress pipelineDeviceAddressCaptureReplay;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkNvDeviceGeneratedCommandsCompute.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkNvDeviceGeneratedCommandsCompute.cs
new file mode 100644
index 00000000..be81e034
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkNvDeviceGeneratedCommandsCompute.cs
@@ -0,0 +1,131 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+global using static Exomia.Vulkan.Api.Core.VkNvDeviceGeneratedCommandsCompute;
+
+#pragma warning disable CA2211 // Non-constant fields should not be visible
+#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VK_NV_device_generated_commands_compute - device extension (nr. 429) - author 'NV' [platform '' | contact 'Vikram
+/// Kushwaha @vkushwaha-nv']
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_NV_device_generated_commands_compute.html
+///
+///
+[VkDepends("VK_NV_device_generated_commands")]
+public static unsafe class VkNvDeviceGeneratedCommandsCompute
+{
+ /// The spec version.
+ public const uint VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_SPEC_VERSION = 2;
+
+ /// The extension name.
+ public const string VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME = "VK_NV_device_generated_commands_compute";
+
+ ///
+ /// An UTF8 null terminated version of
+ /// represented by an UTF16 string.
+ ///
+ ///
+ /// Example usage:
+ ///
+ /// fixed(char* ptr = VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME_UTF8_NT) {
+ /// sbyte* utf8NtPtr = (sbyte*)ptr; // utf8NtPtr - can now be passed and used directly as a utf8_nt string for
+ /// unmanaged code.
+ /// }
+ ///
+ public const string VK_NV_DEVICE_GENERATED_COMMANDS_COMPUTE_EXTENSION_NAME_UTF8_NT =
+ "\u4b56\u4e5f\u5f56\u4544\u4956\u4543\u475f\u4e45\u5245\u5441\u4445\u435f\u4d4f\u414d\u444e\u5f53\u4f43\u504d\u5455\u5f45\u5845\u4554\u534e\u4f49\u5f4e\u414e\u454d\u0000";
+
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkComputePipelineCreateInfo* /*pCreateInfo*/,
+ VkMemoryRequirements2* /*pMemoryRequirements*/,
+ void> vkGetPipelineIndirectMemoryRequirementsNV = null;
+
+ ///
+ /// vkCmdUpdatePipelineIndirectBufferNV - update the indirect compute pipeline metadata -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdUpdatePipelineIndirectBufferNV.html
+ ///
+ ///
+ /// commandBuffer is the command buffer into which the command will be recorded.
+ ///
+ /// pipelineBindPoint is a VkPipelineBindPoint value specifying the type of pipeline whose
+ /// metadata will be saved.
+ ///
+ /// pipeline is the pipeline whose metadata will be saved.
+ public static readonly delegate*<
+ VkCommandBuffer /*commandBuffer*/,
+ VkPipelineBindPoint /*pipelineBindPoint*/,
+ VkPipeline /*pipeline*/,
+ void> vkCmdUpdatePipelineIndirectBufferNV = null;
+
+ ///
+ /// vkGetPipelineIndirectDeviceAddressNV - Get pipeline -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPipelineIndirectDeviceAddressNV.html
+ ///
+ ///
+ /// VUID-vkGetPipelineIndirectDeviceAddressNV-device-parameter device must be a valid VkDevice handle
+ ///
+ /// VUID-vkGetPipelineIndirectDeviceAddressNV-pInfo-parameter pInfo must be a valid pointer to a valid
+ /// VkPipelineIndirectDeviceAddressInfoNV structure
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkPipelineIndirectDeviceAddressInfoNV* /*pInfo*/,
+ VkDeviceAddress> vkGetPipelineIndirectDeviceAddressNV = null;
+
+ /// Loads all function pointer based on the device for this extension. (see remarks!)
+ /// The device that the function pointers will be compatible with.
+ ///
+ /// This load method makes the following function pointers available:
+ ///
+ /// -
+ /// vkGetPipelineIndirectMemoryRequirementsNV
+ ///
+ /// -
+ /// vkCmdUpdatePipelineIndirectBufferNV
+ ///
+ /// -
+ /// vkGetPipelineIndirectDeviceAddressNV
+ ///
+ ///
+ ///
+ public static void Load(VkDevice device)
+ {
+ fixed (delegate** pvkGetPipelineIndirectMemoryRequirementsNV = &vkGetPipelineIndirectMemoryRequirementsNV)
+ {
+ *pvkGetPipelineIndirectMemoryRequirementsNV = (delegate*)GetVkFunction(
+ device, "\u6b76\u6547\u5074\u7069\u6c65\u6e69\u4965\u646e\u7269\u6365\u4d74\u6d65\u726f\u5279\u7165\u6975\u6572\u656d\u746e\u4e73\u0056");
+ }
+
+ fixed (delegate** pvkCmdUpdatePipelineIndirectBufferNV = &vkCmdUpdatePipelineIndirectBufferNV)
+ {
+ *pvkCmdUpdatePipelineIndirectBufferNV = (delegate*)GetVkFunction(
+ device, "\u6b76\u6d43\u5564\u6470\u7461\u5065\u7069\u6c65\u6e69\u4965\u646e\u7269\u6365\u4274\u6675\u6566\u4e72\u0056");
+ }
+
+ fixed (delegate** pvkGetPipelineIndirectDeviceAddressNV = &vkGetPipelineIndirectDeviceAddressNV)
+ {
+ *pvkGetPipelineIndirectDeviceAddressNV = (delegate*)GetVkFunction(
+ device, "\u6b76\u6547\u5074\u7069\u6c65\u6e69\u4965\u646e\u7269\u6365\u4474\u7665\u6369\u4165\u6464\u6572\u7373\u564e\u0000");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.cs
new file mode 100644
index 00000000..98c76ba9
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.cs
@@ -0,0 +1,61 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV - Structure describing the device-generated compute
+/// features that can: be supported by an implementation -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceFeatures2,VkDeviceCreateInfo
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceFeatures2,VkDeviceCreateInfo")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceDeviceGeneratedCommandsComputeFeaturesNV
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV;
+
+ /// sType is a VkStructureType value identifying this structure.
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ ///
+ /// deviceGeneratedComputeindicates whether the implementation supports functionality to generate dispatch
+ /// commands and push constants for the compute pipeline on the device. See Device-Generated Commands.
+ ///
+ public VkBool32 deviceGeneratedCompute;
+
+ ///
+ /// deviceGeneratedComputePipelines indicates whether the implementation supports functionality to generate
+ /// commands to bind compute pipelines on the device. See Device-Generated Commands.
+ ///
+ public VkBool32 deviceGeneratedComputePipelines;
+
+ ///
+ /// deviceGeneratedComputeCaptureReplay indicates whether the implementation supports functionality to capture
+ /// compute pipeline address and reuse later for replay in Device-Generated Commands.
+ ///
+ public VkBool32 deviceGeneratedComputeCaptureReplay;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPipelineIndirectDeviceAddressInfoNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPipelineIndirectDeviceAddressInfoNV.cs
new file mode 100644
index 00000000..2a1e27f1
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_device_generated_commands_compute/VkPipelineIndirectDeviceAddressInfoNV.cs
@@ -0,0 +1,64 @@
+#region License
+
+// Copyright (c) 2018-2023, exomia
+// All rights reserved.
+//
+// This source code is licensed under the BSD-style license found in the
+// LICENSE file in the root directory of this source tree.
+
+#endregion
+
+// ReSharper disable UnusedMember.Global
+// ReSharper disable InconsistentNaming
+// ReSharper disable once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkPipelineIndirectDeviceAddressInfoNV - Structure specifying the pipeline to query an address for -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPipelineIndirectDeviceAddressInfoNV.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPipelineIndirectDeviceAddressInfoNV
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV;
+
+ ///
+ /// sType
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkPipelineIndirectDeviceAddressInfoNV
+ ///
+ ///
+ public VkStructureType sType;
+
+ ///
+ /// pNext
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkPipelineIndirectDeviceAddressInfoNV
+ ///
+ ///
+ public void* pNext;
+
+ ///
+ /// pipelineBindPoint
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkPipelineIndirectDeviceAddressInfoNV
+ ///
+ ///
+ public VkPipelineBindPoint pipelineBindPoint;
+
+ ///
+ /// pipeline
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkPipelineIndirectDeviceAddressInfoNV
+ ///
+ ///
+ public VkPipeline pipeline;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Structs/VkGraphicsPipelineCreateInfo.cs b/src/Exomia.Vulkan.Api.Core/Structs/VkGraphicsPipelineCreateInfo.cs
index f5abe329..0a2c730a 100644
--- a/src/Exomia.Vulkan.Api.Core/Structs/VkGraphicsPipelineCreateInfo.cs
+++ b/src/Exomia.Vulkan.Api.Core/Structs/VkGraphicsPipelineCreateInfo.cs
@@ -43,51 +43,70 @@ public unsafe struct VkGraphicsPipelineCreateInfo
///
/// pVertexInputState is a pointer to a VkPipelineVertexInputStateCreateInfo structure. It is ignored if the
- /// pipeline includes a mesh shader stage. It is ignored if the pipeline is created with the
+ /// pipeline includes a mesh shader stage. It can be NULL if the pipeline is created with the
/// VK_DYNAMIC_STATE_VERTEX_INPUT_EXT dynamic state set.
///
public VkPipelineVertexInputStateCreateInfo* pVertexInputState;
///
/// pInputAssemblyState is a pointer to a VkPipelineInputAssemblyStateCreateInfo structure which determines input
- /// assembly behavior for vertex shading, as described in Drawing Commands. It is ignored if the pipeline includes a
- /// mesh shader stage.
+ /// assembly behavior for vertex shading, as described in Drawing Commands. If the VK_EXT_extended_dynamic_state3
+ /// extension is enabled, it can be NULL if the pipeline is created with both
+ /// VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, and VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY dynamic states set and
+ /// dynamicPrimitiveTopologyUnrestricted is VK_TRUE. It is ignored if the pipeline includes a mesh shader stage.
///
public VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState;
///
/// pTessellationState is a pointer to a VkPipelineTessellationStateCreateInfo structure defining tessellation
- /// state used by tessellation shaders.
+ /// state used by tessellation shaders. It can be NULL if the pipeline is created with the
+ /// VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT dynamic state set.
///
public VkPipelineTessellationStateCreateInfo* pTessellationState;
///
/// pViewportState is a pointer to a VkPipelineViewportStateCreateInfo structure defining viewport state used when
- /// rasterization is enabled.
+ /// rasterization is enabled. If the VK_EXT_extended_dynamic_state3 extension is enabled, it can be NULL if the
+ /// pipeline is created with both VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT, and VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT dynamic
+ /// states set.
///
public VkPipelineViewportStateCreateInfo* pViewportState;
///
/// pRasterizationState is a pointer to a VkPipelineRasterizationStateCreateInfo structure defining rasterization
- /// state.
+ /// state. If the VK_EXT_extended_dynamic_state3 extension is enabled, it can be NULL if the pipeline is created with
+ /// all of VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT, VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE,
+ /// VK_DYNAMIC_STATE_POLYGON_MODE_EXT, VK_DYNAMIC_STATE_CULL_MODE, VK_DYNAMIC_STATE_FRONT_FACE,
+ /// VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, VK_DYNAMIC_STATE_DEPTH_BIAS, and VK_DYNAMIC_STATE_LINE_WIDTHdynamic states set.
///
public VkPipelineRasterizationStateCreateInfo* pRasterizationState;
///
/// pMultisampleState is a pointer to a VkPipelineMultisampleStateCreateInfo structure defining multisample state
- /// used when rasterization is enabled.
+ /// used when rasterization is enabled. If the VK_EXT_extended_dynamic_state3 extension is enabled, it can be NULL if
+ /// the pipeline is created with all of VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT, VK_DYNAMIC_STATE_SAMPLE_MASK_EXT,
+ /// VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT, and VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT dynamic states set, in
+ /// which case VkPipelineMultisampleStateCreateInfo::sampleShadingEnable is assumed to be VK_FALSE.
///
public VkPipelineMultisampleStateCreateInfo* pMultisampleState;
///
/// pDepthStencilState is a pointer to a VkPipelineDepthStencilStateCreateInfo structure defining depth/stencil
- /// state used when rasterization is enabled for depth or stencil attachments accessed during rendering.
+ /// state used when rasterization is enabled for depth or stencil attachments accessed during rendering. If the
+ /// VK_EXT_extended_dynamic_state3 extension is enabled, it can be NULL if the pipeline is created with all of
+ /// VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+ /// VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE, VK_DYNAMIC_STATE_STENCIL_OP, and
+ /// VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic states set.
///
public VkPipelineDepthStencilStateCreateInfo* pDepthStencilState;
///
/// pColorBlendState is a pointer to a VkPipelineColorBlendStateCreateInfo structure defining color blend state
- /// used when rasterization is enabled for any color attachments accessed during rendering.
+ /// used when rasterization is enabled for any color attachments accessed during rendering. If the
+ /// VK_EXT_extended_dynamic_state3 extension is enabled, it can be NULL if the pipeline is created with all of
+ /// VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT, VK_DYNAMIC_STATE_LOGIC_OP_EXT, VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT,
+ /// VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and
+ /// VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic states set.
///
public VkPipelineColorBlendStateCreateInfo* pColorBlendState;
diff --git a/src/Exomia.Vulkan.Api.Core/Structs/VkPhysicalDeviceLimits.cs b/src/Exomia.Vulkan.Api.Core/Structs/VkPhysicalDeviceLimits.cs
index 3a1bcdc4..abb9ac5a 100644
--- a/src/Exomia.Vulkan.Api.Core/Structs/VkPhysicalDeviceLimits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Structs/VkPhysicalDeviceLimits.cs
@@ -795,18 +795,20 @@ public struct VkPhysicalDeviceLimits
///
/// optimalBufferCopyOffsetAlignment is the optimal buffer offset alignment in bytes for vkCmdCopyBufferToImage2,
- /// vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer2, and vkCmdCopyImageToBuffer. The per texel alignment requirements
- /// are enforced, but applications should use the optimal alignment for optimal performance and power use. The value
- /// must be a power of two.
+ /// vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer2, and vkCmdCopyImageToBuffer. This value is also the optimal host
+ /// memory offset alignment in bytes for vkCopyMemoryToImageEXT and vkCopyImageToMemoryEXT. The per texel alignment
+ /// requirements are enforced, but applications should use the optimal alignment for optimal performance and power use.
+ /// The value must be a power of two.
///
public VkDeviceSize optimalBufferCopyOffsetAlignment;
///
/// optimalBufferCopyRowPitchAlignment is the optimal buffer row pitch alignment in bytes for
- /// vkCmdCopyBufferToImage2, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer2, and vkCmdCopyImageToBuffer. Row pitch is
- /// the number of bytes between texels with the same X coordinate in adjacent rows (Y coordinates differ by one). The
- /// per texel alignment requirements are enforced, but applications should use the optimal alignment for optimal
- /// performance and power use. The value must be a power of two.
+ /// vkCmdCopyBufferToImage2, vkCmdCopyBufferToImage, vkCmdCopyImageToBuffer2, and vkCmdCopyImageToBuffer. This value is
+ /// also the optimal host memory row pitch alignment in bytes for vkCopyMemoryToImageEXT and vkCopyImageToMemoryEXT.
+ /// Row pitch is the number of bytes between texels with the same X coordinate in adjacent rows (Y coordinates differ
+ /// by one). The per texel alignment requirements are enforced, but applications should use the optimal alignment for
+ /// optimal performance and power use. The value must be a power of two.
///
public VkDeviceSize optimalBufferCopyRowPitchAlignment;