// // Copyright 2022 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // system_info_util.h: // Implementation of common test utilities for operating with SystemInfo. // #include "system_info_util.h" #include "common/debug.h" #include "common/string_utils.h" #include "gpu_info_util/SystemInfo.h" #include "util/util_gl.h" using namespace angle; namespace { size_t findGPU(const SystemInfo &systemInfo, bool lowPower) { if (systemInfo.gpus.size() < 2) { return 0; } for (size_t i = 0; i < systemInfo.gpus.size(); ++i) { if (lowPower && IsIntel(systemInfo.gpus[i].vendorId)) { return i; } // Return the high power GPU, i.e any non-intel GPU else if (!lowPower && !IsIntel(systemInfo.gpus[i].vendorId)) { return i; } } // Can't find GPU ASSERT(false); return 0; } } // namespace size_t FindLowPowerGPU(const SystemInfo &systemInfo) { return findGPU(systemInfo, true); } size_t FindHighPowerGPU(const SystemInfo &systemInfo) { return findGPU(systemInfo, false); } size_t FindActiveOpenGLGPU(const SystemInfo &systemInfo) { char *renderer = (char *)glGetString(GL_RENDERER); std::string rendererString(renderer); for (size_t i = 0; i < systemInfo.gpus.size(); ++i) { std::vector vendorTokens; angle::SplitStringAlongWhitespace(VendorName(systemInfo.gpus[i].vendorId), &vendorTokens); for (std::string &token : vendorTokens) { if (rendererString.find(token) != std::string::npos) { return i; } } } // Can't find active GPU ASSERT(false); return 0; }