Skip to content

Commit 41902c1

Browse files
committed
discover VK_NV_cooperative_matrix2
1 parent 510b461 commit 41902c1

3 files changed

Lines changed: 164 additions & 22 deletions

File tree

src/gpu.cpp

Lines changed: 114 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,9 @@ PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0;
255255
// VK_NV_cooperative_matrix
256256
PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0;
257257

258+
// VK_NV_cooperative_matrix2
259+
PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = 0;
260+
258261
// VK_NV_cooperative_vector
259262
PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV vkGetPhysicalDeviceCooperativeVectorPropertiesNV = 0;
260263

@@ -361,6 +364,7 @@ class GpuInfoPrivate
361364
int support_VK_ANDROID_external_memory_android_hardware_buffer;
362365
#endif // __ANDROID_API__ >= 26
363366
int support_VK_NV_cooperative_matrix;
367+
int support_VK_NV_cooperative_matrix2;
364368
int support_VK_NV_cooperative_vector;
365369

366370
// extension features
@@ -371,6 +375,7 @@ class GpuInfoPrivate
371375
VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR querySamplerYcbcrConversionFeatures;
372376
VkPhysicalDeviceCooperativeMatrixFeaturesKHR queryCooperativeMatrixFeatures;
373377
VkPhysicalDeviceCooperativeMatrixFeaturesNV queryCooperativeMatrixFeaturesNV;
378+
VkPhysicalDeviceCooperativeMatrix2FeaturesNV queryCooperativeMatrix2FeaturesNV;
374379
VkPhysicalDeviceShaderBfloat16FeaturesKHR queryShaderBfloat16Features;
375380
VkPhysicalDeviceShaderFloatControls2FeaturesKHR queryShaderFloatControls2Features;
376381
VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR queryShaderIntegerDotProductFeatures;
@@ -387,11 +392,13 @@ class GpuInfoPrivate
387392
VkPhysicalDeviceSubgroupProperties querySubgroupProperties;
388393
VkPhysicalDeviceDriverPropertiesKHR queryDriverProperties;
389394
VkPhysicalDeviceSubgroupSizeControlPropertiesEXT querySubgroupSizeControlProperties;
395+
VkPhysicalDeviceCooperativeMatrix2PropertiesNV queryCooperativeMatrix2PropertiesNV;
390396
VkPhysicalDeviceCooperativeVectorPropertiesNV queryCooperativeVectorPropertiesNV;
391397

392398
// extension sub properties
393399
std::vector<VkCooperativeMatrixPropertiesKHR> queryCooperativeMatrixSubProperties;
394400
std::vector<VkCooperativeMatrixPropertiesNV> queryCooperativeMatrixSubPropertiesNV;
401+
std::vector<VkCooperativeMatrixFlexibleDimensionsPropertiesNV> queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV;
395402
std::vector<VkCooperativeVectorPropertiesNV> queryCooperativeVectorSubPropertiesNV;
396403
};
397404

@@ -714,6 +721,7 @@ int GpuInfoPrivate::query_extensions()
714721
support_VK_ANDROID_external_memory_android_hardware_buffer = 0;
715722
#endif // __ANDROID_API__ >= 26
716723
support_VK_NV_cooperative_matrix = 0;
724+
support_VK_NV_cooperative_matrix2 = 0;
717725
support_VK_NV_cooperative_vector = 0;
718726
for (uint32_t j = 0; j < deviceExtensionPropertyCount; j++)
719727
{
@@ -802,6 +810,8 @@ int GpuInfoPrivate::query_extensions()
802810
#endif // __ANDROID_API__ >= 26
803811
else if (strcmp(exp.extensionName, "VK_NV_cooperative_matrix") == 0)
804812
support_VK_NV_cooperative_matrix = exp.specVersion;
813+
else if (strcmp(exp.extensionName, "VK_NV_cooperative_matrix2") == 0)
814+
support_VK_NV_cooperative_matrix2 = exp.specVersion;
805815
else if (strcmp(exp.extensionName, "VK_NV_cooperative_vector") == 0)
806816
support_VK_NV_cooperative_vector = exp.specVersion;
807817
}
@@ -885,6 +895,16 @@ void GpuInfoPrivate::query_extension_features()
885895
queryExtensionFeatures = &queryCooperativeMatrixFeaturesNV;
886896
}
887897

