|
1 | 1 | /* |
2 | | - * Copyright (c) 2018-2024 Arm Limited. |
| 2 | + * Copyright (c) 2018-2025 Arm Limited. |
3 | 3 | * |
4 | 4 | * SPDX-License-Identifier: MIT |
5 | 5 | * |
@@ -52,20 +52,22 @@ GPUTarget get_gpu_target(const std::string &full_name, const std::string &base_n |
52 | 52 | {"G72", GPUTarget::G72}, // |
53 | 53 | {"G76", GPUTarget::G76}, // |
54 | 54 | // Vallhall |
55 | | - {"G57", GPUTarget::G57}, // |
56 | | - {"G77", GPUTarget::G77}, // |
57 | | - {"G68", GPUTarget::G68}, // |
58 | | - {"G78", GPUTarget::G78}, // |
59 | | - {"G78AE", GPUTarget::G78AE}, // |
60 | | - {"G310", GPUTarget::G310}, // |
61 | | - {"G510", GPUTarget::G510}, // |
62 | | - {"G610", GPUTarget::G610}, // |
63 | | - {"G710", GPUTarget::G710}, // |
64 | | - {"G615", GPUTarget::G615}, // |
65 | | - {"G715", GPUTarget::G715}, // |
| 55 | + {"G57", GPUTarget::G57}, // |
| 56 | + {"G77", GPUTarget::G77}, // |
| 57 | + {"G68", GPUTarget::G68}, // |
| 58 | + {"G78", GPUTarget::G78}, // |
| 59 | + {"G78AE", GPUTarget::G78AE}, // |
| 60 | + {"G310", GPUTarget::G310}, // |
| 61 | + {"G510", GPUTarget::G510}, // |
| 62 | + {"G610", GPUTarget::G610}, // |
| 63 | + {"G710", GPUTarget::G710}, // |
| 64 | + {"G615", GPUTarget::G615}, // |
| 65 | + {"G715", GPUTarget::G715}, // |
| 66 | + {"Immortalis-G715", GPUTarget::G715}, // |
66 | 67 | // 5th Gen |
67 | | - {"G620", GPUTarget::G620}, // |
68 | | - {"G720", GPUTarget::G720}, // |
| 68 | + {"G620", GPUTarget::G620}, // |
| 69 | + {"G720", GPUTarget::G720}, // |
| 70 | + {"Immortalis-G720", GPUTarget::G720}, // |
69 | 71 |
|
70 | 72 | }; |
71 | 73 | // Try full name with variant. |
@@ -120,19 +122,38 @@ const std::string &string_from_target(GPUTarget target) |
120 | 122 |
|
121 | 123 | GPUTarget get_target_from_name(const std::string &device_name) |
122 | 124 | { |
123 | | - std::regex mali_regex(R"(Mali-(([A-Za-z]+\d*)\w*))"); |
124 | | - std::smatch name_parts; |
125 | | - const bool found_mali = std::regex_search(device_name, name_parts, mali_regex); |
126 | | - if (!found_mali) |
| 125 | + std::regex mali_regex(R"(Mali-(([A-Za-z]+\d*)\w*))"); |
| 126 | + std::regex immortalis_regex(R"(Immortalis-(([A-Za-z]+\d*)\w*))"); |
| 127 | + |
| 128 | + std::smatch name_parts_mali; |
| 129 | + std::smatch name_parts_immortalis; |
| 130 | + |
| 131 | + const bool found_mali = std::regex_search(device_name, name_parts_mali, mali_regex); |
| 132 | + const bool found_immortalis = std::regex_search(device_name, name_parts_immortalis, immortalis_regex); |
| 133 | + |
| 134 | + if (!found_mali && !found_immortalis) |
127 | 135 | { |
128 | 136 | ARM_COMPUTE_LOG_INFO_MSG_WITH_FORMAT_CORE("Can't find valid Arm® Mali™ GPU device name: %s. " |
129 | 137 | "Target is set to default: %s", |
130 | 138 | device_name.c_str(), string_from_target(GPUTarget::FIFTHGEN).c_str()); |
131 | 139 | return GPUTarget::FIFTHGEN; |
132 | 140 | } |
133 | | - const auto &full_name = name_parts.str(1); |
134 | | - const auto &base_name = name_parts.str(2); |
135 | | - const auto gpu_target = get_gpu_target(full_name, base_name); |
| 141 | + |
| 142 | + std::string full_name; |
| 143 | + std::string base_name; |
| 144 | + |
| 145 | + if (found_mali) |
| 146 | + { |
| 147 | + full_name = name_parts_mali.str(1); |
| 148 | + base_name = name_parts_mali.str(2); |
| 149 | + } |
| 150 | + else |
| 151 | + { |
| 152 | + full_name = name_parts_immortalis.str(1); |
| 153 | + base_name = name_parts_immortalis.str(2); |
| 154 | + } |
| 155 | + |
| 156 | + const auto gpu_target = get_gpu_target(full_name, base_name); |
136 | 157 | ARM_COMPUTE_LOG_INFO_MSG_WITH_FORMAT_CORE("Found Arm® Mali™ GPU device name %s. Target is set to %s.", |
137 | 158 | full_name.c_str(), string_from_target(gpu_target).c_str()); |
138 | 159 | return gpu_target; |
|
0 commit comments