• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2018 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #ifndef __COMMON_EMULATOR_FEATURE_INFO_H
15 #define __COMMON_EMULATOR_FEATURE_INFO_H
16 
17 // SyncImpl determines the presence of host/guest OpenGL fence sync
18 // capabilities. It corresponds exactly to EGL_ANDROID_native_fence_sync
19 // capability, but for the emulator, we need to make sure that
20 // OpenGL pipe protocols match, so we use a special extension name
21 // here.
22 // SYNC_IMPL_NONE means that the native fence sync capability is
23 // not present, and we will end up using the equivalent of glFinish
24 // in order to preserve buffer swapping order.
25 // SYNC_IMPL_NATIVE_SYNC means that we do have native fence sync
26 // capability, and we will use a fence fd to synchronize buffer swaps.
27 enum SyncImpl {
28     SYNC_IMPL_NONE = 0,
29     SYNC_IMPL_NATIVE_SYNC_V2 = 1,
30     SYNC_IMPL_NATIVE_SYNC_V3 = 2,
31 };
32 
33 // Interface:
34 // Use the highest of v2 or v3 that show up, making us
35 // SYNC_IMPL_NATIVE_SYNC_V2 or SYNC_IMPL_NATIVE_SYNC_V3.
36 static const char kRCNativeSyncV2[] = "ANDROID_EMU_native_sync_v2";
37 static const char kRCNativeSyncV3[] = "ANDROID_EMU_native_sync_v3";
38 
39 // DMA for OpenGL
40 enum DmaImpl {
41     DMA_IMPL_NONE = 0,
42     DMA_IMPL_v1 = 1,
43 };
44 
45 static const char kDmaExtStr_v1[] = "ANDROID_EMU_dma_v1";
46 
47 // OpenGL ES max supported version
48 enum GLESMaxVersion {
49     GLES_MAX_VERSION_2 = 0,
50     GLES_MAX_VERSION_3_0 = 1,
51     GLES_MAX_VERSION_3_1 = 2,
52     GLES_MAX_VERSION_3_2 = 3,
53 };
54 
55 static const char kGLESMaxVersion_2[] = "ANDROID_EMU_gles_max_version_2";
56 static const char kGLESMaxVersion_3_0[] = "ANDROID_EMU_gles_max_version_3_0";
57 static const char kGLESMaxVersion_3_1[] = "ANDROID_EMU_gles_max_version_3_1";
58 static const char kGLESMaxVersion_3_2[] = "ANDROID_EMU_gles_max_version_3_2";
59 
60 enum HostComposition {
61     HOST_COMPOSITION_NONE = 0,
62     HOST_COMPOSITION_V1,
63 };
64 
65 static const char kHostCompositionV1[] = "ANDROID_EMU_host_composition_v1";
66 
67 // No querying errors from host extension
68 static const char kGLESNoHostError[] = "ANDROID_EMU_gles_no_host_error";
69 
70 // Host to guest memory mapping
71 static const char kGLDirectMem[] = "ANDROID_EMU_direct_mem";
72 
73 // Vulkan host support
74 // To be delivered/enabled when at least the following is working/available:
75 // - HOST_COHERENT memory mapping
76 // - Full gralloc interop: External memory, AHB
77 static const char kVulkan[] = "ANDROID_EMU_vulkan";
78 
79 // Deferred Vulkan commands
80 static const char kDeferredVulkanCommands[] = "ANDROID_EMU_deferred_vulkan_commands";
81 
82 // Struct describing available emulator features
83 struct EmulatorFeatureInfo {
84 
EmulatorFeatureInfoEmulatorFeatureInfo85     EmulatorFeatureInfo() :
86         syncImpl(SYNC_IMPL_NONE),
87         dmaImpl(DMA_IMPL_NONE),
88         hostComposition(HOST_COMPOSITION_NONE),
89         glesMaxVersion(GLES_MAX_VERSION_2),
90         hasDirectMem(false),
91         hasVulkan(false),
92         hasDeferredVulkanCommands(false) { }
93 
94     SyncImpl syncImpl;
95     DmaImpl dmaImpl;
96     HostComposition hostComposition;
97     GLESMaxVersion glesMaxVersion;
98     bool hasDirectMem;
99     bool hasVulkan;
100     bool hasDeferredVulkanCommands;
101 };
102 
103 #endif // __COMMON_EMULATOR_FEATURE_INFO_H
104