Skip to content

Commit a64de74

Browse files
committed
video: hoist vulkan12Properties scope
Signed-off-by: Ali Cheraghi <alichraghi@proton.me>
1 parent 880e6c2 commit a64de74

File tree

2 files changed

+74
-70
lines changed

2 files changed

+74
-70
lines changed

src/nbl/video/CVulkanPhysicalDevice.cpp

Lines changed: 68 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -278,40 +278,41 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
278278
};
279279

280280
// Get physical device's limits/properties
281-
{
282-
VkPhysicalDeviceProperties2 deviceProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 };
283-
setPNextChainTail(&deviceProperties2);
284-
// !! Our minimum supported Vulkan version is 1.1, no need to check anything before using `vulkan11Properties`
285-
VkPhysicalDeviceVulkan11Properties vulkan11Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES };
286-
addToPNextChain(&vulkan11Properties);
287-
//! Declare all the property structs before so they don't go out of scope
288-
//! Provided by Vk 1.2
289-
VkPhysicalDeviceVulkan12Properties vulkan12Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES };
290-
addToPNextChain(&vulkan12Properties);
291-
//! Provided by Vk 1.3
292-
VkPhysicalDeviceVulkan13Properties vulkan13Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES };
293-
addToPNextChain(&vulkan13Properties);
294-
//! Required by Nabla Core Profile
295-
VkPhysicalDeviceExternalMemoryHostPropertiesEXT externalMemoryHostProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT };
296-
VkPhysicalDeviceRobustness2PropertiesEXT robustness2Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT };
297-
addToPNextChain(&robustness2Properties);
298-
//! Extensions (ordered by spec extension number)
299-
VkPhysicalDeviceConservativeRasterizationPropertiesEXT conservativeRasterizationProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT };
300-
VkPhysicalDeviceDiscardRectanglePropertiesEXT discardRectangleProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT };
301-
VkPhysicalDeviceSampleLocationsPropertiesEXT sampleLocationsProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT };
302-
VkPhysicalDeviceAccelerationStructurePropertiesKHR accelerationStructureProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR };
303-
VkPhysicalDevicePCIBusInfoPropertiesEXT PCIBusInfoProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT };
304-
VkPhysicalDeviceFragmentDensityMapPropertiesEXT fragmentDensityMapProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT };
305-
VkPhysicalDeviceLineRasterizationPropertiesEXT lineRasterizationProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT };
306-
//VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV deviceGeneratedCommandsPropertiesNV = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV };
307-
//VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphicsPipelineLibraryProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT };
308-
VkPhysicalDeviceFragmentDensityMap2PropertiesEXT fragmentDensityMap2Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT };
309-
VkPhysicalDeviceRayTracingPipelinePropertiesKHR rayTracingPipelineProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR };
310-
VkPhysicalDeviceCooperativeMatrixPropertiesKHR cooperativeMatrixProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR };
311-
VkPhysicalDeviceShaderSMBuiltinsPropertiesNV shaderSMBuiltinsPropertiesNV = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV };
312-
VkPhysicalDeviceShaderCoreProperties2AMD shaderCoreProperties2AMD = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD };
313-
VkPhysicalDeviceMaintenance5PropertiesKHR maintenance5Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR };
314-
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphicsPipelineLibraryProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT };
281+
VkPhysicalDeviceProperties2 deviceProperties2 = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 };
282+
setPNextChainTail(&deviceProperties2);
283+
// !! Our minimum supported Vulkan version is 1.1, no need to check anything before using `vulkan11Properties`
284+
VkPhysicalDeviceVulkan11Properties vulkan11Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES };
285+
addToPNextChain(&vulkan11Properties);
286+
//! Declare all the property structs before so they don't go out of scope
287+
//! Provided by Vk 1.2
288+
VkPhysicalDeviceVulkan12Properties vulkan12Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES };
289+
addToPNextChain(&vulkan12Properties);
290+
//! Provided by Vk 1.3
291+
VkPhysicalDeviceVulkan13Properties vulkan13Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES };
292+
addToPNextChain(&vulkan13Properties);
293+
//! Required by Nabla Core Profile
294+
VkPhysicalDeviceExternalMemoryHostPropertiesEXT externalMemoryHostProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT };
295+
VkPhysicalDeviceRobustness2PropertiesEXT robustness2Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT };
296+
addToPNextChain(&robustness2Properties);
297+
//! Extensions (ordered by spec extension number)
298+
VkPhysicalDeviceConservativeRasterizationPropertiesEXT conservativeRasterizationProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT };
299+
VkPhysicalDeviceDiscardRectanglePropertiesEXT discardRectangleProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT };
300+
VkPhysicalDeviceSampleLocationsPropertiesEXT sampleLocationsProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT };
301+
VkPhysicalDeviceAccelerationStructurePropertiesKHR accelerationStructureProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR };
302+
VkPhysicalDevicePCIBusInfoPropertiesEXT PCIBusInfoProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT };
303+
VkPhysicalDeviceFragmentDensityMapPropertiesEXT fragmentDensityMapProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT };
304+
VkPhysicalDeviceLineRasterizationPropertiesEXT lineRasterizationProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT };
305+
//VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV deviceGeneratedCommandsPropertiesNV = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV };
306+
//VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphicsPipelineLibraryProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT };
307+
VkPhysicalDeviceFragmentDensityMap2PropertiesEXT fragmentDensityMap2Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT };
308+
VkPhysicalDeviceRayTracingPipelinePropertiesKHR rayTracingPipelineProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR };
309+
VkPhysicalDeviceCooperativeMatrixPropertiesKHR cooperativeMatrixProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR };
310+
VkPhysicalDeviceShaderSMBuiltinsPropertiesNV shaderSMBuiltinsPropertiesNV = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV };
311+
VkPhysicalDeviceShaderCoreProperties2AMD shaderCoreProperties2AMD = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD };
312+
VkPhysicalDeviceMaintenance5PropertiesKHR maintenance5Properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR };
313+
VkPhysicalDeviceGraphicsPipelineLibraryPropertiesEXT graphicsPipelineLibraryProperties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_PROPERTIES_EXT };
314+
315+
{
315316
//! Because Renderdoc is special and instead of ignoring extensions it whitelists them
316317
if (isExtensionSupported(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME))
317318
addToPNextChain(&externalMemoryHostProperties);
@@ -411,32 +412,6 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
411412
if (!vulkan12Properties.shaderRoundingModeRTZFloat32)
412413
return nullptr;
413414

414-
if (properties.limits.shaderFloat16) {
415-
if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat16)
416-
return nullptr;
417-
if (!vulkan12Properties.shaderDenormPreserveFloat16)
418-
return nullptr;
419-
if (!vulkan12Properties.shaderDenormFlushToZeroFloat16)
420-
return nullptr;
421-
if (!vulkan12Properties.shaderRoundingModeRTEFloat16)
422-
return nullptr;
423-
if (!vulkan12Properties.shaderRoundingModeRTZFloat16)
424-
return nullptr;
425-
}
426-
427-
if (properties.limits.shaderFloat64) {
428-
if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat64)
429-
return nullptr;
430-
if (!vulkan12Properties.shaderDenormPreserveFloat64)
431-
return nullptr;
432-
if (!vulkan12Properties.shaderDenormFlushToZeroFloat64)
433-
return nullptr;
434-
if (!vulkan12Properties.shaderRoundingModeRTEFloat64)
435-
return nullptr;
436-
if (!vulkan12Properties.shaderRoundingModeRTZFloat64)
437-
return nullptr;
438-
}
439-
440415
// descriptor indexing
441416
properties.limits.maxUpdateAfterBindDescriptorsInAllPools = vulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools;
442417
properties.limits.shaderUniformBufferArrayNonUniformIndexingNative = vulkan12Properties.shaderUniformBufferArrayNonUniformIndexingNative;
@@ -925,6 +900,32 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
925900
properties.limits.shaderFloat16 = vulkan12Features.shaderFloat16;
926901
if (!vulkan12Features.shaderInt8)
927902
return nullptr;
903+
904+
if (properties.limits.shaderFloat16) {
905+
if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat16)
906+
return nullptr;
907+
if (!vulkan12Properties.shaderDenormPreserveFloat16)
908+
return nullptr;
909+
if (!vulkan12Properties.shaderDenormFlushToZeroFloat16)
910+
return nullptr;
911+
if (!vulkan12Properties.shaderRoundingModeRTEFloat16)
912+
return nullptr;
913+
if (!vulkan12Properties.shaderRoundingModeRTZFloat16)
914+
return nullptr;
915+
}
916+
917+
if (properties.limits.shaderFloat64) {
918+
if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat64)
919+
return nullptr;
920+
if (!vulkan12Properties.shaderDenormPreserveFloat64)
921+
return nullptr;
922+
if (!vulkan12Properties.shaderDenormFlushToZeroFloat64)
923+
return nullptr;
924+
if (!vulkan12Properties.shaderRoundingModeRTEFloat64)
925+
return nullptr;
926+
if (!vulkan12Properties.shaderRoundingModeRTZFloat64)
927+
return nullptr;
928+
}
928929

