xref: /aosp_15_r20/external/angle/src/common/vulkan/vulkan_icd.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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