clover: add support for versioned device extensions

Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7520>
This commit is contained in:
Dave Airlie 2020-10-07 13:42:26 +10:00
parent 3a9fa5b36d
commit 940e479d7d
3 changed files with 39 additions and 11 deletions

View file

@ -417,6 +417,10 @@ clGetDeviceInfo(cl_device_id d_dev, cl_device_info param,
buf.as_vector<cl_name_version>() = dev.opencl_c_all_versions();
break;
case CL_DEVICE_EXTENSIONS_WITH_VERSION:
buf.as_vector<cl_name_version>() = dev.supported_extensions();
break;
default:
throw error(CL_INVALID_VALUE);
}

View file

@ -341,19 +341,42 @@ device::supports_ir(enum pipe_shader_ir ir) const {
PIPE_SHADER_CAP_SUPPORTED_IRS) & (1 << ir);
}
std::vector<cl_name_version>
device::supported_extensions() const {
std::vector<cl_name_version> vec;
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_byte_addressable_store" } );
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_global_int32_base_atomics" } );
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_global_int32_extended_atomics" } );
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_local_int32_base_atomics" } );
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_local_int32_extended_atomics" } );
if (has_int64_atomics()) {
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_int64_base_atomics" } );
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_int64_extended_atomics" } );
}
if (has_doubles())
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_fp64" } );
if (has_halves())
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_khr_fp16" } );
if (svm_support())
vec.push_back( (cl_name_version){ CL_MAKE_VERSION(1, 0, 0), "cl_arm_shared_virtual_memory" } );
return vec;
}
std::string
device::supported_extensions_as_string() const {
return
"cl_khr_byte_addressable_store"
" cl_khr_global_int32_base_atomics"
" cl_khr_global_int32_extended_atomics"
" cl_khr_local_int32_base_atomics"
" cl_khr_local_int32_extended_atomics"
+ std::string(has_int64_atomics() ? " cl_khr_int64_base_atomics" : "")
+ std::string(has_int64_atomics() ? " cl_khr_int64_extended_atomics" : "")
+ std::string(has_doubles() ? " cl_khr_fp64" : "")
+ std::string(has_halves() ? " cl_khr_fp16" : "")
+ std::string(svm_support() ? " cl_arm_shared_virtual_memory" : "");
static std::string extensions_string;
if (!extensions_string.empty())
return extensions_string;
const auto extension_list = supported_extensions();
for (const auto &extension : extension_list) {
if (!extensions_string.empty())
extensions_string += " ";
extensions_string += extension.name;
}
return extensions_string;
}
const void *

View file

@ -94,6 +94,7 @@ namespace clover {
cl_version device_version() const;
cl_version device_clc_version() const;
std::vector<cl_name_version> opencl_c_all_versions() const;
std::vector<cl_name_version> supported_extensions() const;
friend class command_queue;
friend class root_resource;