@@ -255,6 +255,9 @@ PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR = 0;
255255// VK_NV_cooperative_matrix
256256PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = 0 ;
257257
258+ // VK_NV_cooperative_matrix2
259+ PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV = 0 ;
260+
258261// VK_NV_cooperative_vector
259262PFN_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+
18301895int 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-
18601920const 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+
18751945const 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
19452015const 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+
19552030const 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 ();
0 commit comments