1 //
2 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5
6 #include "angle_test_platform.h"
7
8 #include "common/platform.h"
9 #include "gpu_info_util/SystemInfo.h"
10
11 #if defined(ANGLE_PLATFORM_WINDOWS)
12 # include <VersionHelpers.h>
13 #endif // defined(ANGLE_PLATFORM_WINDOWS)
14
15 using namespace angle;
16
IsAdreno()17 bool IsAdreno()
18 {
19 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
20 return (rendererString.find("Adreno") != std::string::npos);
21 }
22
IsD3D11()23 bool IsD3D11()
24 {
25 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
26 return (rendererString.find("Direct3D11 vs_5_0") != std::string::npos);
27 }
28
IsD3D9()29 bool IsD3D9()
30 {
31 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
32 return (rendererString.find("Direct3D9") != std::string::npos);
33 }
34
IsDesktopOpenGL()35 bool IsDesktopOpenGL()
36 {
37 return IsOpenGL() && !IsOpenGLES();
38 }
39
IsOpenGLES()40 bool IsOpenGLES()
41 {
42 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
43 return (rendererString.find("OpenGL ES") != std::string::npos);
44 }
45
IsOpenGL()46 bool IsOpenGL()
47 {
48 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
49 return (rendererString.find("OpenGL") != std::string::npos);
50 }
51
IsNULL()52 bool IsNULL()
53 {
54 std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER)));
55 return (rendererString.find("NULL") != std::string::npos);
56 }
57
IsVulkan()58 bool IsVulkan()
59 {
60 const char *renderer = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
61 std::string rendererString(renderer);
62 return (rendererString.find("Vulkan") != std::string::npos);
63 }
64
IsMetal()65 bool IsMetal()
66 {
67 const char *renderer = reinterpret_cast<const char *>(glGetString(GL_RENDERER));
68 std::string rendererString(renderer);
69 return (rendererString.find("ANGLE Metal") != std::string::npos);
70 }
71
IsD3D()72 bool IsD3D()
73 {
74 return IsD3D9() || IsD3D11();
75 }
76
IsDebug()77 bool IsDebug()
78 {
79 #if !defined(NDEBUG)
80 return true;
81 #else
82 return false;
83 #endif
84 }
85
IsRelease()86 bool IsRelease()
87 {
88 return !IsDebug();
89 }
90
EnsureGLExtensionEnabled(const std::string & extName)91 bool EnsureGLExtensionEnabled(const std::string &extName)
92 {
93 if (IsGLExtensionEnabled("GL_ANGLE_request_extension") && IsGLExtensionRequestable(extName))
94 {
95 glRequestExtensionANGLE(extName.c_str());
96 }
97
98 return IsGLExtensionEnabled(extName);
99 }
100
IsEGLClientExtensionEnabled(const std::string & extName)101 bool IsEGLClientExtensionEnabled(const std::string &extName)
102 {
103 return CheckExtensionExists(eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS), extName);
104 }
105
IsEGLDeviceExtensionEnabled(EGLDeviceEXT device,const std::string & extName)106 bool IsEGLDeviceExtensionEnabled(EGLDeviceEXT device, const std::string &extName)
107 {
108 return CheckExtensionExists(eglQueryDeviceStringEXT(device, EGL_EXTENSIONS), extName);
109 }
110
IsEGLDisplayExtensionEnabled(EGLDisplay display,const std::string & extName)111 bool IsEGLDisplayExtensionEnabled(EGLDisplay display, const std::string &extName)
112 {
113 return CheckExtensionExists(eglQueryString(display, EGL_EXTENSIONS), extName);
114 }
115
IsGLExtensionEnabled(const std::string & extName)116 bool IsGLExtensionEnabled(const std::string &extName)
117 {
118 return CheckExtensionExists(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS)),
119 extName);
120 }
121
IsGLExtensionRequestable(const std::string & extName)122 bool IsGLExtensionRequestable(const std::string &extName)
123 {
124 return CheckExtensionExists(
125 reinterpret_cast<const char *>(glGetString(GL_REQUESTABLE_EXTENSIONS_ANGLE)), extName);
126 }
127