File tree 3 files changed +23
-7
lines changed
3 files changed +23
-7
lines changed Original file line number Diff line number Diff line change @@ -620,25 +620,30 @@ cl_int CLVK_API_CALL clGetDeviceInfo(cl_device_id dev,
620
620
copy_ptr = &val_ulong;
621
621
size_ret = sizeof (val_ulong);
622
622
break ;
623
+ // FIXME can we do better for vector width queries?
623
624
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR:
624
625
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT:
625
626
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT:
626
627
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG:
627
628
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT:
628
- case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF:
629
629
case CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR:
630
630
case CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT:
631
631
case CL_DEVICE_NATIVE_VECTOR_WIDTH_INT:
632
632
case CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG:
633
633
case CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT:
634
+ val_uint = 1 ;
635
+ copy_ptr = &val_uint;
636
+ size_ret = sizeof (val_uint);
637
+ break ;
638
+ case CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF:
634
639
case CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF:
635
- val_uint = 1 ; // FIXME can we do better?
640
+ val_uint = device-> supports_fp16 () ? 1 : 0 ;
636
641
copy_ptr = &val_uint;
637
642
size_ret = sizeof (val_uint);
638
643
break ;
639
644
case CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE:
640
645
case CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE:
641
- val_uint = 0 ;
646
+ val_uint = device-> supports_fp64 () ? 1 : 0 ;
642
647
copy_ptr = &val_uint;
643
648
size_ret = sizeof (val_uint);
644
649
break ;
Original file line number Diff line number Diff line change @@ -661,6 +661,10 @@ void cvk_device::build_extension_ils_list() {
661
661
m_extensions.push_back (MAKE_NAME_VERSION (1 , 0 , 0 , " cl_khr_fp16" ));
662
662
}
663
663
664
+ if (supports_fp64 ()) {
665
+ m_extensions.push_back (MAKE_NAME_VERSION (1 , 0 , 0 , " cl_khr_fp64" ));
666
+ }
667
+
664
668
// Enable 8-bit integer support if possible
665
669
if ((is_vulkan_extension_enabled (VK_KHR_8BIT_STORAGE_EXTENSION_NAME) &&
666
670
m_features_8bit_storage.storageBuffer8BitAccess ) &&
@@ -794,8 +798,7 @@ void cvk_device::build_extension_ils_list() {
794
798
m_opencl_c_features.push_back (
795
799
MAKE_NAME_VERSION (3 , 0 , 0 , " __opencl_c_int64" ));
796
800
}
797
- if (m_features.features .shaderFloat64 ) {
798
- m_has_fp64_support = true ;
801
+ if (supports_fp64 ()) {
799
802
m_opencl_c_features.push_back (
800
803
MAKE_NAME_VERSION (3 , 0 , 0 , " __opencl_c_fp64" ));
801
804
}
Original file line number Diff line number Diff line change @@ -438,7 +438,10 @@ struct cvk_device : public _cl_device_id,
438
438
439
439
bool supports_fp16 () const { return m_has_fp16_support; }
440
440
441
- bool supports_fp64 () const { return m_has_fp64_support; }
441
+ // TODO(kpet): support FP64 (clspv has very little support)
442
+ bool supports_fp64 () const {
443
+ return 0 && m_features.features .shaderFloat64 ;
444
+ }
442
445
443
446
bool supports_int8 () const { return m_has_int8_support; }
444
447
@@ -558,6 +561,12 @@ struct cvk_device : public _cl_device_id,
558
561
return CL_FP_ROUND_TO_NEAREST | CL_FP_INF_NAN | CL_FP_FMA;
559
562
}
560
563
564
+ if ((fptype == CL_DEVICE_DOUBLE_FP_CONFIG) && supports_fp64 ()) {
565
+ return CL_FP_ROUND_TO_NEAREST | CL_FP_ROUND_TO_ZERO |
566
+ CL_FP_ROUND_TO_INF | CL_FP_INF_NAN | CL_FP_FMA |
567
+ CL_FP_DENORM;
568
+ }
569
+
561
570
return 0 ;
562
571
}
563
572
@@ -794,7 +803,6 @@ struct cvk_device : public _cl_device_id,
794
803
795
804
bool m_has_timer_support{};
796
805
bool m_has_fp16_support{};
797
- bool m_has_fp64_support{};
798
806
bool m_has_int8_support{};
799
807
bool m_has_subgroups_support{};
800
808
bool m_has_subgroup_size_selection{};
You can’t perform that action at this time.
0 commit comments