Skip to content

Commit e758793

Browse files
[SYCL] Support sycl::opencl::has_extension compiled with pre-C++11 ABI (#16176)
1 parent 6549b7b commit e758793

File tree

4 files changed

+39
-7
lines changed

4 files changed

+39
-7
lines changed

sycl/include/sycl/backend/opencl.hpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,21 @@
1919
namespace sycl {
2020
inline namespace _V1 {
2121
namespace opencl {
22+
namespace detail {
23+
using namespace sycl::detail;
2224
__SYCL_EXPORT bool has_extension(const sycl::platform &SyclPlatform,
23-
const std::string &Extension);
25+
detail::string_view Extension);
2426
__SYCL_EXPORT bool has_extension(const sycl::device &SyclDevice,
25-
const std::string &Extension);
27+
detail::string_view Extension);
28+
} // namespace detail
29+
inline bool has_extension(const sycl::platform &SyclPlatform,
30+
const std::string &Extension) {
31+
return detail::has_extension(SyclPlatform, detail::string_view{Extension});
32+
}
33+
inline bool has_extension(const sycl::device &SyclDevice,
34+
const std::string &Extension) {
35+
return detail::has_extension(SyclDevice, detail::string_view{Extension});
36+
}
2637
} // namespace opencl
2738
} // namespace _V1
2839
} // namespace sycl

sycl/source/backend/opencl.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
namespace sycl {
1818
inline namespace _V1 {
1919
namespace opencl {
20-
using namespace detail;
2120

2221
//----------------------------------------------------------------------------
2322
// Free functions to query OpenCL backend extensions
23+
24+
namespace detail {
25+
using namespace sycl::detail;
26+
2427
__SYCL_EXPORT bool has_extension(const sycl::platform &SyclPlatform,
25-
const std::string &Extension) {
28+
detail::string_view Extension) {
2629
if (SyclPlatform.get_backend() != sycl::backend::opencl) {
2730
throw sycl::exception(
2831
errc::backend_mismatch,
@@ -50,11 +53,12 @@ __SYCL_EXPORT bool has_extension(const sycl::platform &SyclPlatform,
5053
nullptr);
5154

5255
std::string_view ExtensionsString(Result.get());
53-
return ExtensionsString.find(Extension) != std::string::npos;
56+
return ExtensionsString.find(std::string_view{Extension.data()}) !=
57+
std::string::npos;
5458
}
5559

5660
__SYCL_EXPORT bool has_extension(const sycl::device &SyclDevice,
57-
const std::string &Extension) {
61+
detail::string_view Extension) {
5862
if (SyclDevice.get_backend() != sycl::backend::opencl) {
5963
throw sycl::exception(
6064
errc::backend_mismatch,
@@ -82,8 +86,21 @@ __SYCL_EXPORT bool has_extension(const sycl::device &SyclDevice,
8286
ResultSize, Result.get(), nullptr);
8387

8488
std::string_view ExtensionsString(Result.get());
85-
return ExtensionsString.find(Extension) != std::string::npos;
89+
return ExtensionsString.find(std::string_view{Extension.data()}) !=
90+
std::string::npos;
91+
}
92+
} // namespace detail
93+
94+
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
95+
__SYCL_EXPORT bool has_extension(const sycl::device &SyclDevice,
96+
const std::string &Extension) {
97+
return detail::has_extension(SyclDevice, detail::string_view{Extension});
98+
}
99+
__SYCL_EXPORT bool has_extension(const sycl::platform &SyclPlatform,
100+
const std::string &Extension) {
101+
return detail::has_extension(SyclPlatform, detail::string_view{Extension});
86102
}
103+
#endif
87104
} // namespace opencl
88105
} // namespace _V1
89106
} // namespace sycl

sycl/test/abi/sycl_symbols_linux.dump

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,6 +3453,8 @@ _ZN4sycl3_V16native13__divide_implENS0_3vecIfLi8EEES3_
34533453
_ZN4sycl3_V16native13__divide_implEff
34543454
_ZN4sycl3_V16opencl13has_extensionERKNS0_6deviceERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
34553455
_ZN4sycl3_V16opencl13has_extensionERKNS0_8platformERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
3456+
_ZN4sycl3_V16opencl6detail13has_extensionERKNS0_6deviceENS0_6detail11string_viewE
3457+
_ZN4sycl3_V16opencl6detail13has_extensionERKNS0_8platformENS0_6detail11string_viewE
34563458
_ZN4sycl3_V16streamC1EmmRNS0_7handlerE
34573459
_ZN4sycl3_V16streamC1EmmRNS0_7handlerERKNS0_13property_listE
34583460
_ZN4sycl3_V16streamC2EmmRNS0_7handlerE

sycl/test/abi/sycl_symbols_windows.dump

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4084,6 +4084,8 @@
40844084
?has@device@_V1@sycl@@QEBA_NW4aspect@23@@Z
40854085
?has@platform@_V1@sycl@@QEBA_NW4aspect@23@@Z
40864086
?has_context@exception@_V1@sycl@@QEBA_NXZ
4087+
?has_extension@detail@opencl@_V1@sycl@@YA_NAEBVdevice@34@Vstring_view@134@@Z
4088+
?has_extension@detail@opencl@_V1@sycl@@YA_NAEBVplatform@34@Vstring_view@134@@Z
40874089
?has_extension@device@_V1@sycl@@AEBA_NVstring_view@detail@23@@Z
40884090
?has_extension@device@_V1@sycl@@QEBA_NAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z
40894091
?has_extension@opencl@_V1@sycl@@YA_NAEBVdevice@23@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z

0 commit comments

Comments
 (0)