gl_version_info_unittest.cc 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/gl/gl_version_info.h"
  5. #include <memory>
  6. #include "testing/gtest/include/gtest/gtest.h"
  7. namespace gl {
  8. TEST(GLVersionInfoTest, ParseGLVersionStringTest) {
  9. const struct GLVersionTestData {
  10. const char* gl_version;
  11. unsigned expected_gl_major;
  12. unsigned expected_gl_minor;
  13. bool expected_is_es;
  14. bool expected_is_es2;
  15. bool expected_is_es3;
  16. const char* expected_driver_vendor;
  17. const char* expected_driver_version;
  18. } kTestData[] = {
  19. {"4.3 (Core Profile) Mesa 11.2.0", 4, 3, false, false, false, "Mesa",
  20. "11.2.0"},
  21. {"4.5.0 NVIDIA 364.19", 4, 5, false, false, false, "NVIDIA", "364.19"},
  22. {"2.1 INTEL-10.6.33", 2, 1, false, false, false, "INTEL", "10.6.33"},
  23. {"2.1", 2, 1, false, false, false, "", ""},
  24. {"OpenGL ES 3.0", 3, 0, true, false, true, "", ""},
  25. {"OpenGL ES 3.2 v1.r12p0-04rel0.44f2946824bb8739781564bffe2110c9", 3, 2,
  26. true, false, true, "ARM", "12.0.04rel0"},
  27. {"OpenGL ES 3.0 V@84.0 AU@05.00.00.046.002 (CL@)", 3, 0, true, false,
  28. true, "", "84.0"},
  29. {"2.1.0 - Build 8.15.10.2342", 2, 1, false, false, false, "",
  30. "8.15.10.2342"},
  31. {"4.2.11631", 4, 2, false, false, false, "", ""},
  32. {"4.3.12458 13.200.16.0", 4, 3, false, false, false, "", "13.200.16.0"},
  33. {"1.4 (2.1 Mesa 7.11)", 1, 4, false, false, false, "Mesa", "7.11"},
  34. {"OpenGL ES 2.0 build 1.12@2701748", 2, 0, true, true, false, "", "1.12"},
  35. {"OpenGL ES 3.1 V6.2.4.138003", 3, 1, true, false, true, "",
  36. "6.2.4.138003"},
  37. {"OpenGL ES 3.0 Mesa 12.0.3 (git-8b8f097)", 3, 0, true, false, true,
  38. "Mesa", "12.0.3"},
  39. {"4.5.14008 Compatibility Profile Context 21.19.137.514", 4, 5, false,
  40. false, false, "", "21.19.137.514"},
  41. {"4.5.13497 Compatibility Profile/Debug Context 23.20.782.0", 4, 5, false,
  42. false, false, "", "23.20.782.0"},
  43. {"OpenGL ES 3.0 SwiftShader 4.1.0.7", 3, 0, true, false, true, "",
  44. "4.1.0.7"},
  45. // This is a non spec compliant string from Nexus6 on Android N.
  46. {"OpenGL ES 3.1V@104.0", 3, 1, true, false, true, "", "104.0"}};
  47. gfx::ExtensionSet extensions;
  48. for (size_t ii = 0; ii < std::size(kTestData); ++ii) {
  49. GLVersionInfo version_info(kTestData[ii].gl_version, nullptr, extensions);
  50. EXPECT_EQ(kTestData[ii].expected_gl_major, version_info.major_version);
  51. EXPECT_EQ(kTestData[ii].expected_gl_minor, version_info.minor_version);
  52. EXPECT_EQ(kTestData[ii].expected_is_es, version_info.is_es);
  53. EXPECT_EQ(kTestData[ii].expected_is_es2, version_info.is_es2);
  54. EXPECT_EQ(kTestData[ii].expected_is_es3, version_info.is_es3);
  55. EXPECT_STREQ(kTestData[ii].expected_driver_vendor,
  56. version_info.driver_vendor.c_str());
  57. EXPECT_STREQ(kTestData[ii].expected_driver_version,
  58. version_info.driver_version.c_str());
  59. }
  60. }
  61. TEST(GLVersionInfoTest, DriverVendorForANGLE) {
  62. const struct GLVersionTestData {
  63. const char* gl_version;
  64. const char* gl_renderer;
  65. unsigned expected_gl_major;
  66. unsigned expected_gl_minor;
  67. bool expected_is_es;
  68. bool expected_is_es2;
  69. bool expected_is_es3;
  70. bool expected_is_d3d;
  71. const char* expected_driver_vendor;
  72. const char* expected_driver_version;
  73. } kTestData[] = {
  74. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  75. "ANGLE (Intel Inc., Intel(R) UHD Graphics 630, OpenGL 4.1 "
  76. "INTEL-14.7.11)",
  77. 2, 0, true, true, false, false, "INTEL", "14.7.11"},
  78. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  79. "ANGLE (ATI Technologies Inc., AMD Radeon Pro 560X OpenGL Engine, "
  80. "OpenGL 4.1 ATI-3.10.19)",
  81. 2, 0, true, true, false, false, "ATI", "3.10.19"},
  82. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  83. "ANGLE (AMD, Metal Renderer: AMD Radeon Pro 560X, Version 10.15.7 "
  84. "(Build 19H114))",
  85. 2, 0, true, true, false, false, "AMD", "10.15.7"},
  86. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  87. "ANGLE (Mesa/X.org, llvmpipe (LLVM 11.0.0 256 bits), OpenGL 4.5 (Core "
  88. "Profile) Mesa 20.2.4)",
  89. 2, 0, true, true, false, false, "Mesa", "20.2.4"},
  90. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  91. "ANGLE (Apple, Apple A12Z, OpenGL 4.1 Metal - 70.12.7)", 2, 0, true,
  92. true, false, false, "Apple", "70.12.7"},
  93. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  94. "ANGLE (NVIDIA Corporation, Quadro P1000/PCIe/SSE2, OpenGL 4.5.0 NVIDIA "
  95. "440.100)",
  96. 2, 0, true, true, false, false, "NVIDIA", "440.100"},
  97. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  98. "ANGLE (NVIDIA, Vulkan 1.1.119 (NVIDIA Quadro P1000 (0x00001CB1)), "
  99. "NVIDIA-440.400.0)",
  100. 2, 0, true, true, false, false, "NVIDIA", "440.400.0"},
  101. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  102. "ANGLE (NVIDIA, NVIDIA Quadro P1000 Direct3D11 vs_5_0 ps_5_0, "
  103. "D3D11-23.21.13.9077)",
  104. 2, 0, true, true, false, true, "NVIDIA", "23.21.13.9077"},
  105. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  106. "ANGLE (NVIDIA, NVIDIA Quadro P1000 Direct3D9Ex vs_3_0 ps_3_0, "
  107. "nvldumdx.dll-23.21.13.9077)",
  108. 2, 0, true, true, false, true, "NVIDIA", "23.21.13.9077"},
  109. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  110. "ANGLE (NVIDIA Corporation, Quadro P1000/PCIe/SSE2, OpenGL 4.5.0 NVIDIA "
  111. "390.77)",
  112. 2, 0, true, true, false, false, "NVIDIA", "390.77"},
  113. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  114. "ANGLE (NVIDIA, Vulkan 1.0.65 (NVIDIA Quadro P1000 (0x00001CB1)), "
  115. "NVIDIA-390.308.0)",
  116. 2, 0, true, true, false, false, "NVIDIA", "390.308.0"},
  117. {"OpenGL ES 2.0.0 (ANGLE 2.1.4875 git hash: 32e78475b1c0)",
  118. "ANGLE (Google, Vulkan 1.1.0 (SwiftShader Device (Subzero) "
  119. "(0x0000C0DE)), SwiftShader driver-5.0.0)",
  120. 2, 0, true, true, false, false, "Google", "5.0.0"},
  121. };
  122. gfx::ExtensionSet extensions;
  123. for (size_t ii = 0; ii < std::size(kTestData); ++ii) {
  124. GLVersionInfo version_info(kTestData[ii].gl_version,
  125. kTestData[ii].gl_renderer, extensions);
  126. EXPECT_TRUE(version_info.is_angle);
  127. EXPECT_EQ(kTestData[ii].expected_gl_major, version_info.major_version);
  128. EXPECT_EQ(kTestData[ii].expected_gl_minor, version_info.minor_version);
  129. EXPECT_EQ(kTestData[ii].expected_is_es, version_info.is_es);
  130. EXPECT_EQ(kTestData[ii].expected_is_es2, version_info.is_es2);
  131. EXPECT_EQ(kTestData[ii].expected_is_es3, version_info.is_es3);
  132. EXPECT_EQ(kTestData[ii].expected_is_d3d, version_info.is_d3d);
  133. EXPECT_STREQ(kTestData[ii].expected_driver_vendor,
  134. version_info.driver_vendor.c_str());
  135. EXPECT_STREQ(kTestData[ii].expected_driver_version,
  136. version_info.driver_version.c_str());
  137. }
  138. }
  139. }