diff --git a/.version b/.version index 72e193a6..c47852f3 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -1.3.299 \ No newline at end of file +1.3.300 \ No newline at end of file diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkMemoryPropertyFlagBits.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkMemoryPropertyFlagBits.cs index 151a2176..5260df6b 100644 --- a/src/Exomia.Vulkan.Api.Core/Enums/VkMemoryPropertyFlagBits.cs +++ b/src/Exomia.Vulkan.Api.Core/Enums/VkMemoryPropertyFlagBits.cs @@ -68,8 +68,20 @@ public enum VkMemoryPropertyFlagBits VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x20, /// - /// VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit specifies that device accesses to allocations of this memory - /// type are automatically made available and visible. + /// VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD bit specifies that device accesses to allocations of this memory type + /// are automatically made + /// + /// available + /// and visible + /// + /// on the device. If paired with VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, + /// + /// memory + /// domain operations + /// + /// are also performed automatically between host and device. /// VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x40, diff --git a/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs b/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs index 2445b711..16e3fb15 100644 --- a/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs +++ b/src/Exomia.Vulkan.Api.Core/Enums/VkStructureType.cs @@ -5647,6 +5647,24 @@ public enum VkStructureType /// VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001, + /// + /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType + ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV = 1000593000, + + /// + /// VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType + ///
+ VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV = 1000593001, + + /// + /// VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV
+ /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#VkStructureType + ///
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV = 1000593002, + /// /// 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_mesh_shader/VkPhysicalDeviceMeshShaderFeaturesEXT.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_mesh_shader/VkPhysicalDeviceMeshShaderFeaturesEXT.cs index e4c63e81..56d26b84 100644 --- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_mesh_shader/VkPhysicalDeviceMeshShaderFeaturesEXT.cs +++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_mesh_shader/VkPhysicalDeviceMeshShaderFeaturesEXT.cs @@ -54,7 +54,7 @@ public unsafe struct VkPhysicalDeviceMeshShaderFeaturesEXT public VkBool32 meshShader; /// - /// multiviewMeshShader specifies whether the implementation supports multiviewrendering within a render pass, + /// multiviewMeshShader specifies whether the implementation supports multiview rendering within a render pass, /// with mesh shaders. If this feature is not enabled, then a pipeline compiled against a subpass with a non-zero view /// mask must not include a mesh shader. /// diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_opacity_micromap/VkExtOpacityMicromap.cs b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_opacity_micromap/VkExtOpacityMicromap.cs index 78312cd2..0aeefdf8 100644 --- a/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_opacity_micromap/VkExtOpacityMicromap.cs +++ b/src/Exomia.Vulkan.Api.Core/Extensions/EXT/VK_EXT_opacity_micromap/VkExtOpacityMicromap.cs @@ -285,7 +285,7 @@ public static readonly delegate*< /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdCopyMemoryToMicromapEXT.html ///
/// commandBuffer is the command buffer into which the command will be recorded. - /// pInfo is a pointer to a VkCopyMicromapToMemoryInfoEXTstructure defining the copy operation. + /// pInfo is a pointer to a VkCopyMemoryToMicromapInfoEXTstructure defining the copy operation. public static readonly delegate*< VkCommandBuffer /*commandBuffer*/, VkCopyMemoryToMicromapInfoEXT* /*pInfo*/, diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkCooperativeMatrixFlexibleDimensionsPropertiesNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkCooperativeMatrixFlexibleDimensionsPropertiesNV.cs new file mode 100644 index 00000000..597d2e70 --- /dev/null +++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkCooperativeMatrixFlexibleDimensionsPropertiesNV.cs @@ -0,0 +1,87 @@ +#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; + +/// +/// VkCooperativeMatrixFlexibleDimensionsPropertiesNV - Structure specifying cooperative matrix properties - +/// +/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkCooperativeMatrixFlexibleDimensionsPropertiesNV.html +/// +/// +/// +/// +/// +/// returnedonlytrue +/// +/// +/// +[StructLayout(LayoutKind.Sequential)] +public unsafe struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV +{ + /// The stype of this structure. + public const VkStructureType STYPE = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_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; + + /// + /// MGranularity is the granularity of the number of rows in matrices A, C, and Result. The rows must be an + /// integer multiple of this value. + /// + public uint MGranularity; + + /// + /// NGranularity is the granularity of columns in matrices B, C, Result. The columns must be an integer multiple + /// of this value. + /// + public uint NGranularity; + + /// + /// KGranularity is the granularity of columns in matrix A and rows in matrix B. The columns/rows must be an + /// integer multiple of this value. + /// + public uint KGranularity; + + /// AType is the component type of matrix A, of type VkComponentTypeKHR. + public VkComponentTypeKHR AType; + + /// BType is the component type of matrix B, of type VkComponentTypeKHR. + public VkComponentTypeKHR BType; + + /// CType is the component type of matrix C, of type VkComponentTypeKHR. + public VkComponentTypeKHR CType; + + /// ResultType is the component type of matrix Result, of type VkComponentTypeKHR. + public VkComponentTypeKHR ResultType; + + /// + /// saturatingAccumulation indicates whether the SaturatingAccumulation operand to + /// OpCooperativeMatrixMulAddKHRmust be present or not. If it is VK_TRUE, the SaturatingAccumulation operand must be + /// present. If it is VK_FALSE, the SaturatingAccumulation operand mustnot be present. + /// + public VkBool32 saturatingAccumulation; + + /// scope is the scope of all the matrix types, of type VkScopeKHR. + public VkScopeKHR scope; + + /// + /// workgroupInvocations is the number of invocations in the local workgroup when this combination of values is + /// supported. + /// + public uint workgroupInvocations; +} \ No newline at end of file diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkNvCooperativeMatrix2.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkNvCooperativeMatrix2.cs new file mode 100644 index 00000000..27032955 --- /dev/null +++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkNvCooperativeMatrix2.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 + +global using static Exomia.Vulkan.Api.Core.VkNvCooperativeMatrix2; + +#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_cooperative_matrix2 - device extension (nr. 594) - author 'NV' [platform '' | contact 'Jeff Bolz +/// @jeffbolznv']
+/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VK_NV_cooperative_matrix2.html +///
+[VkDepends("VK_KHR_cooperative_matrix")] +[VkDeviceExt] +public static unsafe class VkNvCooperativeMatrix2 +{ + /// The spec version. + public const uint VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION = 1; + + /// The extension name. + public const string VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME = "VK_NV_cooperative_matrix2"; + + /// + /// An UTF8 null terminated version of represented by an + /// UTF16 string. + /// + /// + /// Example usage:
+ ///
+ /// fixed(char* ptr = VK_NV_COOPERATIVE_MATRIX_2_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_COOPERATIVE_MATRIX_2_EXTENSION_NAME_UTF8_NT = + "\u4b56\u4e5f\u5f56\u4f43\u504f\u5245\u5441\u5649\u5f45\u414d\u5254\u5849\u325f\u455f\u5458\u4e45\u4953\u4e4f\u4e5f\u4d41\u0045"; + + /// + /// vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV - Returns properties describing what cooperative + /// matrix types are supported - + /// + /// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV.html + /// + /// + /// physicalDevice is the physical device. + /// + /// pPropertyCount is a pointer to an integer related to the number of cooperative matrix + /// properties available or queried. + /// + /// + /// pProperties is either NULL or a pointer to an array of + /// VkCooperativeMatrixFlexibleDimensionsPropertiesNV structures. + /// + /// + /// + /// + /// successcodesVK_SUCCESS,VK_INCOMPLETE + /// + /// + /// errorcodesVK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY + /// + /// + /// + public static readonly delegate*< + VkPhysicalDevice /*physicalDevice*/, + uint* /*pPropertyCount*/, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* /*pProperties*/, + VkResult> vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = null; + + /// Loads all function pointer based on the instance for this extension. (see remarks!) + /// The instance that the function pointers will be compatible with. + /// + /// This load method makes the following function pointers available:
+ /// + /// + /// vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV + /// + /// + ///
+ public static void Load(VkInstance instance) + { + fixed (delegate** pvkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = + &vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV) + { + *pvkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = (delegate*)GetVkFunction( + instance, + "\u6b76\u6547\u5074\u7968\u6973\u6163\u446c\u7665\u6369\u4365\u6f6f\u6570\u6172\u6974\u6576\u614d\u7274\u7869\u6c46\u7865\u6269\u656c\u6944\u656d\u736e\u6f69\u736e\u7250\u706f\u7265\u6974\u7365\u564e\u0000"); + } + } +} \ No newline at end of file diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2FeaturesNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2FeaturesNV.cs new file mode 100644 index 00000000..a72b0048 --- /dev/null +++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2FeaturesNV.cs @@ -0,0 +1,87 @@ +#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; + +/// +/// VkPhysicalDeviceCooperativeMatrix2FeaturesNV - Structure describing cooperative matrix features that can be +/// supported by an implementation - +/// +/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrix2FeaturesNV.html +/// +/// +/// +/// +/// +/// structextendsVkPhysicalDeviceFeatures2,VkDeviceCreateInfo +/// +/// +/// +[VkStructExtends("VkPhysicalDeviceFeatures2,VkDeviceCreateInfo")] +[StructLayout(LayoutKind.Sequential)] +public unsafe struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV +{ + /// The stype of this structure. + public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_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; + + /// + /// cooperativeMatrixWorkgroupScope indicates that the implementation supports workgroup scope cooperative + /// matrices. + /// + public VkBool32 cooperativeMatrixWorkgroupScope; + + /// + /// cooperativeMatrixFlexibleDimensions indicates that the implementation supports cooperative matrix sizes that + /// are a multiple of the granularity advertised in VkCooperativeMatrixFlexibleDimensionsPropertiesNV. + /// + public VkBool32 cooperativeMatrixFlexibleDimensions; + + /// + /// cooperativeMatrixReductions indicates that the implementation supports the CooperativeMatrixReductionsNV + /// SPIR-V capability. This allows performing (row, column, 2x2, or all element) reductions on matrices. + /// + public VkBool32 cooperativeMatrixReductions; + + /// + /// cooperativeMatrixConversions indicates that the implementation supports the CooperativeMatrixConversionsNV + /// SPIR-V capability. This allows converting accumulator matrices to A or B matrices. + /// + public VkBool32 cooperativeMatrixConversions; + + /// + /// cooperativeMatrixPerElementOperations indicates that the implementation supports the + /// CooperativeMatrixPerElementOperationsNVSPIR-V capability. This allows performing element-wise operations on matrix + /// elements using a callback function. + /// + public VkBool32 cooperativeMatrixPerElementOperations; + + /// + /// cooperativeMatrixTensorAddressing indicates that the implementation supports the TensorAddressingNV and + /// CooperativeMatrixTensorAddressingNV SPIR-V capabilities. This allows using tensor layout and tensor view types for + /// matrix loads and stores. + /// + public VkBool32 cooperativeMatrixTensorAddressing; + + /// + /// cooperativeMatrixBlockLoads indicates that the implementation supports the CooperativeMatrixBlockLoadsNV + /// SPIR-V capability. This allows setting block size for loads and using a callback function to decode block elements. + /// + public VkBool32 cooperativeMatrixBlockLoads; +} \ No newline at end of file diff --git a/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2PropertiesNV.cs b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2PropertiesNV.cs new file mode 100644 index 00000000..8fb3dc1f --- /dev/null +++ b/src/Exomia.Vulkan.Api.Core/Extensions/NV/VK_NV_cooperative_matrix2/VkPhysicalDeviceCooperativeMatrix2PropertiesNV.cs @@ -0,0 +1,64 @@ +#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; + +/// +/// VkPhysicalDeviceCooperativeMatrix2PropertiesNV - Structure describing cooperative matrix properties supported by an +/// implementation - +/// +/// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkPhysicalDeviceCooperativeMatrix2PropertiesNV.html +/// +/// +/// +/// +/// +/// structextendsVkPhysicalDeviceProperties2 +/// +/// +/// returnedonlytrue +/// +/// +/// +[VkStructExtends("VkPhysicalDeviceProperties2")] +[StructLayout(LayoutKind.Sequential)] +public unsafe struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV +{ + /// The stype of this structure. + public const VkStructureType STYPE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_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; + + /// + /// cooperativeMatrixWorkgroupScopeMaxWorkgroupSize is the maximum number of invocations in a workgroup when the + /// module uses OpTypeCooperativeMatrixKHR with Scope equal to Workgroup. + /// + public uint cooperativeMatrixWorkgroupScopeMaxWorkgroupSize; + + /// + /// cooperativeMatrixFlexibleDimensionsMaxDimension is the maximum supported dimension for cooperative matrix + /// types when cooperativeMatrixFlexibleDimensionsis enabled. + /// + public uint cooperativeMatrixFlexibleDimensionsMaxDimension; + + /// + /// cooperativeMatrixWorkgroupScopeReservedSharedMemory is the number of bytes of shared memory reserved for the + /// implementation when the module uses OpTypeCooperativeMatrixKHR with Scope equal to Workgroup. + /// + public uint cooperativeMatrixWorkgroupScopeReservedSharedMemory; +} \ No newline at end of file diff --git a/src/Exomia.Vulkan.Api.Core/vk.1.0.cs b/src/Exomia.Vulkan.Api.Core/vk.1.0.cs index 5202a767..0635605c 100644 --- a/src/Exomia.Vulkan.Api.Core/vk.1.0.cs +++ b/src/Exomia.Vulkan.Api.Core/vk.1.0.cs @@ -729,7 +729,7 @@ public static extern unsafe void vkFreeMemory( /// /// /// ppData is a pointer to a void* variable in which a host-accessible pointer to the beginning of the - /// mapped range is returned. This pointer minus offset must be aligned to at least + /// mapped range is returned. The value of the returned pointer minus offset must be aligned to /// VkPhysicalDeviceLimits::minMemoryMapAlignment. /// ///