898+
// query nv cooperative matrix2
899+
memset(&queryCooperativeMatrix2FeaturesNV, 0, sizeof(queryCooperativeMatrix2FeaturesNV));
900+
queryCooperativeMatrix2FeaturesNV.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV;
901+
queryCooperativeMatrix2FeaturesNV.pNext = 0;
902+
if (support_VK_NV_cooperative_matrix2)
903+
{
904+
queryCooperativeMatrix2FeaturesNV.pNext = queryExtensionFeatures;
905+
queryExtensionFeatures = &queryCooperativeMatrix2FeaturesNV;
906+
}
907+
888908
// query bfloat16
889909
memset(&queryShaderBfloat16Features, 0, sizeof(queryShaderBfloat16Features));
890910
queryShaderBfloat16Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR;
@@ -1070,6 +1090,16 @@ void GpuInfoPrivate::query_extension_properties()
10701090
queryExtensionProperties = &querySubgroupSizeControlProperties;
10711091
}
10721092

1093+
// query nv cooperative matrix2
1094+
memset(&queryCooperativeMatrix2PropertiesNV, 0, sizeof(queryCooperativeMatrix2PropertiesNV));
1095+
queryCooperativeMatrix2PropertiesNV.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV;
1096+
queryCooperativeMatrix2PropertiesNV.pNext = 0;
1097+
if (support_VK_NV_cooperative_matrix2)
1098+
{
1099+
queryCooperativeMatrix2PropertiesNV.pNext = queryExtensionProperties;
1100+
queryExtensionProperties = &queryCooperativeMatrix2PropertiesNV;
1101+
}
1102+
10731103
// query nv cooperative vector
10741104
memset(&queryCooperativeVectorPropertiesNV, 0, sizeof(queryCooperativeVectorPropertiesNV));
10751105
queryCooperativeVectorPropertiesNV.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV;
@@ -1227,6 +1257,36 @@ void GpuInfoPrivate::query_extension_properties()
12271257
}
12281258
}
12291259

1260+
// query supported cooperative matrix2 types and operations
1261+
if (support_VK_NV_cooperative_matrix2 && queryCooperativeMatrix2FeaturesNV.cooperativeMatrixFlexibleDimensions)
1262+
{
1263+
uint32_t propertyCount = 0;
1264+
VkResult ret = vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(physicalDevice, &propertyCount, 0);
1265+
if (ret != VK_SUCCESS)
1266+
{
1267+
NCNN_LOGE("vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV failed %d", ret);
1268+
}
1269+
1270+
queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV.resize(propertyCount);
1271+
for (uint32_t j = 0; j < propertyCount; j++)
1272+
{
1273+
memset(&queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV[j], 0, sizeof(queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV[j]));
1274+
queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV[j].sType = VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV;
1275+
queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV[j].pNext = 0;
1276+
}
1277+
ret = vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV(physicalDevice, &propertyCount, queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV.data());
1278+
if (ret != VK_SUCCESS)
1279+
{
1280+
NCNN_LOGE("vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV failed %d", ret);
1281+
}
1282+
1283+
for (uint32_t j = 0; j < propertyCount; j++)
1284+
{
1285+
const VkCooperativeMatrixFlexibleDimensionsPropertiesNV& cmfdp = queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV[j];
1286+
// NCNN_LOGE("cmfdp %2d %2d %2d %d %d %d %d %d %d %d", cmfdp.MGranularity, cmfdp.NGranularity, cmfdp.KGranularity, cmfdp.AType, cmfdp.BType, cmfdp.CType, cmfdp.ResultType, cmfdp.saturatingAccumulation, cmfdp.scope, cmfdp.workgroupInvocations);
1287+
}
1288+
}
1289+
12301290
// query supported cooperative vector types and operations
12311291
queryCooperativeVectorSubPropertiesNV.clear();
12321292
if (support_VK_NV_cooperative_vector && queryCooperativeVectorFeaturesNV.cooperativeVector)
@@ -1827,6 +1887,11 @@ int GpuInfo::support_VK_NV_cooperative_matrix() const
18271887
return d->support_VK_NV_cooperative_matrix;
18281888
}
18291889