929930
if (!vulkan12Features.descriptorIndexing)
930931
return nullptr;
@@ -933,9 +934,9 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
933934
if (!vulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing || !vulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing)
934935
return nullptr;
935936
// not uniform at all
936-
if (!vulkan12Features.shaderUniformBufferArrayNonUniformIndexing || !vulkan12Features.shaderSampledImageArrayNonUniformIndexing || !vulkan12Features.shaderStorageBufferArrayNonUniformIndexing || !vulkan12Features.shaderStorageImageArrayNonUniformIndexing)
937+
if (!vulkan12Features.shaderSampledImageArrayNonUniformIndexing || !vulkan12Features.shaderStorageBufferArrayNonUniformIndexing || !vulkan12Features.shaderStorageImageArrayNonUniformIndexing)
937938
return nullptr;
938-
if (!vulkan12Features.shaderInputAttachmentArrayNonUniformIndexing || !vulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing || !vulkan12Features.shaderStorageTexelBufferArrayNonUniformIndexing)
939+
if (!vulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing || !vulkan12Features.shaderStorageTexelBufferArrayNonUniformIndexing)
939940
return nullptr;
940941
// update after bind
941942
properties.limits.descriptorBindingUniformBufferUpdateAfterBind = vulkan12Features.descriptorBindingUniformBufferUpdateAfterBind;
@@ -1609,7 +1610,7 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
16091610
VkPhysicalDeviceMaintenance5FeaturesKHR maintenance5Features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR, nullptr };
16101611
VkPhysicalDeviceGraphicsPipelineLibraryFeaturesEXT graphicsPipelineLibraryFeatures = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GRAPHICS_PIPELINE_LIBRARY_FEATURES_EXT, nullptr };
16111612

