@@ -401,16 +401,22 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
401401 // vulkan12Properties.denormBehaviorIndependence;
402402 // vulkan12Properties.denormBehaviorIndependence;
403403
404+ // ! preserve of 16bit float checked later when features are known
404405 if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat32 )
405406 return nullptr ;
406- if (!vulkan12Properties.shaderDenormPreserveFloat32 )
407- return nullptr ;
408- if (!vulkan12Properties.shaderDenormFlushToZeroFloat32 )
409- return nullptr ;
410- if (!vulkan12Properties.shaderRoundingModeRTEFloat32 )
411- return nullptr ;
412- if (!vulkan12Properties.shaderRoundingModeRTZFloat32 )
413- return nullptr ;
407+ properties.limits .shaderSignedZeroInfNanPreserveFloat64 = vulkan12Properties.shaderSignedZeroInfNanPreserveFloat64 ;
408+ properties.limits .shaderDenormPreserveFloat16 = vulkan12Properties.shaderDenormPreserveFloat16 ;
409+ properties.limits .shaderDenormPreserveFloat32 = vulkan12Properties.shaderDenormPreserveFloat32 ;
410+ properties.limits .shaderDenormPreserveFloat64 = vulkan12Properties.shaderDenormPreserveFloat64 ;
411+ properties.limits .shaderDenormFlushToZeroFloat16 = vulkan12Properties.shaderDenormFlushToZeroFloat16 ;
412+ properties.limits .shaderDenormFlushToZeroFloat32 = vulkan12Properties.shaderDenormFlushToZeroFloat32 ;
413+ properties.limits .shaderDenormFlushToZeroFloat64 = vulkan12Properties.shaderDenormFlushToZeroFloat64 ;
414+ properties.limits .shaderRoundingModeRTEFloat16 = vulkan12Properties.shaderRoundingModeRTEFloat16 ;
415+ properties.limits .shaderRoundingModeRTEFloat32 = vulkan12Properties.shaderRoundingModeRTEFloat32 ;
416+ properties.limits .shaderRoundingModeRTEFloat64 = vulkan12Properties.shaderRoundingModeRTEFloat64 ;
417+ properties.limits .shaderRoundingModeRTZFloat16 = vulkan12Properties.shaderRoundingModeRTZFloat16 ;
418+ properties.limits .shaderRoundingModeRTZFloat32 = vulkan12Properties.shaderRoundingModeRTZFloat32 ;
419+ properties.limits .shaderRoundingModeRTZFloat64 = vulkan12Properties.shaderRoundingModeRTZFloat64 ;
414420
415421 // descriptor indexing
416422 properties.limits .maxUpdateAfterBindDescriptorsInAllPools = vulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools ;
@@ -898,34 +904,15 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
898904 properties.limits .shaderSharedInt64Atomics = vulkan12Features.shaderSharedInt64Atomics ;
899905
900906 properties.limits .shaderFloat16 = vulkan12Features.shaderFloat16 ;
907+ if (!vulkan12Features.shaderFloat16 )
908+ {
909+ // only fail if 16bit floats can be used
910+ if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat16 )
911+ return nullptr ;
912+ }
913+
901914 if (!vulkan12Features.shaderInt8 )
902915 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- }
929916
930917 if (!vulkan12Features.descriptorIndexing )
931918 return nullptr ;
@@ -1918,4 +1905,4 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
19181905 return core::make_smart_refctd_ptr<CVulkanLogicalDevice>(core::smart_refctd_ptr<const IAPIConnection>(m_initData.api ),m_rdoc_api,this ,vk_device,params);
19191906}
19201907
1921- }
1908+ }
0 commit comments