1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2020 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 // vulkan_icd.h : Helper for creating vulkan instances & selecting physical device. 7*8975f5c5SAndroid Build Coastguard Worker 8*8975f5c5SAndroid Build Coastguard Worker #ifndef COMMON_VULKAN_VULKAN_ICD_H_ 9*8975f5c5SAndroid Build Coastguard Worker #define COMMON_VULKAN_VULKAN_ICD_H_ 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker #include <string> 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "common/Optional.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "common/vulkan/vk_headers.h" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker namespace angle 18*8975f5c5SAndroid Build Coastguard Worker { 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker namespace vk 21*8975f5c5SAndroid Build Coastguard Worker { 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Worker // The minimum version of Vulkan that ANGLE requires. If an instance or device below this version 24*8975f5c5SAndroid Build Coastguard Worker // is encountered, initialization will skip the device if possible, or if no other suitable device 25*8975f5c5SAndroid Build Coastguard Worker // is available then initialization will fail. 26*8975f5c5SAndroid Build Coastguard Worker constexpr uint32_t kMinimumVulkanAPIVersion = VK_API_VERSION_1_1; 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker enum class ICD 29*8975f5c5SAndroid Build Coastguard Worker { 30*8975f5c5SAndroid Build Coastguard Worker Default, 31*8975f5c5SAndroid Build Coastguard Worker Mock, 32*8975f5c5SAndroid Build Coastguard Worker SwiftShader, 33*8975f5c5SAndroid Build Coastguard Worker }; 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker struct SimpleDisplayWindow 36*8975f5c5SAndroid Build Coastguard Worker { 37*8975f5c5SAndroid Build Coastguard Worker uint16_t width; 38*8975f5c5SAndroid Build Coastguard Worker uint16_t height; 39*8975f5c5SAndroid Build Coastguard Worker }; 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker class [[nodiscard]] ScopedVkLoaderEnvironment : angle::NonCopyable 42*8975f5c5SAndroid Build Coastguard Worker { 43*8975f5c5SAndroid Build Coastguard Worker public: 44*8975f5c5SAndroid Build Coastguard Worker ScopedVkLoaderEnvironment(bool enableDebugLayers, vk::ICD icd); 45*8975f5c5SAndroid Build Coastguard Worker ~ScopedVkLoaderEnvironment(); 46*8975f5c5SAndroid Build Coastguard Worker canEnableDebugLayers()47*8975f5c5SAndroid Build Coastguard Worker bool canEnableDebugLayers() const { return mEnableDebugLayers; } getEnabledICD()48*8975f5c5SAndroid Build Coastguard Worker vk::ICD getEnabledICD() const { return mICD; } 49*8975f5c5SAndroid Build Coastguard Worker 50*8975f5c5SAndroid Build Coastguard Worker private: 51*8975f5c5SAndroid Build Coastguard Worker bool setICDEnvironment(const char *icd); 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker bool mEnableDebugLayers; 54*8975f5c5SAndroid Build Coastguard Worker vk::ICD mICD; 55*8975f5c5SAndroid Build Coastguard Worker bool mChangedCWD; 56*8975f5c5SAndroid Build Coastguard Worker Optional<std::string> mPreviousCWD; 57*8975f5c5SAndroid Build Coastguard Worker bool mChangedICDEnv; 58*8975f5c5SAndroid Build Coastguard Worker Optional<std::string> mPreviousICDEnv; 59*8975f5c5SAndroid Build Coastguard Worker Optional<std::string> mPreviousCustomExtensionsEnv; 60*8975f5c5SAndroid Build Coastguard Worker bool mChangedNoDeviceSelect; 61*8975f5c5SAndroid Build Coastguard Worker Optional<std::string> mPreviousNoDeviceSelectEnv; 62*8975f5c5SAndroid Build Coastguard Worker }; 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker void ChoosePhysicalDevice(PFN_vkGetPhysicalDeviceProperties pGetPhysicalDeviceProperties, 65*8975f5c5SAndroid Build Coastguard Worker const std::vector<VkPhysicalDevice> &physicalDevices, 66*8975f5c5SAndroid Build Coastguard Worker vk::ICD preferredICD, 67*8975f5c5SAndroid Build Coastguard Worker uint32_t preferredVendorID, 68*8975f5c5SAndroid Build Coastguard Worker uint32_t preferredDeviceID, 69*8975f5c5SAndroid Build Coastguard Worker VkPhysicalDevice *physicalDeviceOut, 70*8975f5c5SAndroid Build Coastguard Worker VkPhysicalDeviceProperties *physicalDevicePropertiesOut); 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker } // namespace vk 73*8975f5c5SAndroid Build Coastguard Worker 74*8975f5c5SAndroid Build Coastguard Worker } // namespace angle 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker #endif // COMMON_VULKAN_VULKAN_ICD_H_ 77