@@ -401,16 +401,22 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
401
401
// vulkan12Properties.denormBehaviorIndependence;
402
402
// vulkan12Properties.denormBehaviorIndependence;
403
403
404
+ // ! preserve of 16bit float checked later when features are known
404
405
if (!vulkan12Properties.shaderSignedZeroInfNanPreserveFloat32 )
405
406
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 ;
414
420
415
421
// descriptor indexing
416
422
properties.limits .maxUpdateAfterBindDescriptorsInAllPools = vulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools ;
@@ -898,34 +904,15 @@ std::unique_ptr<CVulkanPhysicalDevice> CVulkanPhysicalDevice::create(core::smart
898
904
properties.limits .shaderSharedInt64Atomics = vulkan12Features.shaderSharedInt64Atomics ;
899
905
900
906
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
+
901
914
if (!vulkan12Features.shaderInt8 )
902
915
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
- }
929
916
930
917
if (!vulkan12Features.descriptorIndexing )
931
918
return nullptr ;
@@ -1918,4 +1905,4 @@ core::smart_refctd_ptr<ILogicalDevice> CVulkanPhysicalDevice::createLogicalDevic
1918
1905
return core::make_smart_refctd_ptr<CVulkanLogicalDevice>(core::smart_refctd_ptr<const IAPIConnection>(m_initData.api ),m_rdoc_api,this ,vk_device,params);
1919
1906
}
1920
1907
1921
- }
1908
+ }
0 commit comments