/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "vulkan_common.h" #include namespace tvm { namespace runtime { namespace vulkan { std::vector FindEnabledExtensions( const std::vector& ext_prop, const std::vector& required_extensions, const std::vector& optional_extensions) { std::set available_extensions; for (const auto& prop : ext_prop) { if (prop.specVersion > 0) { available_extensions.insert(prop.extensionName); } } std::vector enabled_extensions; for (const auto& ext : required_extensions) { ICHECK(available_extensions.count(ext)) << "Required vulkan extension \"" << ext << "\" not supported by driver"; enabled_extensions.push_back(ext); } for (const auto& ext : optional_extensions) { if (available_extensions.count(ext)) { enabled_extensions.push_back(ext); } } return enabled_extensions; } } // namespace vulkan } // namespace runtime } // namespace tvm