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