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