1890+
int GpuInfo::support_VK_NV_cooperative_matrix2() const
1891+
{
1892+
return d->support_VK_NV_cooperative_matrix2;
1893+
}
1894+
18301895
int GpuInfo::support_VK_NV_cooperative_vector() const
18311896
{
18321897
return d->support_VK_NV_cooperative_vector;
@@ -1852,11 +1917,6 @@ const VkPhysicalDeviceFloat16Int8FeaturesKHR& GpuInfo::queryFloat16Int8Features(
18521917
return d->queryFloat16Int8Features;
18531918
}
18541919

1855-
const VkPhysicalDeviceFloatControlsPropertiesKHR& GpuInfo::queryFloatControlsProperties() const
1856-
{
1857-
return d->queryFloatControlsProperties;
1858-
}
1859-
18601920
const VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR& GpuInfo::querySamplerYcbcrConversionFeatures() const
18611921
{
18621922
return d->querySamplerYcbcrConversionFeatures;
@@ -1872,6 +1932,16 @@ const VkPhysicalDeviceCooperativeMatrixFeaturesNV& GpuInfo::queryCooperativeMatr
18721932
return d->queryCooperativeMatrixFeaturesNV;
18731933
}
18741934

1935+
const VkPhysicalDeviceCooperativeMatrix2FeaturesNV& GpuInfo::queryCooperativeMatrix2FeaturesNV() const
1936+
{
1937+
return d->queryCooperativeMatrix2FeaturesNV;
1938+
}
1939+
1940+
const VkPhysicalDeviceCooperativeVectorFeaturesNV& GpuInfo::queryCooperativeVectorFeaturesNV() const
1941+
{
1942+
return d->queryCooperativeVectorFeaturesNV;
1943+
}
1944+
18751945
const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& GpuInfo::querySubgroupSizeControlFeatures() const
18761946
{
18771947
return d->querySubgroupSizeControlFeatures;
@@ -1907,39 +1977,39 @@ const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& GpuInfo::queryShaderAtomicF
19071977
return d->queryShaderAtomicFloat2Features;
19081978
}
19091979

1910-
const VkPhysicalDeviceCooperativeVectorFeaturesNV& GpuInfo::queryCooperativeVectorFeaturesNV() const
1980+
const void* GpuInfo::queryExtensionProperties() const
19111981
{
1912-
return d->queryCooperativeVectorFeaturesNV;
1982+
return d->queryExtensionProperties;
19131983
}
19141984

1915-
const void* GpuInfo::queryExtensionProperties() const
1985+
const VkPhysicalDeviceCooperativeVectorPropertiesNV& GpuInfo::queryCooperativeVectorPropertiesNV() const
19161986
{
1917-
return d->queryExtensionProperties;
1987+
return d->queryCooperativeVectorPropertiesNV;
19181988
}
19191989

1920-
const VkPhysicalDeviceShaderIntegerDotProductProperties& GpuInfo::queryShaderIntegerDotProductProperties() const
1990+
const VkPhysicalDeviceDriverPropertiesKHR& GpuInfo::queryDriverProperties() const
19211991
{
1922-
return d->queryShaderIntegerDotProductProperties;
1992+
return d->queryDriverProperties;
19231993
}
19241994

1925-
const VkPhysicalDeviceSubgroupProperties& GpuInfo::querySubgroupProperties() const
1995+
const VkPhysicalDeviceFloatControlsPropertiesKHR& GpuInfo::queryFloatControlsProperties() const
19261996
{
1927-
return d->querySubgroupProperties;
1997+
return d->queryFloatControlsProperties;
19281998
}
19291999

1930-
const VkPhysicalDeviceDriverPropertiesKHR& GpuInfo::queryDriverProperties() const
2000+
const VkPhysicalDeviceShaderIntegerDotProductProperties& GpuInfo::queryShaderIntegerDotProductProperties() const
19312001
{
1932-
return d->queryDriverProperties;
2002+
return d->queryShaderIntegerDotProductProperties;
19332003
}
19342004

1935-
const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& GpuInfo::querySubgroupSizeControlProperties() const
2005+
const VkPhysicalDeviceSubgroupProperties& GpuInfo::querySubgroupProperties() const
19362006
{
1937-
return d->querySubgroupSizeControlProperties;
2007+
return d->querySubgroupProperties;
19382008
}
19392009

1940-
const VkPhysicalDeviceCooperativeVectorPropertiesNV& GpuInfo::queryCooperativeVectorPropertiesNV() const
2010+
const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& GpuInfo::querySubgroupSizeControlProperties() const
19412011
{
1942-
return d->queryCooperativeVectorPropertiesNV;
2012+
return d->querySubgroupSizeControlProperties;
19432013
}
19442014

19452015
const std::vector<VkCooperativeMatrixPropertiesKHR>& GpuInfo::queryCooperativeMatrixSubProperties() const
@@ -1952,6 +2022,11 @@ const std::vector<VkCooperativeMatrixPropertiesNV>& GpuInfo::queryCooperativeMat
19522022
return d->queryCooperativeMatrixSubPropertiesNV;
19532023
}
19542024

