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 Workervoid 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 Workervoid 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