add a prefix to OpenCL extension names (#1311)

* add a prefix to OpenCL extension names

* fix formatting
This commit is contained in:
Ben Ashbaugh
2022-03-02 10:34:06 -08:00
committed by GitHub
parent 3c4a1a3ce6
commit bbc7ccfc58
3 changed files with 97 additions and 100 deletions

View File

@@ -95,8 +95,8 @@ typedef struct _version version_t;
struct _extensions struct _extensions
{ {
int cl_khr_fp64; int has_cl_khr_fp64;
int cl_khr_fp16; int has_cl_khr_fp16;
}; };
typedef struct _extensions extensions_t; typedef struct _extensions extensions_t;
@@ -1069,11 +1069,11 @@ int parseExtensions(char const* str, extensions_t* extensions)
} }
if (strncmp(begin, "cl_khr_fp64", length) == 0) if (strncmp(begin, "cl_khr_fp64", length) == 0)
{ {
extensions->cl_khr_fp64 = 1; extensions->has_cl_khr_fp64 = 1;
} }
if (strncmp(begin, "cl_khr_fp16", length) == 0) if (strncmp(begin, "cl_khr_fp16", length) == 0)
{ {
extensions->cl_khr_fp16 = 1; extensions->has_cl_khr_fp16 = 1;
} }
begin += length; // Skip word. begin += length; // Skip word.
if (begin[0] == ' ') if (begin[0] == ' ')
@@ -1112,13 +1112,13 @@ int getConfigInfos(cl_device_id device)
// version 1.1, we have to check doubles are sopported. In // version 1.1, we have to check doubles are sopported. In
// OpenCL 1.2 CL_DEVICE_DOUBLE_FP_CONFIG should be reported // OpenCL 1.2 CL_DEVICE_DOUBLE_FP_CONFIG should be reported
// unconditionally. // unconditionally.
get = extensions.cl_khr_fp64; get = extensions.has_cl_khr_fp64;
}; };
if (info.opcode == CL_DEVICE_HALF_FP_CONFIG) if (info.opcode == CL_DEVICE_HALF_FP_CONFIG)
{ {
// CL_DEVICE_HALF_FP_CONFIG should be reported only when cl_khr_fp16 // CL_DEVICE_HALF_FP_CONFIG should be reported only when cl_khr_fp16
// extension is available // extension is available
get = extensions.cl_khr_fp16; get = extensions.has_cl_khr_fp16;
}; };
if (get) if (get)
{ {

View File

@@ -389,6 +389,7 @@ OclExtensions OclExtensions::getDeviceCapabilities(cl_device_id devId)
{ {
ret = ret | OclExtensions::fromString(*it); ret = ret | OclExtensions::fromString(*it);
} }
return ret; return ret;
} }
@@ -399,75 +400,80 @@ OclExtensions OclExtensions::empty()
OclExtensions OclExtensions::fromString(const std::string& e) OclExtensions OclExtensions::fromString(const std::string& e)
{ {
std::string s = "OclExtensions::" + e; std::string s = "OclExtensions::has_" + e;
RETURN_IF_ENUM(s, OclExtensions::cl_khr_int64_base_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_int64_base_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_int64_extended_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_int64_extended_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_3d_image_writes); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_3d_image_writes);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_fp16); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_fp16);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_gl_sharing); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_gl_sharing);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_gl_event); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_gl_event);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_d3d10_sharing); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_d3d10_sharing);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_dx9_media_sharing); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_dx9_media_sharing);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_d3d11_sharing); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_d3d11_sharing);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_depth_images); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_depth_images);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_gl_depth_images); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_gl_depth_images);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_gl_msaa_sharing); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_gl_msaa_sharing);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_image2d_from_buffer); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_image2d_from_buffer);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_initialize_memory); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_initialize_memory);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_spir); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_spir);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_fp64); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_fp64);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_global_int32_base_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_global_int32_base_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_global_int32_extended_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_global_int32_extended_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_local_int32_base_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_local_int32_base_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_local_int32_extended_atomics); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_local_int32_extended_atomics);
RETURN_IF_ENUM(s, OclExtensions::cl_khr_byte_addressable_store); RETURN_IF_ENUM(s, OclExtensions::has_cl_khr_byte_addressable_store);
RETURN_IF_ENUM(s, OclExtensions::cles_khr_int64); RETURN_IF_ENUM(s, OclExtensions::has_cles_khr_int64);
RETURN_IF_ENUM(s, OclExtensions::cles_khr_2d_image_array_writes); RETURN_IF_ENUM(s, OclExtensions::has_cles_khr_2d_image_array_writes);
// Unknown KHR string. // Unknown KHR string.
return OclExtensions::empty(); return OclExtensions::empty();
} }
std::string OclExtensions::toString() std::string OclExtensions::toString()
{ {
#define APPEND_STR_IF_SUPPORTS(STR, E) \
#define APPEND_STR_IF_SUPPORTS( STR, E) \ if (this->supports(E)) \
if ( this->supports(E) ) \ { \
{ \ std::string ext_str(#E); \
std::string ext_str( #E ); \ std::string prefix = "OclExtensions::has_"; \
std::string prefix = "OclExtensions::"; \ size_t pos = ext_str.find(prefix); \
size_t pos = ext_str.find( prefix ); \ if (pos != std::string::npos) \
if ( pos != std::string::npos ) \ { \
{ \ ext_str.replace(pos, prefix.length(), ""); \
ext_str.replace( pos, prefix.length(), ""); \ } \
} \ STR += ext_str; \
STR += ext_str; \ STR += " "; \
} }
std::string s = ""; std::string s = "";
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_int64_base_atomics ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_int64_base_atomics);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_int64_extended_atomics ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_int64_extended_atomics);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_3d_image_writes ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_3d_image_writes);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_fp16 ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_fp16);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_gl_sharing ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_gl_sharing);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_gl_event ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_gl_event);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_d3d10_sharing ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_d3d10_sharing);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_dx9_media_sharing ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_dx9_media_sharing);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_d3d11_sharing ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_d3d11_sharing);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_depth_images ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_depth_images);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_gl_depth_images ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_gl_depth_images);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_gl_msaa_sharing ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_gl_msaa_sharing);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_image2d_from_buffer ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_image2d_from_buffer);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_initialize_memory ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_initialize_memory);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_spir ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_spir);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_fp64 ); APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_fp64);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_global_int32_base_atomics ); APPEND_STR_IF_SUPPORTS(s,
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_global_int32_extended_atomics ); OclExtensions::has_cl_khr_global_int32_base_atomics);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_local_int32_base_atomics ); APPEND_STR_IF_SUPPORTS(
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_local_int32_extended_atomics ); s, OclExtensions::has_cl_khr_global_int32_extended_atomics);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cl_khr_byte_addressable_store ); APPEND_STR_IF_SUPPORTS(s,
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cles_khr_int64 ); OclExtensions::has_cl_khr_local_int32_base_atomics);
APPEND_STR_IF_SUPPORTS( s, OclExtensions::cles_khr_2d_image_array_writes ); APPEND_STR_IF_SUPPORTS(
s, OclExtensions::has_cl_khr_local_int32_extended_atomics);
APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cl_khr_byte_addressable_store);
APPEND_STR_IF_SUPPORTS(s, OclExtensions::has_cles_khr_int64);
APPEND_STR_IF_SUPPORTS(s,
OclExtensions::has_cles_khr_2d_image_array_writes);
return s; return s;
} }