2025+
const std::vector<VkCooperativeMatrixFlexibleDimensionsPropertiesNV>& GpuInfo::queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV() const
2026+
{
2027+
return d->queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV;
2028+
}
2029+
19552030
const std::vector<VkCooperativeVectorPropertiesNV>& GpuInfo::queryCooperativeVectorSubPropertiesNV() const
19562031
{
19572032
return d->queryCooperativeVectorSubPropertiesNV;
@@ -2107,6 +2182,11 @@ static int init_instance_extension()
21072182
vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV");
21082183
}
21092184

2185+
// VK_NV_cooperative_matrix2
2186+
{
2187+
vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV");
2188+
}
2189+
21102190
// VK_NV_cooperative_vector
21112191
{
21122192
vkGetPhysicalDeviceCooperativeVectorPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)vkGetInstanceProcAddr(g_instance, "vkGetPhysicalDeviceCooperativeVectorPropertiesNV");
@@ -3009,6 +3089,10 @@ VulkanDevice::VulkanDevice(int device_index)
30093089
#endif // __ANDROID_API__ >= 26
30103090
if (info.support_VK_NV_cooperative_matrix())
30113091
enabledExtensions.push_back("VK_NV_cooperative_matrix");
3092+
if (info.support_VK_NV_cooperative_matrix2())
3093+
enabledExtensions.push_back("VK_NV_cooperative_matrix2");
3094+
if (info.support_VK_NV_cooperative_vector())
3095+
enabledExtensions.push_back("VK_NV_cooperative_vector");
30123096

30133097
const void* enabledExtensionFeatures = info.queryExtensionFeatures();
30143098

