@@ -548,8 +548,8 @@ VkApplicationInfo Context::get_promoted_application_info() const
548
548
// Granite min-req is 1.1.
549
549
app_info.apiVersion = std::max (VK_API_VERSION_1_1, app_info.apiVersion );
550
550
551
- // Target Vulkan 1.3 if available.
552
- app_info.apiVersion = std::max (app_info.apiVersion , std::min (VK_API_VERSION_1_3 , volkGetInstanceVersion ()));
551
+ // Target Vulkan 1.4 if available.
552
+ app_info.apiVersion = std::max (app_info.apiVersion , std::min (VK_API_VERSION_1_4 , volkGetInstanceVersion ()));
553
553
554
554
return app_info;
555
555
}
@@ -1338,6 +1338,33 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1338
1338
}
1339
1339
}
1340
1340
1341
+ bool supports_khr_push_descriptor = false ;
1342
+
1343
+ if (ext.device_api_core_version >= VK_API_VERSION_1_4)
1344
+ {
1345
+ ADD_CHAIN (ext.vk14_features , VULKAN_1_4_FEATURES);
1346
+ }
1347
+ else
1348
+ {
1349
+ if ((flags & CONTEXT_CREATION_ENABLE_PUSH_DESCRIPTOR_BIT) != 0 && has_extension (VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME))
1350
+ {
1351
+ enabled_extensions.push_back (VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
1352
+ supports_khr_push_descriptor = true ;
1353
+ }
1354
+
1355
+ if (has_extension (VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME))
1356
+ {
1357
+ enabled_extensions.push_back (VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
1358
+ ADD_CHAIN (ext.index_type_uint8_features , INDEX_TYPE_UINT8_FEATURES_EXT);
1359
+ }
1360
+
1361
+ if (has_extension (VK_KHR_MAINTENANCE_5_EXTENSION_NAME))
1362
+ {
1363
+ enabled_extensions.push_back (VK_KHR_MAINTENANCE_5_EXTENSION_NAME);
1364
+ ADD_CHAIN (ext.maintenance5_features , MAINTENANCE_5_FEATURES_KHR);
1365
+ }
1366
+ }
1367
+
1341
1368
if (has_extension (VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME))
1342
1369
{
1343
1370
enabled_extensions.push_back (VK_KHR_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME);
@@ -1393,12 +1420,6 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1393
1420
ADD_CHAIN (ext.mesh_shader_features , MESH_SHADER_FEATURES_EXT);
1394
1421
}
1395
1422
1396
- if (has_extension (VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME))
1397
- {
1398
- enabled_extensions.push_back (VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME);
1399
- ADD_CHAIN (ext.index_type_uint8_features , INDEX_TYPE_UINT8_FEATURES_EXT);
1400
- }
1401
-
1402
1423
if (has_extension (VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME))
1403
1424
{
1404
1425
enabled_extensions.push_back (VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME);
@@ -1423,12 +1444,6 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1423
1444
ADD_CHAIN (ext.video_maintenance1_features , VIDEO_MAINTENANCE_1_FEATURES_KHR);
1424
1445
}
1425
1446
1426
- if ((flags & CONTEXT_CREATION_ENABLE_PUSH_DESCRIPTOR_BIT) != 0 && has_extension (VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME))
1427
- {
1428
- enabled_extensions.push_back (VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME);
1429
- ext.supports_push_descriptor = true ;
1430
- }
1431
-
1432
1447
if (has_extension (VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME))
1433
1448
{
1434
1449
enabled_extensions.push_back (VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME);
@@ -1464,12 +1479,6 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1464
1479
ADD_CHAIN (ext.pipeline_binary_features , PIPELINE_BINARY_FEATURES_KHR);
1465
1480
}
1466
1481
1467
- if (has_extension (VK_KHR_MAINTENANCE_5_EXTENSION_NAME))
1468
- {
1469
- enabled_extensions.push_back (VK_KHR_MAINTENANCE_5_EXTENSION_NAME);
1470
- ADD_CHAIN (ext.maintenance5_features , MAINTENANCE_5_FEATURES_KHR);
1471
- }
1472
-
1473
1482
if ((flags & CONTEXT_CREATION_ENABLE_ADVANCED_WSI_BIT) != 0 && requires_swapchain)
1474
1483
{
1475
1484
if (has_extension (VK_KHR_PRESENT_ID_EXTENSION_NAME))
@@ -1538,6 +1547,13 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1538
1547
ext.vk13_features .computeFullSubgroups = VK_TRUE;
1539
1548
if (ext.subgroup_size_control_features .subgroupSizeControl )
1540
1549
ext.vk13_features .subgroupSizeControl = VK_TRUE;
1550
+
1551
+ if (ext.maintenance5_features .maintenance5 )
1552
+ ext.vk14_features .maintenance5 = VK_TRUE;
1553
+ if (supports_khr_push_descriptor)
1554
+ ext.vk14_features .pushDescriptor = VK_TRUE;
1555
+ if (ext.index_type_uint8_features .indexTypeUint8 )
1556
+ ext.vk14_features .indexTypeUint8 = VK_TRUE;
1541
1557
// /
1542
1558
1543
1559
ext.vk11_features .multiviewGeometryShader = VK_FALSE;
@@ -1554,6 +1570,24 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1554
1570
ext.vk13_features .inlineUniformBlock = VK_FALSE;
1555
1571
ext.vk13_features .privateData = VK_FALSE;
1556
1572
1573
+ // Might be relevant when we move fully to 1.4.
1574
+ ext.vk14_features .dynamicRenderingLocalRead = VK_FALSE;
1575
+ // TODO: Maybe later.
1576
+ ext.vk14_features .hostImageCopy = VK_FALSE;
1577
+ ext.vk14_features .globalPriorityQuery = VK_FALSE;
1578
+ ext.vk14_features .pipelineProtectedAccess = VK_FALSE;
1579
+ ext.vk14_features .pipelineRobustness = VK_FALSE;
1580
+ ext.vk14_features .vertexAttributeInstanceRateDivisor = VK_FALSE;
1581
+ ext.vk14_features .vertexAttributeInstanceRateZeroDivisor = VK_FALSE;
1582
+ ext.vk14_features .stippledBresenhamLines = VK_FALSE;
1583
+ ext.vk14_features .stippledRectangularLines = VK_FALSE;
1584
+ ext.vk14_features .stippledSmoothLines = VK_FALSE;
1585
+ ext.vk14_features .rectangularLines = VK_FALSE;
1586
+ ext.vk14_features .smoothLines = VK_FALSE;
1587
+ ext.vk14_features .bresenhamLines = VK_FALSE;
1588
+ if ((flags & CONTEXT_CREATION_ENABLE_PUSH_DESCRIPTOR_BIT) == 0 )
1589
+ ext.vk14_features .pushDescriptor = VK_FALSE;
1590
+
1557
1591
ext.mesh_shader_features .primitiveFragmentShadingRateMeshShader = VK_FALSE;
1558
1592
ext.mesh_shader_features .meshShaderQueries = VK_FALSE;
1559
1593
ext.mesh_shader_features .multiviewMeshShader = VK_FALSE;
@@ -1665,6 +1699,9 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1665
1699
else if (has_extension (VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME))
1666
1700
ADD_CHAIN (size_control_props, SUBGROUP_SIZE_CONTROL_PROPERTIES);
1667
1701
1702
+ if (ext.device_api_core_version >= VK_API_VERSION_1_4)
1703
+ ADD_CHAIN (ext.vk14_props , VULKAN_1_4_PROPERTIES);
1704
+
1668
1705
if (ext.supports_external_memory_host )
1669
1706
ADD_CHAIN (ext.host_memory_properties , EXTERNAL_MEMORY_HOST_PROPERTIES_EXT);
1670
1707
@@ -1777,6 +1814,8 @@ bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface,
1777
1814
device_table.vkCreateRenderPass2 = device_table.vkCreateRenderPass2KHR ;
1778
1815
if (!device_table.vkResetQueryPool )
1779
1816
device_table.vkResetQueryPool = device_table.vkResetQueryPoolEXT ;
1817
+ if (!device_table.vkCmdPushDescriptorSetWithTemplate )
1818
+ device_table.vkCmdPushDescriptorSetWithTemplate = device_table.vkCmdPushDescriptorSetWithTemplateKHR ;
1780
1819
1781
1820
for (int i = 0 ; i < QUEUE_INDEX_COUNT; i++)
1782
1821
{
0 commit comments