View File

@@ -113,42 +113,33 @@ private:
OclExtensions(size_t ext) : m_extVector(ext) {} OclExtensions(size_t ext) : m_extVector(ext) {}
// Fix a compilation error, since cl_khr_gl_sharing is defined as a macro.
#ifdef cl_khr_gl_sharing
#undef cl_khr_gl_sharing
#endif//cl_khr_gl_sharing
#ifdef cl_khr_icd
#undef cl_khr_icd
#endif//cl_khr_icd
enum ClKhrs enum ClKhrs
{ {
no_extensions = KhrValue<0>::Mask, no_extensions = KhrValue<0>::Mask,
cl_khr_int64_base_atomics = KhrValue<1>::Mask, has_cl_khr_int64_base_atomics = KhrValue<1>::Mask,
cl_khr_int64_extended_atomics = KhrValue<2>::Mask, has_cl_khr_int64_extended_atomics = KhrValue<2>::Mask,
cl_khr_3d_image_writes = KhrValue<3>::Mask, has_cl_khr_3d_image_writes = KhrValue<3>::Mask,
cl_khr_fp16 = KhrValue<4>::Mask, has_cl_khr_fp16 = KhrValue<4>::Mask,
cl_khr_gl_sharing = KhrValue<5>::Mask, has_cl_khr_gl_sharing = KhrValue<5>::Mask,
cl_khr_gl_event = KhrValue<6>::Mask, has_cl_khr_gl_event = KhrValue<6>::Mask,
cl_khr_d3d10_sharing = KhrValue<7>::Mask, has_cl_khr_d3d10_sharing = KhrValue<7>::Mask,
cl_khr_dx9_media_sharing = KhrValue<8>::Mask, has_cl_khr_dx9_media_sharing = KhrValue<8>::Mask,
cl_khr_d3d11_sharing = KhrValue<9>::Mask, has_cl_khr_d3d11_sharing = KhrValue<9>::Mask,
cl_khr_depth_images = KhrValue<10>::Mask, has_cl_khr_depth_images = KhrValue<10>::Mask,
cl_khr_gl_depth_images = KhrValue<11>::Mask, has_cl_khr_gl_depth_images = KhrValue<11>::Mask,
cl_khr_gl_msaa_sharing = KhrValue<12>::Mask, has_cl_khr_gl_msaa_sharing = KhrValue<12>::Mask,
cl_khr_image2d_from_buffer = KhrValue<13>::Mask, has_cl_khr_image2d_from_buffer = KhrValue<13>::Mask,
cl_khr_initialize_memory = KhrValue<14>::Mask, has_cl_khr_initialize_memory = KhrValue<14>::Mask,
cl_khr_context_abort = KhrValue<15>::Mask, has_cl_khr_context_abort = KhrValue<15>::Mask,
cl_khr_spir = KhrValue<16>::Mask, has_cl_khr_spir = KhrValue<16>::Mask,
cl_khr_fp64 = KhrValue<17>::Mask, has_cl_khr_fp64 = KhrValue<17>::Mask,
cl_khr_global_int32_base_atomics = KhrValue<18>::Mask, has_cl_khr_global_int32_base_atomics = KhrValue<18>::Mask,
cl_khr_global_int32_extended_atomics = KhrValue<19>::Mask, has_cl_khr_global_int32_extended_atomics = KhrValue<19>::Mask,
cl_khr_local_int32_base_atomics = KhrValue<20>::Mask, has_cl_khr_local_int32_base_atomics = KhrValue<20>::Mask,
cl_khr_local_int32_extended_atomics = KhrValue<21>::Mask, has_cl_khr_local_int32_extended_atomics = KhrValue<21>::Mask,
cl_khr_byte_addressable_store = KhrValue<22>::Mask, has_cl_khr_byte_addressable_store = KhrValue<22>::Mask,
cles_khr_int64 = KhrValue<23>::Mask, has_cles_khr_int64 = KhrValue<23>::Mask,
cles_khr_2d_image_array_writes = KhrValue<24>::Mask, has_cles_khr_2d_image_array_writes = KhrValue<24>::Mask,
}; };
size_t m_extVector; size_t m_extVector;