@@ -4953,6 +5037,17 @@ int compile_spirv_module(const char* comp_data, int comp_data_size, const Option
49535037
DD_APPEND_FEATURE(cooperativeMatrix)
49545038
DD_APPEND_FEATURE(cooperativeMatrixRobustBufferAccess)
49555039
}
5040+
if (info.support_VK_NV_cooperative_matrix2())
5041+
{
5042+
const VkPhysicalDeviceCooperativeMatrix2FeaturesNV& features = info.queryCooperativeMatrix2FeaturesNV();
5043+
DD_APPEND_FEATURE(cooperativeMatrixWorkgroupScope)
5044+
DD_APPEND_FEATURE(cooperativeMatrixFlexibleDimensions)
5045+
DD_APPEND_FEATURE(cooperativeMatrixReductions)
5046+
DD_APPEND_FEATURE(cooperativeMatrixConversions)
5047+
DD_APPEND_FEATURE(cooperativeMatrixPerElementOperations)
5048+
DD_APPEND_FEATURE(cooperativeMatrixTensorAddressing)
5049+
DD_APPEND_FEATURE(cooperativeMatrixBlockLoads)
5050+
}
49565051
if (info.support_VK_EXT_subgroup_size_control())
49575052
{
49585053
const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& features = info.querySubgroupSizeControlFeatures();

src/gpu.h

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
182182
// VK_NV_cooperative_matrix
183183
extern PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV;
184184

185+
// VK_NV_cooperative_matrix2
186+
extern PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV;
187+
185188
// VK_NV_cooperative_vector
186189
extern PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV vkGetPhysicalDeviceCooperativeVectorPropertiesNV;
187190

@@ -350,6 +353,7 @@ class NCNN_EXPORT GpuInfo
350353
int support_VK_ANDROID_external_memory_android_hardware_buffer() const;
351354
#endif // __ANDROID_API__ >= 26
352355
int support_VK_NV_cooperative_matrix() const;
356+
int support_VK_NV_cooperative_matrix2() const;
353357
int support_VK_NV_cooperative_vector() const;
354358

355359
// extension features
@@ -360,27 +364,30 @@ class NCNN_EXPORT GpuInfo
360364
const VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR& querySamplerYcbcrConversionFeatures() const;
361365
const VkPhysicalDeviceCooperativeMatrixFeaturesKHR& queryCooperativeMatrixFeatures() const;
362366
const VkPhysicalDeviceCooperativeMatrixFeaturesNV& queryCooperativeMatrixFeaturesNV() const;
367+
const VkPhysicalDeviceCooperativeMatrix2FeaturesNV& queryCooperativeMatrix2FeaturesNV() const;
368+
const VkPhysicalDeviceCooperativeVectorFeaturesNV& queryCooperativeVectorFeaturesNV() const;
363369
const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT& querySubgroupSizeControlFeatures() const;
364370
const VkPhysicalDeviceShaderBfloat16FeaturesKHR& queryShaderBfloat16Features() const;
365371
const VkPhysicalDeviceShaderFloatControls2FeaturesKHR& queryShaderFloatControls2Features() const;
366372
const VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR& queryShaderIntegerDotProductFeatures() const;
367373
const VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR& queryShaderSubgroupRotateFeatures() const;
368374
const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT& queryShaderAtomicFloatFeatures() const;
369375
const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT& queryShaderAtomicFloat2Features() const;
370-
const VkPhysicalDeviceCooperativeVectorFeaturesNV& queryCooperativeVectorFeaturesNV() const;
371376

372377
// extension properties
373378
const void* queryExtensionProperties() const;
379+
const VkPhysicalDeviceCooperativeMatrix2PropertiesNV& queryCooperativeMatrix2PropertiesNV() const;
380+
const VkPhysicalDeviceCooperativeVectorPropertiesNV& queryCooperativeVectorPropertiesNV() const;
381+
const VkPhysicalDeviceDriverPropertiesKHR& queryDriverProperties() const;
374382
const VkPhysicalDeviceFloatControlsPropertiesKHR& queryFloatControlsProperties() const;
375383
const VkPhysicalDeviceShaderIntegerDotProductProperties& queryShaderIntegerDotProductProperties() const;
376384
const VkPhysicalDeviceSubgroupProperties& querySubgroupProperties() const;
377-
const VkPhysicalDeviceDriverPropertiesKHR& queryDriverProperties() const;
378385
const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT& querySubgroupSizeControlProperties() const;
379-
const VkPhysicalDeviceCooperativeVectorPropertiesNV& queryCooperativeVectorPropertiesNV() const;
380386

381387
// extension sub properties
382388
const std::vector<VkCooperativeMatrixPropertiesKHR>& queryCooperativeMatrixSubProperties() const;
383389
const std::vector<VkCooperativeMatrixPropertiesNV>& queryCooperativeMatrixSubPropertiesNV() const;
390+
const std::vector<VkCooperativeMatrixFlexibleDimensionsPropertiesNV>& queryCooperativeMatrixFlexibleDimensionsSubPropertiesNV() const;
384391
const std::vector<VkCooperativeVectorPropertiesNV>& queryCooperativeVectorSubPropertiesNV() const;
385392

386393
private:

src/vulkan_header_fix.h

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,4 +1575,44 @@ typedef VkResult(VKAPI_PTR* PFN_vkConvertCooperativeVectorMatrixNV)(VkDevice dev
15751575
typedef void(VKAPI_PTR* PFN_vkCmdConvertCooperativeVectorMatrixNV)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos);
15761576
#endif // VK_NV_cooperative_vector
15771577

1578+
#ifndef VK_NV_cooperative_matrix2
1579+
#define VK_NV_cooperative_matrix2 1
1580+
#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV (VkStructureType)1000593000
1581+
#define VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV (VkStructureType)1000593001
1582+
#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV (VkStructureType)1000593002
1583+
typedef struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV {
1584+
VkStructureType sType;
1585+
void* pNext;
1586+
uint32_t MGranularity;
1587+
uint32_t NGranularity;
1588+
uint32_t KGranularity;
1589+
VkComponentTypeKHR AType;
1590+
VkComponentTypeKHR BType;
1591+
VkComponentTypeKHR CType;
1592+
VkComponentTypeKHR ResultType;
1593+
VkBool32 saturatingAccumulation;
1594+
VkScopeKHR scope;
1595+
uint32_t workgroupInvocations;
1596+
} VkCooperativeMatrixFlexibleDimensionsPropertiesNV;
1597+
typedef struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV {
1598+
VkStructureType sType;
1599+
void* pNext;
1600+
VkBool32 cooperativeMatrixWorkgroupScope;
1601+
VkBool32 cooperativeMatrixFlexibleDimensions;
1602+
VkBool32 cooperativeMatrixReductions;
1603+
VkBool32 cooperativeMatrixConversions;
1604+
VkBool32 cooperativeMatrixPerElementOperations;
1605+
VkBool32 cooperativeMatrixTensorAddressing;
1606+
VkBool32 cooperativeMatrixBlockLoads;
1607+
} VkPhysicalDeviceCooperativeMatrix2FeaturesNV;
1608+
typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV {
1609+
VkStructureType sType;
1610+
void* pNext;
1611+
uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize;
1612+
uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension;
1613+
uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory;
1614+
} VkPhysicalDeviceCooperativeMatrix2PropertiesNV;
1615+
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties);
1616+
#endif // VK_NV_cooperative_matrix2
1617+
15781618
#endif // NCNN_VULKAN_HEADER_FIX_H

0 commit comments

Comments
 (0)