xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/CLExtensions.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // CLExtensions.cpp: Implements the struct methods for CLExtension.
7*8975f5c5SAndroid Build Coastguard Worker 
8*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLExtensions.h"
9*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/cl_types.h"
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "common/string_utils.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker namespace rx
14*8975f5c5SAndroid Build Coastguard Worker {
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker CLExtensions::CLExtensions() = default;
17*8975f5c5SAndroid Build Coastguard Worker 
18*8975f5c5SAndroid Build Coastguard Worker CLExtensions::~CLExtensions() = default;
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker CLExtensions::CLExtensions(CLExtensions &&) = default;
21*8975f5c5SAndroid Build Coastguard Worker 
22*8975f5c5SAndroid Build Coastguard Worker CLExtensions &CLExtensions::operator=(CLExtensions &&) = default;
23*8975f5c5SAndroid Build Coastguard Worker 
initializeExtensions(std::string && extensionStr)24*8975f5c5SAndroid Build Coastguard Worker void CLExtensions::initializeExtensions(std::string &&extensionStr)
25*8975f5c5SAndroid Build Coastguard Worker {
26*8975f5c5SAndroid Build Coastguard Worker     ASSERT(extensions.empty());
27*8975f5c5SAndroid Build Coastguard Worker 
28*8975f5c5SAndroid Build Coastguard Worker     extensions.assign(std::move(extensionStr));
29*8975f5c5SAndroid Build Coastguard Worker     if (extensions.empty())
30*8975f5c5SAndroid Build Coastguard Worker     {
31*8975f5c5SAndroid Build Coastguard Worker         return;
32*8975f5c5SAndroid Build Coastguard Worker     }
33*8975f5c5SAndroid Build Coastguard Worker 
34*8975f5c5SAndroid Build Coastguard Worker     auto hasExtension = [&](const std::string &extension) {
35*8975f5c5SAndroid Build Coastguard Worker         return angle::ContainsToken(extensions, ' ', extension);
36*8975f5c5SAndroid Build Coastguard Worker     };
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     khrByteAddressableStore       = hasExtension("cl_khr_byte_addressable_store");
39*8975f5c5SAndroid Build Coastguard Worker     khrGlobalInt32BaseAtomics     = hasExtension("cl_khr_global_int32_base_atomics");
40*8975f5c5SAndroid Build Coastguard Worker     khrGlobalInt32ExtendedAtomics = hasExtension("cl_khr_global_int32_extended_atomics");
41*8975f5c5SAndroid Build Coastguard Worker     khrLocalInt32BaseAtomics      = hasExtension("cl_khr_local_int32_base_atomics");
42*8975f5c5SAndroid Build Coastguard Worker     khrLocalInt32ExtendedAtomics  = hasExtension("cl_khr_local_int32_extended_atomics");
43*8975f5c5SAndroid Build Coastguard Worker 
44*8975f5c5SAndroid Build Coastguard Worker     khr3D_ImageWrites     = hasExtension("cl_khr_3d_image_writes");
45*8975f5c5SAndroid Build Coastguard Worker     khrDepthImages        = hasExtension("cl_khr_depth_images");
46*8975f5c5SAndroid Build Coastguard Worker     khrImage2D_FromBuffer = hasExtension("cl_khr_image2d_from_buffer");
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker     khrExtendedVersioning   = hasExtension("cl_khr_extended_versioning");
49*8975f5c5SAndroid Build Coastguard Worker     khrFP64                 = hasExtension("cl_khr_fp64");
50*8975f5c5SAndroid Build Coastguard Worker     khrICD                  = hasExtension("cl_khr_icd");
51*8975f5c5SAndroid Build Coastguard Worker     khrInt64BaseAtomics     = hasExtension("cl_khr_int64_base_atomics");
52*8975f5c5SAndroid Build Coastguard Worker     khrInt64ExtendedAtomics = hasExtension("cl_khr_int64_extended_atomics");
53*8975f5c5SAndroid Build Coastguard Worker }
54*8975f5c5SAndroid Build Coastguard Worker 
initializeVersionedExtensions(const NameVersionVector & versionedExtList)55*8975f5c5SAndroid Build Coastguard Worker void CLExtensions::initializeVersionedExtensions(const NameVersionVector &versionedExtList)
56*8975f5c5SAndroid Build Coastguard Worker {
57*8975f5c5SAndroid Build Coastguard Worker     ASSERT(extensionsWithVersion.empty());
58*8975f5c5SAndroid Build Coastguard Worker     ASSERT(extensions.empty());
59*8975f5c5SAndroid Build Coastguard Worker 
60*8975f5c5SAndroid Build Coastguard Worker     extensionsWithVersion = std::move(versionedExtList);
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     std::string extensionString = "";
63*8975f5c5SAndroid Build Coastguard Worker     for (cl_name_version ext : extensionsWithVersion)
64*8975f5c5SAndroid Build Coastguard Worker     {
65*8975f5c5SAndroid Build Coastguard Worker         extensionString += ext.name;
66*8975f5c5SAndroid Build Coastguard Worker         extensionString += " ";
67*8975f5c5SAndroid Build Coastguard Worker     }
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     return initializeExtensions(std::move(extensionString));
70*8975f5c5SAndroid Build Coastguard Worker }
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
73