1612-
enableExtensionIfAvailable(VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, nullptr);
1613+
const auto pipelineLibraryEnabled = enableExtensionIfAvailable(VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME, nullptr);
16131614

16141615
// Enable maintenance5 and graphics pipeline libraries as backup if available
16151616
if (enableExtensionIfAvailable(VK_KHR_MAINTENANCE_5_EXTENSION_NAME, &maintenance5Features))
@@ -1618,8 +1619,11 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
16181619
}
16191620
else
16201621
{
1622+
if (!enableExtensionIfAvailable(VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, &graphicsPipelineLibraryFeatures)) {
1623+
return nullptr;
1624+
}
1625+
assert(pipelineLibraryEnabled);
16211626
graphicsPipelineLibraryFeatures.graphicsPipelineLibrary = true;
1622-
enableExtensionIfAvailable(VK_EXT_GRAPHICS_PIPELINE_LIBRARY_EXTENSION_NAME, &graphicsPipelineLibraryFeatures);
16231627
}
16241628

16251629
#undef REQUIRE_EXTENSION_IF

src/nbl/video/device_capabilities/device_limits.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -910,7 +910,7 @@
910910
"type": "bool",
911911
"name": "shaderSignedZeroInfNanPreserveFloat32",
912912
"value": true,
913-
"expose": "DISABLE"
913+
"expose": "REQUIRE"
914914
},
915915
{
916916
"type": "bool",
@@ -928,7 +928,7 @@
928928
"type": "bool",
929929
"name": "shaderDenormPreserveFloat32",
930930
"value": true,
931-
"expose": "DISABLE"
931+
"expose": "REQUIRE"
932932
},
933933
{
934934
"type": "bool",
@@ -946,7 +946,7 @@
946946
"type": "bool",
947947
"name": "shaderDenormFlushToZeroFloat32",
948948
"value": true,
949-
"expose": "DISABLE"
949+
"expose": "REQUIRE"
950950
},
951951
{
952952
"type": "bool",
@@ -964,7 +964,7 @@
964964
"type": "bool",
965965
"name": "shaderRoundingModeRTEFloat32",
966966
"value": true,
967-
"expose": "DISABLE"
967+
"expose": "REQUIRE"
968968
},
969969
{
970970
"type": "bool",
@@ -982,7 +982,7 @@
982982
"type": "bool",
983983
"name": "shaderRoundingModeRTZFloat32",
984984
"value": true,
985-
"expose": "DISABLE"
985+
"expose": "REQUIRE"
986986
},
987987
{
988988
"type": "bool",
@@ -1189,7 +1189,7 @@
11891189
{
11901190
"type": "uint8_t",
11911191
"name": "minSubgroupSize",
1192-
"value": "32",
1192+
"value": "128",
11931193
"compare": "REVERSE"
11941194
},
11951195
{

0 commit comments

Comments
 (0)