diff --git a/.version b/.version
index fe4fd42d..3969b469 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-1.3.295
\ No newline at end of file
+1.3.296
\ No newline at end of file
diff --git a/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.bitmasks.cs b/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.bitmasks.cs
new file mode 100644
index 00000000..a09c6403
--- /dev/null
+++ b/analyzer/Exomia.Vulkan.Api.Core.SourceGenerator/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.bitmasks.cs
@@ -0,0 +1,2 @@
+global using VkIndirectCommandsLayoutUsageFlagsEXT = Exomia.Vulkan.Api.Core.VkIndirectCommandsLayoutUsageFlagBitsEXT;
+global using VkIndirectCommandsInputModeFlagsEXT = Exomia.Vulkan.Api.Core.VkIndirectCommandsInputModeFlagBitsEXT;
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits.cs
index 6cd6c60a..1ad33ae3 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits.cs
@@ -401,5 +401,25 @@ public enum VkAccessFlagBits
VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
/// VK_ACCESS_NONE specifies no accesses.
- VK_ACCESS_NONE_KHR = VK_ACCESS_NONE
+ VK_ACCESS_NONE_KHR = VK_ACCESS_NONE,
+
+ ///
+ /// VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from buffer inputs to
+ ///
+ /// vkCmdPreprocessGeneratedCommandsNV
+ ///
+ /// . Such access occurs in the VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+ ///
+ VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV,
+
+ ///
+ /// VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to the target command buffer preprocess outputs in
+ ///
+ /// vkCmdPreprocessGeneratedCommandsNV
+ ///
+ /// . Such access occurs in the VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+ ///
+ VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits2.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits2.cs
index 544e803b..e57c9b8d 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits2.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkAccessFlagBits2.cs
@@ -746,6 +746,22 @@ public enum VkAccessFlagBits2 : ulong
///
VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
+ ///
+ /// VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV specifies reads from buffer inputs to
+ ///
+ /// vkCmdPreprocessGeneratedCommandsNV
+ ///
+ /// . Such access occurs in the VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+ ///
+ VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_EXT = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV,
+
+ ///
+ /// VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV specifies writes to the target command buffer preprocess outputs.
+ /// Such access occurs in the VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV pipeline stage.
+ ///
+ VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_EXT = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV,
+
///
/// VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHRspecifies read access to a fragment shading rate
/// attachment during rasterization. Such access occurs in the
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkBufferUsageFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkBufferUsageFlagBits.cs
index f4ffcdcd..0517e988 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkBufferUsageFlagBits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkBufferUsageFlagBits.cs
@@ -99,7 +99,9 @@ public enum VkBufferUsageFlagBits
/// , or
/// vkCmdDispatchIndirect
/// . It is also suitable for passing as the buffer member of VkIndirectCommandsStreamNV, or sequencesCountBuffer or
- /// sequencesIndexBuffer or preprocessedBuffer member of VkGeneratedCommandsInfoNV
+ /// sequencesIndexBuffer or preprocessedBuffer member of VkGeneratedCommandsInfoNV. It is also suitable for passing as
+ /// the underlying buffer of either the preprocessAddress or sequenceCountAddress members of
+ /// VkGeneratedCommandsInfoEXT.
///
VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x100,
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkDynamicState.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkDynamicState.cs
index f4733805..ac10f226 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkDynamicState.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkDynamicState.cs
@@ -1028,6 +1028,18 @@ public enum VkDynamicState
///
VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = 1000259000,
+ ///
+ /// VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT specifies that the depthClampMode and pDepthClampRange state in
+ ///
+ /// VkPipelineViewportDepthClampControlCreateInfoEXT
+ ///
+ /// will be ignored and must be set dynamically with
+ /// vkCmdSetDepthClampRangeEXT
+ /// before any draw call.
+ ///
+ VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT = 1000582000,
+
///
/// VK_DYNAMIC_STATE_LINE_STIPPLE_EXT
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkDynamicState
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkObjectType.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkObjectType.cs
index 6e83f692..a723488d 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkObjectType.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkObjectType.cs
@@ -472,6 +472,24 @@ public enum VkObjectType
///
VK_OBJECT_TYPE_PIPELINE_BINARY_KHR = 1000483000,
+ ///
+ ///
+ /// -
+ /// Vulkan Handle TypeVkIndirectCommandsLayoutEXT
+ ///
+ ///
+ ///
+ VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT = 1000572000,
+
+ ///
+ ///
+ /// -
+ /// Vulkan Handle TypeVkIndirectExecutionSetEXT
+ ///
+ ///
+ ///
+ VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT = 1000572001,
+
///
///
/// -
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits.cs
index 1ba02de6..9eb368bd 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits.cs
@@ -36,6 +36,11 @@ public enum VkPipelineStageFlagBits
/// href="https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteGeneratedCommandsNV.html">
/// vkCmdExecuteGeneratedCommandsNV
///
+ /// . This stage also includes reading commands written by
+ ///
+ /// vkCmdExecuteGeneratedCommandsEXT
+ ///
/// .
///
VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x2,
@@ -360,5 +365,16 @@ public enum VkPipelineStageFlagBits
VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT,
/// VK_PIPELINE_STAGE_NONE specifies no stages of execution.
- VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE
+ VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE,
+
+ ///
+ /// VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV specifies the stage of the pipeline where device-side
+ /// preprocessing for generated commands via
+ ///
+ /// vkCmdPreprocessGeneratedCommandsNV
+ ///
+ /// is handled.
+ ///
+ VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits2.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits2.cs
index defea8cd..9831978a 100644
--- a/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits2.cs
+++ b/src/Exomia.Vulkan.Api.Core/Enums/VkPipelineStageFlagBits2.cs
@@ -32,12 +32,17 @@ public enum VkPipelineStageFlagBits2 : ulong
VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x1,
///
- /// VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT specifies the stage of the pipeline where indirect command parameters
- /// are consumed. This stage also includes reading commands written by
+ /// VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT specifies the stage of the pipeline where indirect command parameters are
+ /// consumed. This stage also includes reading commands written by
///
/// vkCmdPreprocessGeneratedCommandsNV
///
+ /// . This stage also includes reading commands written by
+ ///
+ /// vkCmdPreprocessGeneratedCommandsEXT
+ ///
/// .
///
VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x2,
@@ -371,12 +376,17 @@ public enum VkPipelineStageFlagBits2 : ulong
VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT,
///
- /// VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT specifies the stage of the pipeline where indirect command parameters
- /// are consumed. This stage also includes reading commands written by
+ /// VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT specifies the stage of the pipeline where indirect command parameters are
+ /// consumed. This stage also includes reading commands written by
///
/// vkCmdPreprocessGeneratedCommandsNV
///
+ /// . This stage also includes reading commands written by
+ ///
+ /// vkCmdPreprocessGeneratedCommandsEXT
+ ///
/// .
///
VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
@@ -582,6 +592,17 @@ public enum VkPipelineStageFlagBits2 : ulong
///
VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT,
+ ///
+ /// VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV specifies the stage of the pipeline where device-side generation
+ /// of commands via
+ ///
+ /// vkCmdPreprocessGeneratedCommandsNV
+ ///
+ /// is handled.
+ ///
+ VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_EXT = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV,
+
///
/// VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR specifies the stage of the pipeline where the
///
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV = 1000568000,
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT = 1000572000,
+
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT = 1000572001,
+
+ ///
+ /// VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT = 1000572002,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_INFO_EXT = 1000572003,
+
+ ///
+ /// VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_EXT = 1000572004,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_EXT = 1000572006,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_EXT = 1000572007,
+
+ ///
+ /// VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_EXT = 1000572008,
+
+ ///
+ /// VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_EXT = 1000572009,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_INFO_EXT = 1000572010,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_INFO_EXT = 1000572011,
+
+ ///
+ /// VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT = 1000572012,
+
+ ///
+ /// VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT = 1000572013,
+
+ ///
+ /// VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT = 1000572014,
+
///
/// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
@@ -5545,6 +5629,18 @@ public enum VkStructureType
///
VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA = 1000575002,
+ ///
+ /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT = 1000582000,
+
+ ///
+ /// VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType
+ ///
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001,
+
///
/// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
/// 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_depth_clamp_control/VkDepthClampModeEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkDepthClampModeEXT.cs
new file mode 100644
index 00000000..54f628a6
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkDepthClampModeEXT.cs
@@ -0,0 +1,36 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkDepthClampModeEXT - Modes that determine the depth clamp range -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDepthClampModeEXT.html
+///
+public enum VkDepthClampModeEXT
+{
+ ///
+ /// VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT specifies that the depth clamp range follows the viewport depth range.
+ /// The depth clamp range of each viewport will implicitly be set to zmin = min(n,f) and zmax = max(n,f), where n and f
+ /// are the minDepth and maxDepth depth range values of the viewport.
+ ///
+ VK_DEPTH_CLAMP_MODE_VIEWPORT_RANGE_EXT = 0,
+
+ ///
+ /// VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT specifies that a single user-defined depth clamp range will be used
+ /// for all viewports. The user-defined depth clamp range is defined by the minDepthClampand maxDepthClamp members of
+ /// VkDepthClampRangeEXT
+ /// .
+ ///
+ VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT = 1
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkDepthClampRangeEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkDepthClampRangeEXT.cs
new file mode 100644
index 00000000..a73cceb6
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkDepthClampRangeEXT.cs
@@ -0,0 +1,28 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkDepthClampRangeEXT - Structure specifying a depth clamp range -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDepthClampRangeEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkDepthClampRangeEXT
+{
+ /// minDepthClamp sets zmin in the depth clamp range of the viewport.
+ public float minDepthClamp;
+
+ /// maxDepthClamp sets zmax in the depth clamp range of the viewport.
+ public float maxDepthClamp;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkExtDepthClampControl.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkExtDepthClampControl.cs
new file mode 100644
index 00000000..d11aec69
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkExtDepthClampControl.cs
@@ -0,0 +1,85 @@
+#region License
+
+// Copyright (c) 2018-2024, 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.VkExtDepthClampControl;
+
+#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_depth_clamp_control - device extension (nr. 583) - author 'EXT' [platform '' | contact 'Jules Blok @jules']
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_depth_clamp_control.html
+///
+[VkDepends("VK_KHR_get_physical_device_properties2,VK_VERSION_1_1")]
+[VkDeviceExt]
+public static unsafe class VkExtDepthClampControl
+{
+ /// The spec version.
+ public const uint VK_EXT_DEPTH_CLAMP_CONTROL_SPEC_VERSION = 1;
+
+ /// The extension name.
+ public const string VK_EXT_DEPTH_CLAMP_CONTROL_EXTENSION_NAME = "VK_EXT_depth_clamp_control";
+
+ ///
+ /// An UTF8 null terminated version of represented by an
+ /// UTF16 string.
+ ///
+ ///
+ /// Example usage:
+ ///
+ /// fixed(char* ptr = VK_EXT_DEPTH_CLAMP_CONTROL_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_DEPTH_CLAMP_CONTROL_EXTENSION_NAME_UTF8_NT =
+ "\u4b56\u455f\u5458\u445f\u5045\u4854\u435f\u414c\u504d\u435f\u4e4f\u5254\u4c4f\u455f\u5458\u4e45\u4953\u4e4f\u4e5f\u4d41\u0045";
+
+ ///
+ /// vkCmdSetDepthClampRangeEXT - Set the viewport depth clamp range dynamically for a command buffer -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClampRangeEXT.html
+ ///
+ /// commandBuffer is the command buffer into which the command will be recorded.
+ /// depthClampMode determines how the clamp range is determined for each viewport.
+ ///
+ /// pDepthClampRange sets the depth clamp range for all viewports if depthClampMode is set
+ /// to VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT.
+ ///
+ public static readonly delegate*<
+ VkCommandBuffer /*commandBuffer*/,
+ VkDepthClampModeEXT /*depthClampMode*/,
+ VkDepthClampRangeEXT* /*pDepthClampRange*/,
+ void> vkCmdSetDepthClampRangeEXT = 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:
+ ///
+ /// -
+ /// vkCmdSetDepthClampRangeEXT
+ ///
+ ///
+ ///
+ public static void Load(VkDevice device)
+ {
+ fixed (delegate** pvkCmdSetDepthClampRangeEXT = &vkCmdSetDepthClampRangeEXT)
+ {
+ *pvkCmdSetDepthClampRangeEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6d43\u5364\u7465\u6544\u7470\u4368\u616c\u706d\u6152\u676e\u4565\u5458\u0000");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPhysicalDeviceDepthClampControlFeaturesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPhysicalDeviceDepthClampControlFeaturesEXT.cs
new file mode 100644
index 00000000..019fe123
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPhysicalDeviceDepthClampControlFeaturesEXT.cs
@@ -0,0 +1,49 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkPhysicalDeviceDepthClampControlFeaturesEXT - Structure describing additional depth clamp control supported by an
+/// implementation -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDepthClampControlFeaturesEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceFeatures2,VkDeviceCreateInfo
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceFeatures2,VkDeviceCreateInfo")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceDepthClampControlFeaturesEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_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;
+
+ ///
+ /// depthClampControl indicates that the implementation supports setting
+ /// VkPipelineViewportDepthClampControlCreateInfoEXT::depthClampModeto VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT.
+ ///
+ public VkBool32 depthClampControl;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPipelineViewportDepthClampControlCreateInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPipelineViewportDepthClampControlCreateInfoEXT.cs
new file mode 100644
index 00000000..06f89d8d
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_depth_clamp_control/VkPipelineViewportDepthClampControlCreateInfoEXT.cs
@@ -0,0 +1,52 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkPipelineViewportDepthClampControlCreateInfoEXT - Structure specifying parameters of a newly created pipeline
+/// depth clamp control state -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPipelineViewportDepthClampControlCreateInfoEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPipelineViewportStateCreateInfo
+///
+///
+///
+[VkStructExtends("VkPipelineViewportStateCreateInfo")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPipelineViewportDepthClampControlCreateInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_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;
+
+ /// depthClampMode determines how the clamp range is determined for each viewport.
+ public VkDepthClampModeEXT depthClampMode;
+
+ ///
+ /// pDepthClampRange sets the depth clamp range for all viewports if depthClampMode is set to
+ /// VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT.
+ ///
+ public VkDepthClampRangeEXT* pDepthClampRange;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindIndexBufferIndirectCommandEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindIndexBufferIndirectCommandEXT.cs
new file mode 100644
index 00000000..3332a5c7
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindIndexBufferIndirectCommandEXT.cs
@@ -0,0 +1,34 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkBindIndexBufferIndirectCommandEXT - Structure specifying input data for a single index buffer command token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindIndexBufferIndirectCommandEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkBindIndexBufferIndirectCommandEXT
+{
+ /// bufferAddress specifies a physical address of the VkBufferused as index buffer.
+ public VkDeviceAddress bufferAddress;
+
+ /// size is the byte size range which is available for this operation from the provided address.
+ public uint size;
+
+ /// indexType is a VkIndexType value specifying how indices are treated.
+ public VkIndexType indexType;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindVertexBufferIndirectCommandEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindVertexBufferIndirectCommandEXT.cs
new file mode 100644
index 00000000..1c1cbe16
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkBindVertexBufferIndirectCommandEXT.cs
@@ -0,0 +1,34 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkBindVertexBufferIndirectCommandEXT - Structure specifying input data for a single vertex buffer command token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkBindVertexBufferIndirectCommandEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkBindVertexBufferIndirectCommandEXT
+{
+ /// bufferAddress specifies a physical address of the VkBufferused as vertex input binding.
+ public VkDeviceAddress bufferAddress;
+
+ /// size is the byte size range which is available for this operation from the provided address.
+ public uint size;
+
+ /// stride is the byte size stride for this vertex input binding as in VkVertexInputBindingDescription::stride.
+ public uint stride;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkDrawIndirectCountIndirectCommandEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkDrawIndirectCountIndirectCommandEXT.cs
new file mode 100644
index 00000000..4c21f34f
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkDrawIndirectCountIndirectCommandEXT.cs
@@ -0,0 +1,34 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkDrawIndirectCountIndirectCommandEXT - Structure specifying input data for a single draw-type command token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDrawIndirectCountIndirectCommandEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkDrawIndirectCountIndirectCommandEXT
+{
+ /// bufferAddress specifies a physical address of the VkBufferused for draw commands.
+ public VkDeviceAddress bufferAddress;
+
+ /// stride is the byte size stride for the command arguments
+ public uint stride;
+
+ /// commandCount is the number of commands to execute
+ public uint commandCount;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.cs
new file mode 100644
index 00000000..86ba1b85
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkExtDeviceGeneratedCommands.cs
@@ -0,0 +1,357 @@
+#region License
+
+// Copyright (c) 2018-2024, 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.VkExtDeviceGeneratedCommands;
+
+#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_device_generated_commands - device extension (nr. 573) - author 'EXT' [platform '' | contact 'Mike
+/// Blumenkrantz @zmike']
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_device_generated_commands.html
+///
+///
+[VkDepends("VK_KHR_buffer_device_address+VK_KHR_maintenance5")]
+[VkDeviceExt]
+public static unsafe class VkExtDeviceGeneratedCommands
+{
+ /// The spec version.
+ public const uint VK_EXT_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 1;
+
+ /// The extension name.
+ public const string VK_EXT_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_EXT_device_generated_commands";
+
+ ///
+ /// An UTF8 null terminated version of represented
+ /// by an UTF16 string.
+ ///
+ ///
+ /// Example usage:
+ ///
+ /// fixed(char* ptr = VK_EXT_DEVICE_GENERATED_COMMANDS_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_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME_UTF8_NT =
+ "\u4b56\u455f\u5458\u445f\u5645\u4349\u5f45\u4547\u454e\u4152\u4554\u5f44\u4f43\u4d4d\u4e41\u5344\u455f\u5458\u4e45\u4953\u4e4f\u4e5f\u4d41\u0045";
+
+ ///
+ /// vkGetGeneratedCommandsMemoryRequirementsEXT - Retrieve the buffer allocation requirements for generated commands -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetGeneratedCommandsMemoryRequirementsEXT.html
+ ///
+ ///
+ /// device is the logical device that owns the buffer.
+ ///
+ /// pInfo is a pointer to a VkGeneratedCommandsMemoryRequirementsInfoEXT structure containing
+ /// parameters required for the memory requirements query.
+ ///
+ ///
+ /// pMemoryRequirements is a pointer to a VkMemoryRequirements2structure in which the
+ /// memory requirements of the buffer object are returned.
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkGeneratedCommandsMemoryRequirementsInfoEXT* /*pInfo*/,
+ VkMemoryRequirements2* /*pMemoryRequirements*/,
+ void> vkGetGeneratedCommandsMemoryRequirementsEXT = null;
+
+ ///
+ /// vkCmdPreprocessGeneratedCommandsEXT - Performs preprocessing for generated commands -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdPreprocessGeneratedCommandsEXT.html
+ ///
+ ///
+ /// commandBuffer is the command buffer which does the preprocessing.
+ ///
+ /// pGeneratedCommandsInfo is a pointer to a VkGeneratedCommandsInfoEXT structure
+ /// containing parameters affecting the preprocessing step.
+ ///
+ ///
+ /// stateCommandBuffer is a command buffer from which to snapshot current states affecting
+ /// the preprocessing step. When a graphics command action token is used, graphics state is snapshotted. When a compute
+ /// action command token is used, compute state is snapshotted. When a ray tracing action command token is used, ray
+ /// tracing state is snapshotted. It can be deleted at any time after this command has been recorded.
+ ///
+ public static readonly delegate*<
+ VkCommandBuffer /*commandBuffer*/,
+ VkGeneratedCommandsInfoEXT* /*pGeneratedCommandsInfo*/,
+ VkCommandBuffer /*stateCommandBuffer*/,
+ void> vkCmdPreprocessGeneratedCommandsEXT = null;
+
+ ///
+ /// vkCmdExecuteGeneratedCommandsEXT - Generate and execute commands on the device -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdExecuteGeneratedCommandsEXT.html
+ ///
+ ///
+ /// commandBuffer is the command buffer into which the command is recorded.
+ ///
+ /// isPreprocessed represents whether the input data has already been preprocessed on the
+ /// device. If it is VK_FALSE this command will implicitly trigger the preprocessing step, otherwise not.
+ ///
+ ///
+ /// pGeneratedCommandsInfo is a pointer to a VkGeneratedCommandsInfoEXT structure
+ /// containing parameters affecting the generation of commands.
+ ///
+ public static readonly delegate*<
+ VkCommandBuffer /*commandBuffer*/,
+ VkBool32 /*isPreprocessed*/,
+ VkGeneratedCommandsInfoEXT* /*pGeneratedCommandsInfo*/,
+ void> vkCmdExecuteGeneratedCommandsEXT = null;
+
+ ///
+ /// vkCreateIndirectCommandsLayoutEXT - Create an indirect command layout object -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateIndirectCommandsLayoutEXT.html
+ ///
+ ///
+ /// device is the logical device that creates the indirect command layout.
+ ///
+ /// pCreateInfo is a pointer to a VkIndirectCommandsLayoutCreateInfoEXT structure containing
+ /// parameters affecting creation of the indirect command layout.
+ ///
+ /// pAllocator controls host memory allocation as described in the Memory Allocation chapter.
+ ///
+ /// pIndirectCommandsLayout is a pointer to a VkIndirectCommandsLayoutEXT handle in
+ /// which the resulting indirect command layout is returned.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodesVK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectCommandsLayoutCreateInfoEXT* /*pCreateInfo*/,
+ VkAllocationCallbacks* /*pAllocator*/,
+ VkIndirectCommandsLayoutEXT* /*pIndirectCommandsLayout*/,
+ VkResult> vkCreateIndirectCommandsLayoutEXT = null;
+
+ ///
+ /// vkDestroyIndirectCommandsLayoutEXT - Destroy an indirect commands layout -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyIndirectCommandsLayoutEXT.html
+ ///
+ ///
+ /// device is the logical device that destroys the layout.
+ /// indirectCommandsLayout is the layout to destroy.
+ /// pAllocator controls host memory allocation as described in the Memory Allocation chapter.
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectCommandsLayoutEXT /*indirectCommandsLayout*/,
+ VkAllocationCallbacks* /*pAllocator*/,
+ void> vkDestroyIndirectCommandsLayoutEXT = null;
+
+ ///
+ /// vkCreateIndirectExecutionSetEXT - Create an indirect execution set -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCreateIndirectExecutionSetEXT.html
+ ///
+ ///
+ /// device is the logical device that creates the indirect execution set.
+ ///
+ /// pCreateInfo is a pointer to a VkIndirectExecutionSetCreateInfoEXT structure containing
+ /// parameters affecting creation of the indirect execution set.
+ ///
+ /// pAllocator controls host memory allocation as described in the Memory Allocation chapter.
+ ///
+ /// pIndirectExecutionSet is a pointer to a VkIndirectExecutionSetEXT handle in which
+ /// the resulting indirect execution set is returned.
+ ///
+ ///
+ ///
+ /// -
+ /// successcodesVK_SUCCESS
+ ///
+ /// -
+ /// errorcodesVK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY
+ ///
+ ///
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectExecutionSetCreateInfoEXT* /*pCreateInfo*/,
+ VkAllocationCallbacks* /*pAllocator*/,
+ VkIndirectExecutionSetEXT* /*pIndirectExecutionSet*/,
+ VkResult> vkCreateIndirectExecutionSetEXT = null;
+
+ ///
+ /// vkDestroyIndirectExecutionSetEXT - Destroy an indirect execution set -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkDestroyIndirectExecutionSetEXT.html
+ ///
+ ///
+ /// device is the logical device that owns the indirect execution set.
+ /// indirectExecutionSet is the indirect execution set to destroy.
+ /// pAllocator controls host memory allocation as described in the Memory Allocation chapter.
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectExecutionSetEXT /*indirectExecutionSet*/,
+ VkAllocationCallbacks* /*pAllocator*/,
+ void> vkDestroyIndirectExecutionSetEXT = null;
+
+ ///
+ /// vkUpdateIndirectExecutionSetPipelineEXT - Update the contents of an indirect execution set -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateIndirectExecutionSetPipelineEXT.html
+ ///
+ ///
+ /// device is the logical device that owns the indirect execution set.
+ /// indirectExecutionSet is the indirect execution set being updated.
+ /// executionSetWriteCount is the number of elements in the pExecutionSetWrites array.
+ ///
+ /// pExecutionSetWrites is a pointer to an array of
+ /// VkWriteIndirectExecutionSetPipelineEXT structures describing the elements to update.
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectExecutionSetEXT /*indirectExecutionSet*/,
+ uint /*executionSetWriteCount*/,
+ VkWriteIndirectExecutionSetPipelineEXT* /*pExecutionSetWrites*/,
+ void> vkUpdateIndirectExecutionSetPipelineEXT = null;
+
+ ///
+ /// vkUpdateIndirectExecutionSetShaderEXT - Update the contents of an indirect execution set -
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkUpdateIndirectExecutionSetShaderEXT.html
+ ///
+ ///
+ /// device is the logical device that owns the indirect execution set.
+ /// indirectExecutionSet is the indirect execution set being updated.
+ /// executionSetWriteCount is the number of elements in the pExecutionSetWrites array.
+ ///
+ /// pExecutionSetWrites is a pointer to an array of VkWriteIndirectExecutionSetShaderEXT
+ /// structures describing the elements to update.
+ ///
+ public static readonly delegate*<
+ VkDevice /*device*/,
+ VkIndirectExecutionSetEXT /*indirectExecutionSet*/,
+ uint /*executionSetWriteCount*/,
+ VkWriteIndirectExecutionSetShaderEXT* /*pExecutionSetWrites*/,
+ void> vkUpdateIndirectExecutionSetShaderEXT = 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:
+ ///
+ /// -
+ /// vkGetGeneratedCommandsMemoryRequirementsEXT
+ ///
+ /// -
+ /// vkCmdPreprocessGeneratedCommandsEXT
+ ///
+ /// -
+ /// vkCmdExecuteGeneratedCommandsEXT
+ ///
+ /// -
+ /// vkCreateIndirectCommandsLayoutEXT
+ ///
+ /// -
+ /// vkDestroyIndirectCommandsLayoutEXT
+ ///
+ /// -
+ /// vkCreateIndirectExecutionSetEXT
+ ///
+ /// -
+ /// vkDestroyIndirectExecutionSetEXT
+ ///
+ /// -
+ /// vkUpdateIndirectExecutionSetPipelineEXT
+ ///
+ /// -
+ /// vkUpdateIndirectExecutionSetShaderEXT
+ ///
+ ///
+ ///
+ public static void Load(VkDevice device)
+ {
+ fixed (delegate** pvkGetGeneratedCommandsMemoryRequirementsEXT =
+ &vkGetGeneratedCommandsMemoryRequirementsEXT)
+ {
+ *pvkGetGeneratedCommandsMemoryRequirementsEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6547\u4774\u6e65\u7265\u7461\u6465\u6f43\u6d6d\u6e61\u7364\u654d\u6f6d\u7972\u6552\u7571\u7269\u6d65\u6e65\u7374\u5845\u0054");
+ }
+
+ fixed (delegate** pvkCmdPreprocessGeneratedCommandsEXT = &vkCmdPreprocessGeneratedCommandsEXT)
+ {
+ *pvkCmdPreprocessGeneratedCommandsEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6d43\u5064\u6572\u7270\u636f\u7365\u4773\u6e65\u7265\u7461\u6465\u6f43\u6d6d\u6e61\u7364\u5845\u0054");
+ }
+
+ fixed (delegate** pvkCmdExecuteGeneratedCommandsEXT = &vkCmdExecuteGeneratedCommandsEXT)
+ {
+ *pvkCmdExecuteGeneratedCommandsEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6d43\u4564\u6578\u7563\u6574\u6547\u656e\u6172\u6574\u4364\u6d6f\u616d\u646e\u4573\u5458\u0000");
+ }
+
+ fixed (delegate** pvkCreateIndirectCommandsLayoutEXT =
+ &vkCreateIndirectCommandsLayoutEXT)
+ {
+ *pvkCreateIndirectCommandsLayoutEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u7243\u6165\u6574\u6e49\u6964\u6572\u7463\u6f43\u6d6d\u6e61\u7364\u614c\u6f79\u7475\u5845\u0054");
+ }
+
+ fixed (delegate** pvkDestroyIndirectCommandsLayoutEXT = &vkDestroyIndirectCommandsLayoutEXT)
+ {
+ *pvkDestroyIndirectCommandsLayoutEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6544\u7473\u6f72\u4979\u646e\u7269\u6365\u4374\u6d6f\u616d\u646e\u4c73\u7961\u756f\u4574\u5458\u0000");
+ }
+
+ fixed (delegate** pvkCreateIndirectExecutionSetEXT =
+ &vkCreateIndirectExecutionSetEXT)
+ {
+ *pvkCreateIndirectExecutionSetEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u7243\u6165\u6574\u6e49\u6964\u6572\u7463\u7845\u6365\u7475\u6f69\u536e\u7465\u5845\u0054");
+ }
+
+ fixed (delegate** pvkDestroyIndirectExecutionSetEXT = &vkDestroyIndirectExecutionSetEXT)
+ {
+ *pvkDestroyIndirectExecutionSetEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6544\u7473\u6f72\u4979\u646e\u7269\u6365\u4574\u6578\u7563\u6974\u6e6f\u6553\u4574\u5458\u0000");
+ }
+
+ fixed (delegate** pvkUpdateIndirectExecutionSetPipelineEXT = &vkUpdateIndirectExecutionSetPipelineEXT)
+ {
+ *pvkUpdateIndirectExecutionSetPipelineEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u7055\u6164\u6574\u6e49\u6964\u6572\u7463\u7845\u6365\u7475\u6f69\u536e\u7465\u6950\u6570\u696c\u656e\u5845\u0054");
+ }
+
+ fixed (delegate** pvkUpdateIndirectExecutionSetShaderEXT = &vkUpdateIndirectExecutionSetShaderEXT)
+ {
+ *pvkUpdateIndirectExecutionSetShaderEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u7055\u6164\u6574\u6e49\u6964\u6572\u7463\u7845\u6365\u7475\u6f69\u536e\u7465\u6853\u6461\u7265\u5845\u0054");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsInfoEXT.cs
new file mode 100644
index 00000000..c95792fe
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsInfoEXT.cs
@@ -0,0 +1,73 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkGeneratedCommandsInfoEXT - Structure specifying parameters for the generation of commands -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsInfoEXT.html
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkGeneratedCommandsInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_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;
+
+ /// shaderStages is the mask of shader stages used by the commands.
+ public VkShaderStageFlags shaderStages;
+
+ /// indirectExecutionSet is the indirect execution set to be used for binding shaders.
+ public VkIndirectExecutionSetEXT indirectExecutionSet;
+
+ /// indirectCommandsLayout is the VkIndirectCommandsLayoutEXTthat specifies the command sequence data.
+ public VkIndirectCommandsLayoutEXT indirectCommandsLayout;
+
+ /// indirectAddress is an address that holds the indirect buffer data.
+ public VkDeviceAddress indirectAddress;
+
+ /// indirectAddressSize is the size in bytes of indirect buffer data starting at indirectAddress.
+ public VkDeviceSize indirectAddressSize;
+
+ ///
+ /// preprocessAddress specifies a physical address of the VkBuffer used for preprocessing the input data for
+ /// execution. If this structure is used with vkCmdExecuteGeneratedCommandsEXTwith its isPreprocessed set to VK_TRUE,
+ /// then the preprocessing step is skipped but data in this address may still be modified. The contents and the layout
+ /// of this address are opaque to applications and must not be modified outside functions related to device-generated
+ /// commands or copied to another buffer for reuse.
+ ///
+ public VkDeviceAddress preprocessAddress;
+
+ /// preprocessSize is the maximum byte size within preprocessAddress that is available for preprocessing.
+ public VkDeviceSize preprocessSize;
+
+ /// maxSequenceCount is used to determine the number of sequences to execute.
+ public uint maxSequenceCount;
+
+ ///
+ /// sequenceCountAddress specifies an optional physical address of a single uint32_t value containing the
+ /// requested number of sequences to execute.
+ ///
+ public VkDeviceAddress sequenceCountAddress;
+
+ ///
+ /// maxDrawCount is the maximum number of indirect draws that can be executed by any COUNT-type multi-draw
+ /// indirect tokens. The draw count in the indirect buffer is clamped to this value for these token types.
+ ///
+ public uint maxDrawCount;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsMemoryRequirementsInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsMemoryRequirementsInfoEXT.cs
new file mode 100644
index 00000000..e594ba6f
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsMemoryRequirementsInfoEXT.cs
@@ -0,0 +1,50 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkGeneratedCommandsMemoryRequirementsInfoEXT - Structure specifying parameters for the reservation of preprocess
+/// buffer space -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsMemoryRequirementsInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkGeneratedCommandsMemoryRequirementsInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_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;
+
+ /// indirectExecutionSet is the indirect execution set to be used for binding shaders.
+ public VkIndirectExecutionSetEXT indirectExecutionSet;
+
+ /// indirectCommandsLayout is the VkIndirectCommandsLayoutEXTthat this buffer memory is intended to be used with.
+ public VkIndirectCommandsLayoutEXT indirectCommandsLayout;
+
+ /// maxSequenceCount is the maximum number of sequences that this buffer memory can be used with.
+ public uint maxSequenceCount;
+
+ ///
+ /// maxDrawCount is the maximum number of indirect draws that can be executed by any COUNT-type multi-draw
+ /// indirect tokens. The draw count in the indirect buffer is clamped to this value for these token types.
+ ///
+ public uint maxDrawCount;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsPipelineInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsPipelineInfoEXT.cs
new file mode 100644
index 00000000..03c1fbba
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsPipelineInfoEXT.cs
@@ -0,0 +1,47 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkGeneratedCommandsPipelineInfoEXT - Structure specifying a pipeline for use with indirect command
+/// preprocessing -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsPipelineInfoEXT.html
+///
+///
+///
+///
+/// -
+/// structextends
+/// VkGeneratedCommandsInfoEXT,VkGeneratedCommandsMemoryRequirementsInfoEXT
+///
+///
+///
+[VkStructExtends("VkGeneratedCommandsInfoEXT,VkGeneratedCommandsMemoryRequirementsInfoEXT")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkGeneratedCommandsPipelineInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_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;
+
+ /// pipeline is a valid pipeline object.
+ public VkPipeline pipeline;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsShaderInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsShaderInfoEXT.cs
new file mode 100644
index 00000000..257bb428
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkGeneratedCommandsShaderInfoEXT.cs
@@ -0,0 +1,50 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkGeneratedCommandsShaderInfoEXT - Structure specifying shader objects for use with indirect command
+/// preprocessing -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkGeneratedCommandsShaderInfoEXT.html
+///
+///
+///
+///
+/// -
+/// structextends
+/// VkGeneratedCommandsInfoEXT,VkGeneratedCommandsMemoryRequirementsInfoEXT
+///
+///
+///
+[VkStructExtends("VkGeneratedCommandsInfoEXT,VkGeneratedCommandsMemoryRequirementsInfoEXT")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkGeneratedCommandsShaderInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_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;
+
+ /// shaderCount is the size of the pShaders array.
+ public uint shaderCount;
+
+ /// pShaders is a pointer to an array of shader objects.
+ public VkShaderEXT* pShaders;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsExecutionSetTokenEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsExecutionSetTokenEXT.cs
new file mode 100644
index 00000000..e51f1fcf
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsExecutionSetTokenEXT.cs
@@ -0,0 +1,31 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsExecutionSetTokenEXT - Structure specifying input data for a single execution set command token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsExecutionSetTokenEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkIndirectCommandsExecutionSetTokenEXT
+{
+ /// type describes the type of indirect execution set in use.
+ public VkIndirectExecutionSetInfoTypeEXT type;
+
+ /// shaderStages specifies the shaders that will be changed by this token.
+ public VkShaderStageFlags shaderStages;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsIndexBufferTokenEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsIndexBufferTokenEXT.cs
new file mode 100644
index 00000000..9f3a02a0
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsIndexBufferTokenEXT.cs
@@ -0,0 +1,29 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsIndexBufferTokenEXT - Structure specifying layout token info for a single index buffer command
+/// token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsIndexBufferTokenEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkIndirectCommandsIndexBufferTokenEXT
+{
+ /// mode specifies the mode to use with this token.
+ public VkIndirectCommandsInputModeFlagBitsEXT mode;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsInputModeFlagBitsEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsInputModeFlagBitsEXT.cs
new file mode 100644
index 00000000..01a54213
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsInputModeFlagBitsEXT.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsInputModeFlagBitsEXT - Bitmask specifying allowed usage of an indirect commands layout -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsInputModeFlagBitsEXT.html
+///
+///
+[Flags]
+public enum VkIndirectCommandsInputModeFlagBitsEXT
+{
+ ///
+ /// VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT indicates that the indirect buffer contains
+ ///
+ /// VkBindIndexBufferIndirectCommandEXT
+ ///
+ /// .
+ ///
+ VK_INDIRECT_COMMANDS_INPUT_MODE_VULKAN_INDEX_BUFFER_EXT = 0x1,
+
+ ///
+ /// VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT indicates that the indirect buffer contains
+ /// D3D12_INDEX_BUFFER_VIEW.
+ ///
+ VK_INDIRECT_COMMANDS_INPUT_MODE_DXGI_INDEX_BUFFER_EXT = 0x2
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutCreateInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutCreateInfoEXT.cs
new file mode 100644
index 00000000..f6f9ee4a
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutCreateInfoEXT.cs
@@ -0,0 +1,57 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsLayoutCreateInfoEXT - Structure specifying the parameters of a newly created indirect commands
+/// layout object -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutCreateInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectCommandsLayoutCreateInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_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 VkIndirectCommandsLayoutUsageFlagBitsEXT specifying usage rules for this layout.
+ public VkIndirectCommandsLayoutUsageFlagsEXT flags;
+
+ /// shaderStages is the VkShaderStageFlags that this layout supports.
+ public VkShaderStageFlags shaderStages;
+
+ /// indirectStride is the distance in bytes between sequences in the indirect buffer
+ public uint indirectStride;
+
+ ///
+ /// pipelineLayout is the optional VkPipelineLayout that tokens in this layout use. If the
+ /// dynamicGeneratedPipelineLayout feature is enabled, pipelineLayout can be VK_NULL_HANDLE and the layout mustbe
+ /// specified by chaining the VkPipelineLayoutCreateInfo structure off the pNext
+ ///
+ public VkPipelineLayout pipelineLayout;
+
+ /// tokenCount is the length of the individual command sequence.
+ public uint tokenCount;
+
+ /// pTokens is a pointer to an array of VkIndirectCommandsLayoutTokenEXT describing each command token in detail.
+ public VkIndirectCommandsLayoutTokenEXT* pTokens;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutEXT.cs
new file mode 100644
index 00000000..826742cf
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutEXT.cs
@@ -0,0 +1,85 @@
+#region License
+
+// Copyright (c) 2018-2024, 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 once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkIndirectCommandsLayoutEXT - Opaque handle to an indirect commands layout object -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutEXT.html
+///
+public readonly unsafe struct VkIndirectCommandsLayoutEXT
+{
+ /// The null value.
+ public static readonly VkIndirectCommandsLayoutEXT Null = (VkIndirectCommandsLayoutEXT)null;
+#pragma warning disable 649
+ private readonly void* _ptr;
+#pragma warning restore 649
+
+ /// Returns a hash code for this object.
+ /// A hash code for this object.
+ public override int GetHashCode()
+ {
+ return ((IntPtr)_ptr).GetHashCode();
+ }
+
+ /// Tests if this in VkIndirectCommandsLayoutEXT is considered equal to this instance.
+ /// The in VkIndirectCommandsLayoutEXT to compare to this instance.
+ /// True if the objects are considered equal, false if they are not.
+ public bool Equals(in VkIndirectCommandsLayoutEXT obj)
+ {
+ return obj._ptr == _ptr;
+ }
+
+ /// Tests if the object is considered equal to this instance.
+ /// The object to compare to this instance.
+ /// True if the objects are considered equal, false if they are not.
+ public override bool Equals(object? obj)
+ {
+ return obj is VkIndirectCommandsLayoutEXT vkIndirectCommandsLayoutEXT && Equals(in vkIndirectCommandsLayoutEXT);
+ }
+
+ /// Explicit cast that converts the given void* to a VkIndirectCommandsLayoutEXT.
+ /// [in,out] If non-null, the pointer.
+ /// The result of the operation.
+ public static explicit operator VkIndirectCommandsLayoutEXT(void* ptr)
+ {
+ VkIndirectCommandsLayoutEXT value;
+ *(void**)&value = ptr;
+ return value;
+ }
+
+ /// Equality operator.
+ /// The left.
+ /// The right.
+ /// The result of the operation.
+ public static bool operator ==(VkIndirectCommandsLayoutEXT left, VkIndirectCommandsLayoutEXT right)
+ {
+ return left._ptr == right._ptr;
+ }
+
+ /// Inequality operator.
+ /// The left.
+ /// The right.
+ /// The result of the operation.
+ public static bool operator !=(VkIndirectCommandsLayoutEXT left, VkIndirectCommandsLayoutEXT right)
+ {
+ return left._ptr != right._ptr;
+ }
+
+ /// Explicit cast that converts the given VkIndirectCommandsLayoutEXT to a void*.
+ /// The value.
+ /// The result of the operation.
+ public static explicit operator void*(VkIndirectCommandsLayoutEXT value)
+ {
+ return value._ptr;
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutTokenEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutTokenEXT.cs
new file mode 100644
index 00000000..b601d416
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutTokenEXT.cs
@@ -0,0 +1,49 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsLayoutTokenEXT - Struct specifying the details of an indirect command layout token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutTokenEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectCommandsLayoutTokenEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_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;
+
+ /// type specifies the VkIndirectCommandsTokenTypeEXT for data.
+ public VkIndirectCommandsTokenTypeEXT type;
+
+ ///
+ /// data specifies a VkIndirectCommandsTokenDataEXT containing token-specific details for command execution. It is
+ /// ignored if type does not match any member of the VkIndirectCommandsTokenDataEXT union.
+ ///
+ public VkIndirectCommandsTokenDataEXT data;
+
+ ///
+ /// offset is the relative byte offset for the token within one sequence of the indirect buffer. The data stored
+ /// at that offset is the command data for the token, e.g. VkDispatchIndirectCommand.
+ ///
+ public uint offset;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsEXT.cs
new file mode 100644
index 00000000..73819634
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsLayoutUsageFlagBitsEXT.cs
@@ -0,0 +1,49 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsLayoutUsageFlagBitsEXT - Bitmask specifying allowed usage of an indirect commands layout -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsLayoutUsageFlagBitsEXT.html
+///
+///
+[Flags]
+public enum VkIndirectCommandsLayoutUsageFlagBitsEXT
+{
+ ///
+ /// VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXTspecifies that the layout is always used with the
+ /// manual preprocessing step through calling
+ ///
+ /// vkCmdPreprocessGeneratedCommandsEXT
+ ///
+ /// and executed by
+ ///
+ /// vkCmdExecuteGeneratedCommandsEXT
+ ///
+ /// with isPreprocessedset to VK_TRUE.
+ ///
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_EXT = 0x1,
+
+ ///
+ /// VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXTspecifies that the processing of sequences will
+ /// happen at an implementation-dependent order, which is not guaranteed to be deterministic using the same input data.
+ /// This flag is ignored when the shaderStages is VK_SHADER_STAGE_COMPUTE_BIT as it is implied that the dispatch
+ /// sequence is always unordered.
+ ///
+ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_EXT = 0x2
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsPushConstantTokenEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsPushConstantTokenEXT.cs
new file mode 100644
index 00000000..8a8c74e1
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsPushConstantTokenEXT.cs
@@ -0,0 +1,29 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsPushConstantTokenEXT - Structure specifying layout token info for a single push constant command
+/// token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsPushConstantTokenEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkIndirectCommandsPushConstantTokenEXT
+{
+ /// updateRange is the push constant range that will be updated by the token.
+ public VkPushConstantRange updateRange;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenDataEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenDataEXT.cs
new file mode 100644
index 00000000..006ccd86
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenDataEXT.cs
@@ -0,0 +1,51 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsTokenDataEXT - Union specifying the token-specific details of an indirect command layout
+/// token -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsTokenDataEXT.html
+///
+[StructLayout(LayoutKind.Explicit)]
+public unsafe struct VkIndirectCommandsTokenDataEXT
+{
+ ///
+ /// pPushConstant is a pointer to a VkIndirectCommandsPushConstantTokenEXT struct needed for
+ /// VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT and VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT tokens
+ ///
+ [FieldOffset(0)]
+ public VkIndirectCommandsPushConstantTokenEXT* pPushConstant;
+
+ ///
+ /// pVertexBuffer is a pointer to a VkIndirectCommandsVertexBufferTokenEXT struct needed for
+ /// VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT tokens
+ ///
+ [FieldOffset(0)]
+ public VkIndirectCommandsVertexBufferTokenEXT* pVertexBuffer;
+
+ ///
+ /// pIndexBuffer is a pointer to a VkIndirectCommandsIndexBufferTokenEXT struct needed for
+ /// VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT tokens
+ ///
+ [FieldOffset(0)]
+ public VkIndirectCommandsIndexBufferTokenEXT* pIndexBuffer;
+
+ ///
+ /// pExecutionSet is a pointer to a VkIndirectCommandsExecutionSetTokenEXT struct needed for
+ /// VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT tokens
+ ///
+ [FieldOffset(0)]
+ public VkIndirectCommandsExecutionSetTokenEXT* pExecutionSet;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenTypeEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenTypeEXT.cs
new file mode 100644
index 00000000..ee623289
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsTokenTypeEXT.cs
@@ -0,0 +1,160 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsTokenTypeEXT - Enum specifying token commands -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsTokenTypeEXT.html
+///
+public enum VkIndirectCommandsTokenTypeEXT
+{
+ ///
+ ///
+ /// -
+ /// Command Datau32[] array of indices into the indirect execution set
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_EXECUTION_SET_EXT = 0,
+
+ ///
+ ///
+ /// -
+ /// Command Datau32[] raw data
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_EXT = 1,
+
+ ///
+ ///
+ /// -
+ /// Command Datau32 placeholder data (not accessed by shader)
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_SEQUENCE_INDEX_EXT = 2,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkBindIndexBufferIndirectCommandEXT
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_EXT = 3,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkBindVertexBufferIndirectCommandEXT
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_EXT = 4,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkDrawIndexedIndirectCommand
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_EXT = 5,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkDrawIndirectCommand
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_EXT = 6,
+
+ ///
+ ///
+ /// -
+ /// Command Data
+ /// VkDrawIndirectCountIndirectCommandEXT with VkDrawIndexedIndirectCommand
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_COUNT_EXT = 7,
+
+ ///
+ ///
+ /// -
+ /// Command Data
+ /// VkDrawIndirectCountIndirectCommandEXT with VkDrawIndirectCommand
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_COUNT_EXT = 8,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkDispatchIndirectCommand
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_EXT = 9,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkDrawMeshTasksIndirectCommandNV
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_NV_EXT = 1000202002,
+
+ ///
+ ///
+ /// -
+ /// Command Data
+ /// VkDrawIndirectCountIndirectCommandEXT with VkDrawMeshTasksIndirectCommandNV
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_NV_EXT = 1000202003,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkDrawMeshTasksIndirectCommandEXT
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_EXT = 1000328000,
+
+ ///
+ ///
+ /// -
+ /// Command Data
+ /// VkDrawIndirectCountIndirectCommandEXT with VkDrawMeshTasksIndirectCommandEXT
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_MESH_TASKS_COUNT_EXT = 1000328001,
+
+ ///
+ ///
+ /// -
+ /// Command DataVkTraceRaysIndirectCommand2KHR
+ ///
+ ///
+ ///
+ VK_INDIRECT_COMMANDS_TOKEN_TYPE_TRACE_RAYS2_EXT = 1000386004
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsVertexBufferTokenEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsVertexBufferTokenEXT.cs
new file mode 100644
index 00000000..b5ecc98f
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectCommandsVertexBufferTokenEXT.cs
@@ -0,0 +1,29 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectCommandsVertexBufferTokenEXT - Structure specifying layout token info for a single index buffer command
+/// token -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectCommandsVertexBufferTokenEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public struct VkIndirectCommandsVertexBufferTokenEXT
+{
+ /// vertexBindingUnit is the vertex input binding number to be bound.
+ public uint vertexBindingUnit;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetCreateInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetCreateInfoEXT.cs
new file mode 100644
index 00000000..5b22e7b7
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetCreateInfoEXT.cs
@@ -0,0 +1,43 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetCreateInfoEXT - Structure specifying parameters of a newly created indirect execution set -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetCreateInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectExecutionSetCreateInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_CREATE_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;
+
+ ///
+ /// type is a VkIndirectExecutionSetInfoTypeEXT describing the type of set being created and determining which
+ /// field of the infounion will be used.
+ ///
+ public VkIndirectExecutionSetInfoTypeEXT type;
+
+ /// info is a VkIndirectExecutionSetInfoEXT union containing layout information for the set.
+ public VkIndirectExecutionSetInfoEXT info;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetEXT.cs
new file mode 100644
index 00000000..050d6dfd
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetEXT.cs
@@ -0,0 +1,85 @@
+#region License
+
+// Copyright (c) 2018-2024, 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 once CheckNamespace
+namespace Exomia.Vulkan.Api.Core;
+
+///
+/// VkIndirectExecutionSetEXT - Opaque handle to an indirect execution set object -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetEXT.html
+///
+public readonly unsafe struct VkIndirectExecutionSetEXT
+{
+ /// The null value.
+ public static readonly VkIndirectExecutionSetEXT Null = (VkIndirectExecutionSetEXT)null;
+#pragma warning disable 649
+ private readonly void* _ptr;
+#pragma warning restore 649
+
+ /// Returns a hash code for this object.
+ /// A hash code for this object.
+ public override int GetHashCode()
+ {
+ return ((IntPtr)_ptr).GetHashCode();
+ }
+
+ /// Tests if this in VkIndirectExecutionSetEXT is considered equal to this instance.
+ /// The in VkIndirectExecutionSetEXT to compare to this instance.
+ /// True if the objects are considered equal, false if they are not.
+ public bool Equals(in VkIndirectExecutionSetEXT obj)
+ {
+ return obj._ptr == _ptr;
+ }
+
+ /// Tests if the object is considered equal to this instance.
+ /// The object to compare to this instance.
+ /// True if the objects are considered equal, false if they are not.
+ public override bool Equals(object? obj)
+ {
+ return obj is VkIndirectExecutionSetEXT vkIndirectExecutionSetEXT && Equals(in vkIndirectExecutionSetEXT);
+ }
+
+ /// Explicit cast that converts the given void* to a VkIndirectExecutionSetEXT.
+ /// [in,out] If non-null, the pointer.
+ /// The result of the operation.
+ public static explicit operator VkIndirectExecutionSetEXT(void* ptr)
+ {
+ VkIndirectExecutionSetEXT value;
+ *(void**)&value = ptr;
+ return value;
+ }
+
+ /// Equality operator.
+ /// The left.
+ /// The right.
+ /// The result of the operation.
+ public static bool operator ==(VkIndirectExecutionSetEXT left, VkIndirectExecutionSetEXT right)
+ {
+ return left._ptr == right._ptr;
+ }
+
+ /// Inequality operator.
+ /// The left.
+ /// The right.
+ /// The result of the operation.
+ public static bool operator !=(VkIndirectExecutionSetEXT left, VkIndirectExecutionSetEXT right)
+ {
+ return left._ptr != right._ptr;
+ }
+
+ /// Explicit cast that converts the given VkIndirectExecutionSetEXT to a void*.
+ /// The value.
+ /// The result of the operation.
+ public static explicit operator void*(VkIndirectExecutionSetEXT value)
+ {
+ return value._ptr;
+ }
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoEXT.cs
new file mode 100644
index 00000000..3dcf0b99
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoEXT.cs
@@ -0,0 +1,36 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetInfoEXT - Union specifying parameters of a newly created indirect execution set -
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetInfoEXT.html
+///
+[StructLayout(LayoutKind.Explicit)]
+public unsafe struct VkIndirectExecutionSetInfoEXT
+{
+ ///
+ /// pPipelineInfo is a pointer to a VkIndirectExecutionSetPipelineInfoEXT struct containing pipeline layout
+ /// information for the set.
+ ///
+ [FieldOffset(0)]
+ public VkIndirectExecutionSetPipelineInfoEXT* pPipelineInfo;
+
+ ///
+ /// pShaderInfo is a pointer to a VkIndirectExecutionSetShaderInfoEXT struct containing shader object layout
+ /// information for the set.
+ ///
+ [FieldOffset(0)]
+ public VkIndirectExecutionSetShaderInfoEXT* pShaderInfo;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoTypeEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoTypeEXT.cs
new file mode 100644
index 00000000..721df32a
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetInfoTypeEXT.cs
@@ -0,0 +1,38 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetInfoTypeEXT - Enum specifying allowed usage of an indirect execution set -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetInfoTypeEXT.html
+///
+///
+public enum VkIndirectExecutionSetInfoTypeEXT
+{
+ ///
+ /// VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT specifies that the indirect execution set contains
+ /// VkPipeline
+ /// objects.
+ ///
+ VK_INDIRECT_EXECUTION_SET_INFO_TYPE_PIPELINES_EXT = 0,
+
+ ///
+ /// VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT specifies that the indirect execution set contains
+ /// VkShaderEXT
+ /// objects.
+ ///
+ VK_INDIRECT_EXECUTION_SET_INFO_TYPE_SHADER_OBJECTS_EXT = 1
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetPipelineInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetPipelineInfoEXT.cs
new file mode 100644
index 00000000..31317b30
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetPipelineInfoEXT.cs
@@ -0,0 +1,44 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetPipelineInfoEXT - Struct specifying parameters of a newly created indirect execution set
+/// containing only pipelines -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetPipelineInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectExecutionSetPipelineInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_PIPELINE_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;
+
+ ///
+ /// initialPipeline is the initial pipeline for the set. This pipeline will be automatically added to the set at
+ /// index 0.
+ ///
+ public VkPipeline initialPipeline;
+
+ /// maxPipelineCount is the maximum number of pipelines stored in the set.
+ public uint maxPipelineCount;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderInfoEXT.cs
new file mode 100644
index 00000000..aa1d1f8b
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderInfoEXT.cs
@@ -0,0 +1,59 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetShaderInfoEXT - Struct specifying parameters of a newly created indirect execution set
+/// containing only shader objects -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetShaderInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectExecutionSetShaderInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_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;
+
+ /// shaderCount is the number of members in the pInitialShadersand pSetLayoutInfos arrays.
+ public uint shaderCount;
+
+ ///
+ /// pInitialShaders is a pointer to an array containing a VkShaderEXT object for each shader stage that will be
+ /// used in the set. These shaders will be automatically added to the set beginning at index 0.
+ ///
+ public VkShaderEXT* pInitialShaders;
+
+ ///
+ /// pSetLayoutInfos is a pointer to an array containing a VkIndirectExecutionSetShaderLayoutInfoEXT used by each
+ /// corresponding pInitialShaders shader stage in the set.
+ ///
+ public VkIndirectExecutionSetShaderLayoutInfoEXT* pSetLayoutInfos;
+
+ /// maxShaderCount is the maximum number of shader objects stored in the set.
+ public uint maxShaderCount;
+
+ /// pushConstantRangeCount is the number of members in the pPushConstantRanges array.
+ public uint pushConstantRangeCount;
+
+ /// pPushConstantRanges is a pointer to the array of VkPushConstantRange ranges used by all shaders in the set.
+ public VkPushConstantRange* pPushConstantRanges;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderLayoutInfoEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderLayoutInfoEXT.cs
new file mode 100644
index 00000000..fc7a5a2a
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkIndirectExecutionSetShaderLayoutInfoEXT.cs
@@ -0,0 +1,47 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkIndirectExecutionSetShaderLayoutInfoEXT - Struct specifying descriptor layout parameters of a newly created
+/// indirect execution set containing only shader objects -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkIndirectExecutionSetShaderLayoutInfoEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkIndirectExecutionSetShaderLayoutInfoEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT;
+
+ ///
+ /// sType
+ ///
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkIndirectExecutionSetShaderLayoutInfoEXT
+ ///
+ ///
+ public VkStructureType sType;
+
+ /// pNext is NULL or a pointer to a structure extending this structure.
+ public void* pNext;
+
+ /// setLayoutCount is the number of members in the pSetLayoutsarray
+ public uint setLayoutCount;
+
+ /// pSetLayouts is a pointer to an array containing VkDescriptorSetLayout objects used by the shader stage.
+ public VkDescriptorSetLayout* pSetLayouts;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT.cs
new file mode 100644
index 00000000..1459564b
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT.cs
@@ -0,0 +1,56 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT - 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/VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceFeatures2,VkDeviceCreateInfo
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceFeatures2,VkDeviceCreateInfo")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_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;
+
+ ///
+ /// deviceGeneratedCommandsindicates whether the implementation supports functionality to generate commands on
+ /// the device.
+ ///
+ public VkBool32 deviceGeneratedCommands;
+
+ ///
+ /// dynamicGeneratedPipelineLayout indicates the implementation allows the pipelineLayout member of
+ /// VkIndirectCommandsLayoutCreateInfoEXT to be VK_NULL_HANDLEand VkPipelineLayoutCreateInfo can be chained off those
+ /// structures' pNext instead.
+ ///
+ public VkBool32 dynamicGeneratedPipelineLayout;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT.cs
new file mode 100644
index 00000000..f3d292dc
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT.cs
@@ -0,0 +1,104 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT - Structure describing push descriptor limits that can be
+/// supported by an implementation -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT.html
+///
+///
+///
+///
+/// -
+/// structextendsVkPhysicalDeviceProperties2
+///
+/// -
+/// returnedonlytrue
+///
+///
+///
+[VkStructExtends("VkPhysicalDeviceProperties2")]
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_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;
+
+ /// maxIndirectPipelineCount is the maximum number of pipelines passed to vkCreateIndirectExecutionSetEXT.
+ public uint maxIndirectPipelineCount;
+
+ ///
+ /// maxIndirectShaderObjectCount is the maximum number of shader objects passed to
+ /// vkCreateIndirectExecutionSetEXT. If this value is zero, binding shader objects indirectly is not supported.
+ ///
+ public uint maxIndirectShaderObjectCount;
+
+ ///
+ /// maxIndirectSequenceCount is the maximum number of sequences in VkGeneratedCommandsInfoEXT and in
+ /// VkGeneratedCommandsMemoryRequirementsInfoEXT.
+ ///
+ public uint maxIndirectSequenceCount;
+
+ /// maxIndirectCommandsTokenCount is the maximum number of tokens in VkIndirectCommandsLayoutCreateInfoEXT.
+ public uint maxIndirectCommandsTokenCount;
+
+ /// maxIndirectCommandsTokenOffset is the maximum offset in VkIndirectCommandsLayoutTokenEXT.
+ public uint maxIndirectCommandsTokenOffset;
+
+ /// maxIndirectCommandsIndirectStride is the maximum stream stride in VkIndirectCommandsLayoutCreateInfoEXT.
+ public uint maxIndirectCommandsIndirectStride;
+
+ /// supportedIndirectCommandsInputModes indicates the supported input modes.
+ public VkIndirectCommandsInputModeFlagsEXT supportedIndirectCommandsInputModes;
+
+ ///
+ /// supportedIndirectCommandsShaderStages indicates the stages which can be used to generate indirect commands.
+ /// Implementations are required to support, at minimum: VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_FRAGMENT_BIT,
+ /// VK_SHADER_STAGE_COMPUTE_BIT.
+ ///
+ public VkShaderStageFlags supportedIndirectCommandsShaderStages;
+
+ ///
+ /// supportedIndirectCommandsShaderStagesPipelineBinding indicates the stages which can be used within indirect
+ /// execution sets for indirectly binding shader stages using pipelines.
+ ///
+ public VkShaderStageFlags supportedIndirectCommandsShaderStagesPipelineBinding;
+
+ ///
+ /// supportedIndirectCommandsShaderStagesShaderBinding indicates the stages which can be used within indirect
+ /// execution sets for indirectly binding shader stages using shader objects.
+ ///
+ public VkShaderStageFlags supportedIndirectCommandsShaderStagesShaderBinding;
+
+ ///
+ /// deviceGeneratedCommandsTransformFeedback indicates whether the implementation supports interactions with
+ /// VK_EXT_transform_feedback for pipelines not created with VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT.
+ ///
+ public VkBool32 deviceGeneratedCommandsTransformFeedback;
+
+ ///
+ /// deviceGeneratedCommandsMultiDrawIndirectCount indicates whether the implementation supports COUNT variants of
+ /// multi-draw indirect tokens.
+ ///
+ public VkBool32 deviceGeneratedCommandsMultiDrawIndirectCount;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetPipelineEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetPipelineEXT.cs
new file mode 100644
index 00000000..b046af48
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetPipelineEXT.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkWriteIndirectExecutionSetPipelineEXT - Struct specifying pipeline update information for an indirect execution
+/// set -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkWriteIndirectExecutionSetPipelineEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkWriteIndirectExecutionSetPipelineEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_PIPELINE_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;
+
+ /// index is the element of the set to update
+ public uint index;
+
+ /// pipeline is the pipeline to store in the indirect execution set
+ public VkPipeline pipeline;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetShaderEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetShaderEXT.cs
new file mode 100644
index 00000000..bfebb663
--- /dev/null
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_device_generated_commands/VkWriteIndirectExecutionSetShaderEXT.cs
@@ -0,0 +1,41 @@
+#region License
+
+// Copyright (c) 2018-2024, 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;
+
+///
+/// VkWriteIndirectExecutionSetShaderEXT - Struct specifying shader object update information for an indirect execution
+/// set -
+///
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkWriteIndirectExecutionSetShaderEXT.html
+///
+///
+[StructLayout(LayoutKind.Sequential)]
+public unsafe struct VkWriteIndirectExecutionSetShaderEXT
+{
+ /// The stype of this structure.
+ public const VkStructureType STYPE = VK_STRUCTURE_TYPE_WRITE_INDIRECT_EXECUTION_SET_SHADER_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;
+
+ /// index is the element of the set to update
+ public uint index;
+
+ /// shader is the shader to store in the indirect execution set
+ public VkShaderEXT shader;
+}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_acquire_unmodified/VkExtExternalMemoryAcquireUnmodified.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_acquire_unmodified/VkExtExternalMemoryAcquireUnmodified.cs
index db377cf7..d0a389d5 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_acquire_unmodified/VkExtExternalMemoryAcquireUnmodified.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_acquire_unmodified/VkExtExternalMemoryAcquireUnmodified.cs
@@ -20,7 +20,7 @@ namespace Exomia.Vulkan.Api.Core;
///
/// VK_EXT_external_memory_acquire_unmodified - device extension (nr. 454) - author 'EXT' [platform '' | contact 'Lina
-/// Versace @versalinyaa']
+/// Versace @linyaa-kiwi']
///
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_external_memory_acquire_unmodified.html
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_dma_buf/VkExtExternalMemoryDmaBuf.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_dma_buf/VkExtExternalMemoryDmaBuf.cs
index 5114a322..810d7678 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_dma_buf/VkExtExternalMemoryDmaBuf.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_external_memory_dma_buf/VkExtExternalMemoryDmaBuf.cs
@@ -20,7 +20,7 @@ namespace Exomia.Vulkan.Api.Core;
///
/// VK_EXT_external_memory_dma_buf - device extension (nr. 126) - author 'EXT' [platform '' | contact 'Lina Versace
-/// @versalinyaa']
+/// @linyaa-kiwi']
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_external_memory_dma_buf.html
///
[VkDepends("VK_KHR_external_memory_fd")]
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_drm_format_modifier/VkExtImageDrmFormatModifier.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_drm_format_modifier/VkExtImageDrmFormatModifier.cs
index 12c88474..86a6767a 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_drm_format_modifier/VkExtImageDrmFormatModifier.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_image_drm_format_modifier/VkExtImageDrmFormatModifier.cs
@@ -20,7 +20,7 @@ namespace Exomia.Vulkan.Api.Core;
///
/// VK_EXT_image_drm_format_modifier - device extension (nr. 159) - author 'EXT' [platform '' | contact 'Lina Versace
-/// @versalinyaa']
+/// @linyaa-kiwi']
///
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_image_drm_format_modifier.html
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_queue_family_foreign/VkExtQueueFamilyForeign.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_queue_family_foreign/VkExtQueueFamilyForeign.cs
index b8def60d..129f7ba8 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_queue_family_foreign/VkExtQueueFamilyForeign.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_queue_family_foreign/VkExtQueueFamilyForeign.cs
@@ -20,7 +20,7 @@ namespace Exomia.Vulkan.Api.Core;
///
/// VK_EXT_queue_family_foreign - device extension (nr. 127) - author 'EXT' [platform '' | contact 'Lina Versace
-/// @versalinyaa']
+/// @linyaa-kiwi']
/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_EXT_queue_family_foreign.html
///
[VkDepends("VK_KHR_external_memory,VK_VERSION_1_1")]
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkExtShaderObject.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkExtShaderObject.cs
index 5fa419ea..05bc1c4e 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkExtShaderObject.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkExtShaderObject.cs
@@ -842,6 +842,22 @@ public static readonly delegate*<
VkCoverageReductionModeNV /*coverageReductionMode*/,
void> vkCmdSetCoverageReductionModeNV = null;
+ ///
+ /// vkCmdSetDepthClampRangeEXT - Set the viewport depth clamp range dynamically for a command buffer -
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClampRangeEXT.html
+ ///
+ /// commandBuffer is the command buffer into which the command will be recorded.
+ /// depthClampMode determines how the clamp range is determined for each viewport.
+ ///
+ /// pDepthClampRange sets the depth clamp range for all viewports if depthClampMode is set
+ /// to VK_DEPTH_CLAMP_MODE_USER_DEFINED_RANGE_EXT.
+ ///
+ public static readonly delegate*<
+ VkCommandBuffer /*commandBuffer*/,
+ VkDepthClampModeEXT /*depthClampMode*/,
+ VkDepthClampRangeEXT* /*pDepthClampRange*/,
+ void> vkCmdSetDepthClampRangeEXT = null;
+
/// Loads all function pointer based on the device for this extension. (see remarks!)
/// The device that the function pointers will be compatible with.
///
@@ -1006,6 +1022,9 @@ public static readonly delegate*<
/// -
/// vkCmdSetCoverageReductionModeNV
///
+ /// -
+ /// vkCmdSetDepthClampRangeEXT
+ ///
///
///
public static void Load(VkDevice device)
@@ -1314,5 +1333,11 @@ public static void Load(VkDevice device)
*pvkCmdSetCoverageReductionModeNV = (delegate*)GetVkFunction(
device, "\u6b76\u6d43\u5364\u7465\u6f43\u6576\u6172\u6567\u6552\u7564\u7463\u6f69\u4d6e\u646f\u4e65\u0056");
}
+
+ fixed (delegate** pvkCmdSetDepthClampRangeEXT = &vkCmdSetDepthClampRangeEXT)
+ {
+ *pvkCmdSetDepthClampRangeEXT = (delegate*)GetVkFunction(
+ device, "\u6b76\u6d43\u5364\u7465\u6544\u7470\u4368\u616c\u706d\u6152\u676e\u4565\u5458\u0000");
+ }
}
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkShaderCreateFlagBitsEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkShaderCreateFlagBitsEXT.cs
index ab30d2d8..df7c38e3 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkShaderCreateFlagBitsEXT.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_shader_object/VkShaderCreateFlagBitsEXT.cs
@@ -68,5 +68,15 @@ public enum VkShaderCreateFlagBitsEXT
/// VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT specifies that a fragment shader can be used with a
/// fragment density map attachment.
///
- VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x40
+ VK_SHADER_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x40,
+
+ ///
+ /// VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT specifies that the shader can be used in combination with
+ ///
+ /// https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#device-generated-commands
+ ///
+ /// .
+ ///
+ VK_SHADER_CREATE_INDIRECT_BINDABLE_BIT_EXT = 0x80
}
\ No newline at end of file
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkBufferUsageFlagBits2KHR.cs b/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkBufferUsageFlagBits2KHR.cs
index 8c05c0af..c9d0ccf6 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkBufferUsageFlagBits2KHR.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkBufferUsageFlagBits2KHR.cs
@@ -99,7 +99,9 @@ public enum VkBufferUsageFlagBits2KHR : ulong
/// , or
/// vkCmdDispatchIndirect
/// . It is also suitable for passing as the buffer member of VkIndirectCommandsStreamNV, or sequencesCountBuffer or
- /// sequencesIndexBuffer or preprocessedBuffer member of VkGeneratedCommandsInfoNV
+ /// sequencesIndexBuffer or preprocessedBuffer member of VkGeneratedCommandsInfoNV. It is also suitable for passing as
+ /// the underlying buffer of either the preprocessAddress or sequenceCountAddress members of
+ /// VkGeneratedCommandsInfoEXT.
///
VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 0x100,
@@ -241,6 +243,16 @@ public enum VkBufferUsageFlagBits2KHR : ulong
///
VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 0x1000000,
+ ///
+ /// VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT specifies that the buffer can be used as a preprocess buffer for
+ ///
+ /// Device-Generated
+ /// Commands
+ ///
+ /// .
+ ///
+ VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 0x80000000,
+
///
/// VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR specifies that the buffer is suitable for use as a
///
diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkPipelineCreateFlagBits2KHR.cs b/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkPipelineCreateFlagBits2KHR.cs
index 17caa403..a992ff03 100644
--- a/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkPipelineCreateFlagBits2KHR.cs
+++ b/src/Exomia.Vulkan.Api.Core/Extensions/KHR/VK_KHR_maintenance5/VkPipelineCreateFlagBits2KHR.cs
@@ -282,5 +282,11 @@ public enum VkPipelineCreateFlagBits2KHR : ulong
///
/// is VK_TRUE, applications should not use VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR.
///
- VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000
+ VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000,
+
+ ///
+ /// VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT specifies that the pipeline can be used in a
+ /// VkIndirectExecutionSetEXT.
+ ///
+ VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 0x4000000000
}
\ 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 68d610b2..9a790f4b 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
@@ -47,9 +47,9 @@ 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.
+ /// 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/Structs/VkPipelineLayoutCreateInfo.cs b/src/Exomia.Vulkan.Api.Core/Structs/VkPipelineLayoutCreateInfo.cs
index d5486610..64ee952e 100644
--- a/src/Exomia.Vulkan.Api.Core/Structs/VkPipelineLayoutCreateInfo.cs
+++ b/src/Exomia.Vulkan.Api.Core/Structs/VkPipelineLayoutCreateInfo.cs
@@ -21,12 +21,12 @@ namespace Exomia.Vulkan.Api.Core;
///
/// -
/// structextends
-/// VkBindDescriptorSetsInfoKHR,VkPushConstantsInfoKHR,VkPushDescriptorSetInfoKHR,VkPushDescriptorSetWithTemplateInfoKHR,VkSetDescriptorBufferOffsetsInfoEXT,VkBindDescriptorBufferEmbeddedSamplersInfoEXT
+/// VkBindDescriptorSetsInfoKHR,VkPushConstantsInfoKHR,VkPushDescriptorSetInfoKHR,VkPushDescriptorSetWithTemplateInfoKHR,VkSetDescriptorBufferOffsetsInfoEXT,VkBindDescriptorBufferEmbeddedSamplersInfoEXT,VkIndirectCommandsLayoutCreateInfoEXT
///
///
///
[VkStructExtends(
- "VkBindDescriptorSetsInfoKHR,VkPushConstantsInfoKHR,VkPushDescriptorSetInfoKHR,VkPushDescriptorSetWithTemplateInfoKHR,VkSetDescriptorBufferOffsetsInfoEXT,VkBindDescriptorBufferEmbeddedSamplersInfoEXT")]
+ "VkBindDescriptorSetsInfoKHR,VkPushConstantsInfoKHR,VkPushDescriptorSetInfoKHR,VkPushDescriptorSetWithTemplateInfoKHR,VkSetDescriptorBufferOffsetsInfoEXT,VkBindDescriptorBufferEmbeddedSamplersInfoEXT,VkIndirectCommandsLayoutCreateInfoEXT")]
[StructLayout(LayoutKind.Sequential)]
public unsafe struct VkPipelineLayoutCreateInfo
{