From aa28d53597015d9088e158d4fbdd4e9a9a8b2700 Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Thu, 14 May 2026 09:40:14 -0500 Subject: [PATCH 1/9] Update quality list for 1.2.4 release --- list_editor/example_data/device_list.csv | 5 + list_editor/example_data/driver_allow.csv | 108 +----------------- list_editor/example_data/driver_deny.csv | 9 +- list_editor/example_data/vkqualitydata.json | 2 +- .../src/main/assets/vkqualitydata.vkq | Bin 23275 -> 16088 bytes 5 files changed, 10 insertions(+), 114 deletions(-) diff --git a/list_editor/example_data/device_list.csv b/list_editor/example_data/device_list.csv index 46ba6fd..b9e1479 100644 --- a/list_editor/example_data/device_list.csv +++ b/list_editor/example_data/device_list.csv @@ -35,8 +35,13 @@ MinApi,MinDriver,Brand,Device,Manufacturer,Model Name,RAM (TotalMem),Form Factor 34,0,google,shiba,Google,Pixel 8,7972MB,Phone,Google Tensor G3,Mali-G715s MC10,1080x2400,420,arm64-v8a,34,3.2,0,0.00%,0.00%,0.00%,0.00% 34,0,google,comet,Google,Pixel 9 Pro Fold,16308MB,Tablet,Google Tensor G4,7x ARM Mali G715 (940 MHz),2076x2152,390,arm64-v8a,35,3.2,0,0.00%,0.00%,0.00%,0.00% 34,0,google,caiman,Google,Pixel 9 Pro,16308MB,Phone,Google Tensor G4,7x ARM Mali G715 (940 MHz),1280x2856,480,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% +34,0,google,tegu,Google,Pixel 9a,7682-7938MB,Phone,Google Tensor G4,7x ARM Mali G715 (940 MHz),1080x2424,420,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% +34,0,google,stallion,Google,Pixel 10a,7938MB,Phone,Google Tensor G4,7x ARM Mali G715 (940 MHz),1080x2424,420,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% 34,0,google,tokay,Google,Pixel 9,12109MB,Phone,Google Tensor G4,7x ARM Mali G715 (940 MHz),1080x2424,420,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% 34,0,google,komodo,Google,Pixel 9 Pro XL,16308MB,Phone,Google Tensor G4,7x ARM Mali G715 (940 MHz),1344x2992,480,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% +35,0,google,frankel,Google,Pixel 10,12109MB,Phone,Google Tensor G5,Imagination Tech DXT 48-1536 (1300 MHz),1080x2424,420,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% +35,0,google,blazer,Google,Pixel 10 Pro,15819-16332MB,Phone,Google Tensor G5,Imagination Tech DXT 48-1536 (1300 MHz),1280x2856,480,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% +35,0,google,rango,Google,Pixel 10 Pro Fold,16331MB,Phone,Google Tensor G5,Imagination Tech DXT 48-1536 (1300 MHz),2076x2152,390,arm64-v8a,34;35,3.2,0,0.00%,0.00%,0.00%,0.00% 34,2150531090,HONOR,HNBVL,Honor,HONOR Magic6 Pro,11824MB,Phone,QTI SM8650,Qualcomm Adreno 830 (903 MHz),1280x2800,560,arm64-v8a,34,3.2,0,0.00%,0.00%,0.00%,0.00% 34,2150531090,HONOR,HNBVL-AN00,Honor,HONOR Magic6,16015MB,Phone,QTI SM8650,Qualcomm Adreno 830 (903 MHz),1264x2800,560,arm64-v8a,34,3.2,0,0.00%,0.00%,0.00%,0.00% 33,2150252544,HONOR,HNFRI,Honor,HONOR Magic Vs,11850MB,Tablet,QTI SM8475,Qualcomm Adreno 730 (900 MHz),1984x2272,480,arm64-v8a;armeabi;armeabi-v7a,33,3.2,0,0.00%,0.00%,0.00%,0.00% diff --git a/list_editor/example_data/driver_allow.csv b/list_editor/example_data/driver_allow.csv index 3b38085..133c773 100644 --- a/list_editor/example_data/driver_allow.csv +++ b/list_editor/example_data/driver_allow.csv @@ -1,107 +1,3 @@ soc,glFullVersion -SM7450,"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)" -SM6450,"OpenGL ES 3.2 V@0615.80 (GIT@406382a20f, I986008d073, 1704447428) (Date:01/05/24)" -SM8450,"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)" -MT6877,OpenGL ES 3.2 v1.r32p1-01eac0.8135628637558d6d27e8ec61da0ffbb5 -MT6769,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -MT6789,OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3 -SM8350,"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)" -SM8635,"OpenGL ES 3.2 V@0762.15 (GIT@674f6c61df, Iec746bb8f9, 1712300122) (Date:04/05/24)" -MT6983,OpenGL ES 3.2 v1.r32p1-01eac0.b1c355f1ca75ee340751fc2d07d2e153 -SM8450,"OpenGL ES 3.2 V@0615.0 (GIT@194d5e5755, I6561b7ccb3, 1691691459) (Date:08/10/23)" -MT6877V/TTZA,OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4 -MT6769Z,OpenGL ES 3.2 v1.r32p1-01eac0.52688e0652bc37eab85ce86c674ab12f -MT6879V_T/ZA,OpenGL ES 3.2 v1.r32p1-01eac0.a031c769622e85782e9b68c066a81213 -SM7450,"OpenGL ES 3.2 V@0615.76 (GIT@fc9849b050, Ibccd5936db, 1700474993) (Date:11/20/23)" -MT6781,OpenGL ES 3.2 v1.r32p1-01eac0.f8dc73e9e828783da7609cdc1c245dfa -EXYNOS 2100,OpenGL ES 3.2 v1.r38p0-01eac0-mbs2v41_0.65f90f7db733ed40f27c25ca33fc398f -SM7675,"OpenGL ES 3.2 V@0762.17 (GIT@f115f6bba1, I45c6b84a32, 1712917670) (Date:04/12/24)" -SM4350,"OpenGL ES 3.2 V@0530.0 (GIT@8699000cd8, I1027f1d7d9, 1649421937) (Date:04/08/22)" -SM8350,"OpenGL ES 3.2 V@0530.0 (GIT@12ae96cb63, I409bbc12eb, 1694603898) (Date:09/13/23)" -MT8781V/CA,OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3 -SM4450,"OpenGL ES 3.2 V@0615.77 (GIT@64bab644ca, I204cbc9b5e, 1700479993) (Date:11/20/23)" -SM6375,"OpenGL ES 3.2 V@0530.0 (GIT@f3aa497c33, I7c31881d50, 1639653329) (Date:12/16/21)" -MT6985,OpenGL ES 3.2 v1.r38p1 -MT6883,OpenGL ES 3.2 v1.r32p1-01eac0.479f7c91bbdfefd5f0c368c0a30bcfd0 -S5E9945,OpenGL ES 3.2 Driver version: 24.1.207 git hash: 927672398aa8 -SM8550,"OpenGL ES 3.2 V@0676.57 (GIT@6129fbc570, I5a3b7da999, 1708681500) (Date:02/23/24)" -S5E8835,OpenGL ES 3.2 v1.r38p1-01eac0-mbs2v41_0.8e62f436dbeeadb2f1bba495fbb741ec -SM8650,"OpenGL ES 3.2 V@0744.12 (GIT@62c1f322ce, Id0077aad60, 1700555917) (Date:11/21/23)" -MT6833V/PNZA,OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139 -SM6375,"OpenGL ES 3.2 V@0762.17 (GIT@f115f6bba1, I45c6b84a32, 1712929337) (Date:04/12/24)" -MT8798Z/CNZA,OpenGL ES 3.2 v1.r32p1-01eac0.b1c355f1ca75ee340751fc2d07d2e153 -QCM6490,"OpenGL ES 3.2 V@0530.46 (GIT@a3cdec2236, Ief33eea0db, 1661255399) (Date:08/23/22)" -MT6789,OpenGL ES 3.2 v1.r32p1-01eac0.9850964fe16242c585c8d423010c8595 -MT6768,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -SM4375,"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)" -SM8475,"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)" -S5E8825,OpenGL ES 3.2 v1.r32p1-01bet2-mbs2v39_0.24a5b8b8abb488a61e5e48232a460c3e -SM8650,"OpenGL ES 3.2 V@0744.18 (GIT@d774a8672e, I8ea610b5b4, 1704277645) (Date:01/03/24)" -SM6375,"OpenGL ES 3.2 V@0530.48 (GIT@e7626cbb06, If33672715f, 1674571865) (Date:01/24/23)" -SM6225,"OpenGL ES 3.2 V@0615.72 (GIT@67600309f5, I34f73d0972, 1688991399) (Date:07/10/23)" -MT6833P,OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139 -SM6225,"OpenGL ES 3.2 V@0615.81 (GIT@75362bd531, I5cf4e5bf0f, 1704968105) (Date:01/11/24)" -MT6835,OpenGL ES 3.2 v1.r38p1 -S5E9945,OpenGL ES 3.2 ANGLE git hash: 131b607622f4 -SM7450,"OpenGL ES 3.2 V@0615.84 (GIT@72d8b177be, I020fdb6434, 1709038286) (Date:02/27/24)" -SM6225,"OpenGL ES 3.2 V@0615.84 (GIT@72d8b177be, I020fdb6434, 1709038286) (Date:02/27/24)" -SM8450,"OpenGL ES 3.2 V@0615.0 (GIT@770ea4bdb9, Ief8f71bb1e, 1706806055) (Date:02/01/24)" -MT6769V/WZ,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -SM7550,"OpenGL ES 3.2 V@0676.57 (GIT@6129fbc570, I5a3b7da999, 1708681500) (Date:02/23/24)" -MT6769V/CA,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -MT6877V/TTZA,OpenGL ES 3.2 v1.r32p1-01eac0.8135628637558d6d27e8ec61da0ffbb5 -SM7675,"OpenGL ES 3.2 V@0762.15 (GIT@674f6c61df, Iec746bb8f9, 1712300122) (Date:04/05/24)" -SM6225,"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)" -MT6895,OpenGL ES 3.2 v1.r32p1-01eac0.b89152572cfa9465230812a8225a45a0 -SM7435,"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)" -MT6833V/ZA,OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139 -MT8791V/T,OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4 -S5E8845,OpenGL ES 3.2 ANGLE git hash: c2b872f4c96b -TENSOR G2,OpenGL ES 3.2 v1.r44p0-01eac0.1f05338ba59e9e7d040ba6bef774b2ac -SM8550,"OpenGL ES 3.2 V@0676.42 (GIT@7b26bdd942, Iab69c31769, 1693222181) (Date:08/28/23)" -MT6769,OpenGL ES 3.2 v1.r32p1-01eac0.52688e0652bc37eab85ce86c674ab12f -MT6833V/NZA,OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139 -SM8635,"OpenGL ES 3.2 V@0762.14 (GIT@c70b9a2a3c, I34176f3f01, 1711715768) (Date:03/29/24)" -SM7450,"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)" -SM8450,"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)" -S5E9945,OpenGL ES 3.2 ANGLE git hash: d2a158dccead -MT6893Z/CZA,OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81 -MT6891Z/CZA,OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81 -MT6789V/CD,OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3 -MT8786V/CA,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -SM8350,"OpenGL ES 3.2 V@0530.47 (GIT@eaa701cd06, I183f6321f0, 1666871261) (Date:10/27/22)" -MT6886,OpenGL ES 3.2 v1.r38p1 -SM6115,"OpenGL ES 3.2 V@0615.86 (GIT@30f48d66fb, I33af6953c3, 1712899917) (Date:04/12/24)" -SM8450,"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)" -SM8350,"OpenGL ES 3.2 V@0530.53 (GIT@a1cf8ab5e3, I428bf45773, 1699535026) (Date:11/09/23)" -SM8650,"OpenGL ES 3.2 V@0762.10 (GIT@1394a2c7a8, Id12349e41b, 1708672982) (Date:02/23/24)" -SM6375,"OpenGL ES 3.2 V@0762.18 (GIT@af856151b0, Id776b0abd7, 1714127119) (Date:04/26/24)" -S5E9925,OpenGL ES 3.2 ANGLE git hash: ea27396cef93 -SM7325,"OpenGL ES 3.2 V@0530.53 (GIT@a1cf8ab5e3, I428bf45773, 1699535026) (Date:11/09/23)" -S5E9925,OpenGL ES 3.2 ANGLE git hash: 72640fd9af5e -MT8766A,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -SM8635,"OpenGL ES 3.2 V@0762.9 (GIT@1fe7e097fd, Iac1c08c4e4, 1708364057) (Date:02/19/24)" -SM7435,"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)" -SM8475,"OpenGL ES 3.2 V@0615.0 (GIT@770ea4bdb9, Ief8f71bb1e, 1706806055) (Date:02/01/24)" -EXYNOS 2100,OpenGL ES 3.2 v1.r38p0-01eac0-mbs2v41_0.fbda7a2431aa2b386a4490f824f8fcc5 -SM7325,"OpenGL ES 3.2 V@0530.0 (GIT@cac6e6f805, I5187d04b75, 1637574833) (Date:11/22/21)" -S5E8835,OpenGL ES 3.2 v1.r38p1-01eac0-mbs2v41_0.c23b38d1557dbf46a5d45aec73cc4d15 -MT6833,OpenGL ES 3.2 v1.r32p1-01eac0.e1f01de808a0a50894ce9df2ecbbec80 -SM7325,"OpenGL ES 3.2 V@0530.47 (GIT@eaa701cd06, I183f6321f0, 1666871261) (Date:10/27/22)" -SM7675,"OpenGL ES 3.2 V@0762.21 (GIT@21ec731d58, Ifa39d99f17, 1717163077) (Date:05/31/24)" -SM8475,"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)" -S5E9925,OpenGL ES 3.2 ANGLE git hash: 420895f80df0 -SM8350,"OpenGL ES 3.2 V@0530.49 (GIT@329cf4c2a7, I63533b1e29, 1675175164) (Date:01/31/23)" -MT6877,OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4 -SM6225,"OpenGL ES 3.2 V@0615.77 (GIT@64bab644ca, I204cbc9b5e, 1700479993) (Date:11/20/23)" -A523,OpenGL ES 3.2 v1.r40p0-01eac0.c527590351327cc7ce8e3744d9361ee2 -MT6893,OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81 -SM8475,"OpenGL ES 3.2 V@0615.0 (GIT@194d5e5755, I6561b7ccb3, 1691691459) (Date:08/10/23)" -MT6896Z/CZA,OpenGL ES 3.2 v1.r32p1-01eac0.54329dee8f160f288c574caaf67bbe3f -MT6833,OpenGL ES 3.2 v1.r32p1-01eac0.f20ecd5cf326048879c2d906512e687e -MT6895Z_B/TCZA,OpenGL ES 3.2 v1.r32p1-01eac0.54329dee8f160f288c574caaf67bbe3f -S5E8845,OpenGL ES 3.2 ANGLE git hash: 4ae132631265 -T612,OpenGL ES 3.2 v1.r41p0-01eac0.018fc629603b7a70cc68d32f78ac8686 -MT6878,OpenGL ES 3.2 v1.r44p1-01eac0.9dfad904584e582a866ae268ba67da86 -MT6877V/ZA,OpenGL ES 3.2 v1.r32p1-01eac0.fdc5c778fea891c0453057246e18e215 -MT6769V/CZ,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 \ No newline at end of file +zzzzzz,zzzzz +zzzzzz2,zzzzz2 diff --git a/list_editor/example_data/driver_deny.csv b/list_editor/example_data/driver_deny.csv index f2aabb1..0b24679 100644 --- a/list_editor/example_data/driver_deny.csv +++ b/list_editor/example_data/driver_deny.csv @@ -1,8 +1,3 @@ soc,glFullVersion -TENSOR,OpenGL ES 3.2 v1.r47p0-01eac0.32ea38cfcac3afe9a9b43f4ca33f49a9 -MT6765,OpenGL ES 3.2 build 1.13@5776728 -MT6769V/CB,OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5 -MT6769V/CZ,OpenGL ES 3.2 v1.r32p1-01eac0.fc49d6bd800ecb1492a1f77284a4d178 -SM6450,"OpenGL ES 3.2 V@0615.86 (GIT@30f48d66fb, I33af6953c3, 1712899917) (Date:04/12/24)" -TENSOR G4,OpenGL ES 3.2 v1.r47p0-01eac0.dcd0e390f0239618a7dd5d0b929ff6e1 -TENSOR,OpenGL ES 3.2 v1.r46p0-01eac1.6b76d861277b3ea6941f5aa972def735 \ No newline at end of file +zzzzzx,zzzzx +zzzzzx2,zzzzx2 diff --git a/list_editor/example_data/vkqualitydata.json b/list_editor/example_data/vkqualitydata.json index 2e753a6..a7b1fd6 100644 --- a/list_editor/example_data/vkqualitydata.json +++ b/list_editor/example_data/vkqualitydata.json @@ -1 +1 @@ -{"ProjectSchemaVersion":1,"ExportedListFileVersion":66050,"MinApiForFutureRecommendation":37,"DeviceAllowList":[{"brand":"asus","device":"ASUS_AI2201","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2202","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2203","minapi":33,"driverversion":0},{"brand":"asus","device":"ASUS_AI2205","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2302","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2401","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_I002D","minapi":31,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I003_1","minapi":31,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I004D","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I005_1","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I006D","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I007_1","minapi":30,"driverversion":2149654528},{"brand":"DOCOMO","device":"F51A","minapi":31,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51A","minapi":31,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51B","minapi":33,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51D","minapi":34,"driverversion":2150252544},{"brand":"DOCOMO","device":"SH-52C","minapi":34,"driverversion":2150252544},{"brand":"DOCOMO","device":"SH-52D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-51A","minapi":31,"driverversion":2149654528},{"brand":"docomo","device":"SO-51B","minapi":33,"driverversion":2149654528},{"brand":"docomo","device":"SO-51C","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-51D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-52A","minapi":31,"driverversion":2149654528},{"brand":"docomo","device":"SO-53B","minapi":33,"driverversion":2149654528},{"brand":"docomo","device":"SO-53D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-54C","minapi":34,"driverversion":2150252544},{"brand":"google","device":"akita","minapi":34,"driverversion":0},{"brand":"google","device":"panther","minapi":34,"driverversion":0},{"brand":"google","device":"felix","minapi":34,"driverversion":0},{"brand":"google","device":"husky","minapi":34,"driverversion":0},{"brand":"google","device":"lynx","minapi":34,"driverversion":0},{"brand":"google","device":"cheetah","minapi":34,"driverversion":0},{"brand":"google","device":"tangorpro","minapi":34,"driverversion":0},{"brand":"google","device":"shiba","minapi":34,"driverversion":0},{"brand":"google","device":"comet","minapi":34,"driverversion":0},{"brand":"google","device":"caiman","minapi":34,"driverversion":0},{"brand":"google","device":"tokay","minapi":34,"driverversion":0},{"brand":"google","device":"komodo","minapi":34,"driverversion":0},{"brand":"HONOR","device":"HNBVL","minapi":34,"driverversion":2150531090},{"brand":"HONOR","device":"HNBVL-AN00","minapi":34,"driverversion":2150531090},{"brand":"HONOR","device":"HNFRI","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNLGE","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAA","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAG","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAP","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNPGT","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNVER","minapi":33,"driverversion":2150252544},{"brand":"HTC","device":"htc_enodugls","minapi":34,"driverversion":2150252544},{"brand":"Infinix","device":"Infinix-X6871","minapi":34,"driverversion":0},{"brand":"iQOO","device":"2009","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2012","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2017","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2019","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2022","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I1928","minapi":31,"driverversion":2149654528},{"brand":"iQOO","device":"I2201","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2202","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"I2212","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2214","minapi":34,"driverversion":0},{"brand":"iQOO","device":"I2217","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2220","minapi":34,"driverversion":2150531090},{"brand":"iQOO","device":"I2304","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG01","minapi":31,"driverversion":2149654528},{"brand":"KDDI","device":"SOG02","minapi":31,"driverversion":2149654528},{"brand":"KDDI","device":"SOG03","minapi":33,"driverversion":2149654528},{"brand":"KDDI","device":"SOG05","minapi":33,"driverversion":2149654528},{"brand":"KDDI","device":"SOG06","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG09","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG10","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG12","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"TGD","minapi":31,"driverversion":2149654528},{"brand":"LeiaInc","device":"LumePad","minapi":31,"driverversion":2149654528},{"brand":"Lenovo","device":"doom","minapi":30,"driverversion":2149654528},{"brand":"Lenovo","device":"halo","minapi":32,"driverversion":2149654528},{"brand":"Lenovo","device":"moba","minapi":30,"driverversion":2149654528},{"brand":"Lenovo","device":"olivine","minapi":33,"driverversion":2149654528},{"brand":"Lenovo","device":"TB320FC","minapi":33,"driverversion":2149654528},{"brand":"lge","device":"L-51A","minapi":31,"driverversion":2149654528},{"brand":"lge","device":"rainbowlm","minapi":30,"driverversion":2149654528},{"brand":"lge","device":"timelm","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu17","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu17Pro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18Pro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18s","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18sPro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18X","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu20","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu20Inf","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu20Pro","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu21","minapi":34,"driverversion":2150531090},{"brand":"meizu","device":"meizu21Pro","minapi":34,"driverversion":2150531090},{"brand":"Mi","device":"aliothin","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"bronco","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"burton","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"eqe","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"eqs","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"hiphi","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"hiphic","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"nio","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"oneli","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"pstar","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"rtwo","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"tundra","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"xpeng","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"zeekr","minapi":33,"driverversion":2150252544},{"brand":"NEC","device":"LAVIETab9QHD1","minapi":33,"driverversion":2149654528},{"brand":"Nothing","device":"Pong","minapi":34,"driverversion":2150252544},{"brand":"nubia","device":"NX659J","minapi":29,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-EEA","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-RU","minapi":29,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-UN","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX666J","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX669J","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX669J-EEA","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX669J-UN","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX679J","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679S","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX729J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX729J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX769J","minapi":34,"driverversion":2150531090},{"brand":"nubia","device":"P875N02","minapi":31,"driverversion":2149654528},{"brand":"nubia","device":"P898A21","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"P898P02","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A01","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A02","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A11","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ83A01","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OnePlus8","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8Pro","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8T","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8TMO","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8TTMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8Visible","minapi":30,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8VZW","minapi":30,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9Pro","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9ProTMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9R","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9TMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP5154L1","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP5155L1","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP516EL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5552L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5565","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5566L1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5567L1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP556FL1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP591BL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5927","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5929L1","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OP5943L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP594DL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP595DL1","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OP5961L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5973L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP59BCL1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5CF9L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5CFBL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5D35L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5D3FL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP4A77","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4A7A","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4AD9","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4BA1L1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4BA2L1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4E3F","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4E75L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4EA7","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4EC1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F0BL1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F57L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F7FL1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP520DL1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP520F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5223","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP5281","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP528BL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP528F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5297","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP52D1L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP52D5L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP5335L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP55F3L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP55FF","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5601","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5607L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP561F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP564B","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP565FL1","minapi":34,"driverversion":2150531090},{"brand":"OPPO","device":"OP5661L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56BBL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP56CDL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56CFL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56D3L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5989","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59BBL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59EDL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59EFL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5A15L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5AD3L1","minapi":34,"driverversion":0},{"brand":"POCO","device":"alioth","minapi":33,"driverversion":2149654528},{"brand":"POCO","device":"garnet","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"ingres","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"lmi","minapi":31,"driverversion":2149654528},{"brand":"POCO","device":"marble","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"marblein","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"munch","minapi":33,"driverversion":2149654528},{"brand":"POCO","device":"xaga","minapi":33,"driverversion":0},{"brand":"RAKUTEN","device":"Banagher","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RE546F","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE5471","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE5473","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE5477","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE547F","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE54E4L1","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE5860","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE58B2L1","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE58D1L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE5C33","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE5C37","minapi":34,"driverversion":2150531090},{"brand":"realme","device":"RE5C82L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE879AL1","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RED8ACL1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RED8BEL1","minapi":34,"driverversion":0},{"brand":"realme","device":"REE2B2L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RMX2071CN","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2072CN","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2075L1","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2076L1","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2202CN","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RMX2202L1","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"alioth","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"apollo","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"corot","minapi":34,"driverversion":0},{"brand":"Redmi","device":"diting","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"dizi","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"garnet","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"haydn","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"ingres","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"lmi","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"lmipro","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"marble","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"mondrian","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"munch","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"pearl","minapi":33,"driverversion":0},{"brand":"Redmi","device":"peridot","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"rembrandt","minapi":33,"driverversion":0},{"brand":"Redmi","device":"ruan","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"socrates","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"xaga","minapi":33,"driverversion":0},{"brand":"Redmi","device":"xagain","minapi":33,"driverversion":0},{"brand":"Redmi","device":"xagapro","minapi":33,"driverversion":0},{"brand":"samsung","device":"a55x","minapi":34,"driverversion":0},{"brand":"samsung","device":"b0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"b0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"b2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"b4q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"b5q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"bloomxq","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"c1q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"c2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"dm1q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"dm2q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"dm3q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"e1q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"e1s","minapi":34,"driverversion":0},{"brand":"samsung","device":"e2q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"e2s","minapi":34,"driverversion":0},{"brand":"samsung","device":"e3q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"f2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"g0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"g0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"gts7l","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7lwifi","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7xl","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7xlwifi","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts8","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8p","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8pwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8u","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8uwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8wifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9p","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9pwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9u","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9uwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9wifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"m44x","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"o1q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"p3q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"q2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"q4q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"q5q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"r11q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r11s","minapi":34,"driverversion":0},{"brand":"samsung","device":"r8q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"r9q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-51A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-51B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-51C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-51D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-51E","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SC-52A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-52B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-52C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-52D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-52E","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SC-53A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-54B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-54C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-54D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-55B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-55C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-55D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC51Aa","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG01","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG02","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG03","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG04","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG06","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG09","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG10","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG11","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG12","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG13","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG14","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG16","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG17","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG19","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG20","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG22","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG23","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG24","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG25","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SCG26","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"t2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"v2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"x1q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"y2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"z3q","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"Judau","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"JudauL","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"Kamille","minapi":33,"driverversion":2150252544},{"brand":"SG","device":"KamilleL","minapi":34,"driverversion":2150252544},{"brand":"SG","device":"Mineva","minapi":34,"driverversion":2150252544},{"brand":"SG","device":"MinevaL","minapi":31,"driverversion":2150252544},{"brand":"SG","device":"SG908SH","minapi":31,"driverversion":2149654528},{"brand":"SHARP","device":"Banagher","minapi":30,"driverversion":2149654528},{"brand":"SHARP","device":"FaYuiry","minapi":34,"driverversion":2150252544},{"brand":"SHARP","device":"Judau","minapi":33,"driverversion":2149654528},{"brand":"SHARP","device":"Kamille","minapi":34,"driverversion":2150252544},{"brand":"SoftBank","device":"Z8851S","minapi":29,"driverversion":2149654528},{"brand":"Sony","device":"A002SO","minapi":30,"driverversion":2149654528},{"brand":"Sony","device":"A101SO","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"A103SO","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"A201SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"A204SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"A301SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"PDT-FP1","minapi":33,"driverversion":2150252544},{"brand":"Sony","device":"XQ-AQ52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AQ62","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS42","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS62","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS72","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT42","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT51","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT72","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-CQ44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ72","minapi":34,"driverversion":2150252544},{"brand":"surface","device":"duo2","minapi":32,"driverversion":2149654528},{"brand":"TECNO","device":"TECNO-AD10","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-AD8","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-AD9","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-CL8","minapi":34,"driverversion":0},{"brand":"TECNO","device":"TECNO-CL9","minapi":34,"driverversion":0},{"brand":"VERTU","device":"VTL-202101","minapi":30,"driverversion":2149654528},{"brand":"VERTU","device":"VTL-202201","minapi":31,"driverversion":2150252544},{"brand":"vivo","device":"2045","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2046","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2047","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2114","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"DPD2106","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"DPD2221","minapi":33,"driverversion":0},{"brand":"vivo","device":"DPD2305","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"DPD2307","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD1950","minapi":29,"driverversion":2149654528},{"brand":"vivo","device":"PD1955","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD1981","minapi":31,"driverversion":2149654528},{"brand":"vivo","device":"PD2011","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2024","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2049","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2055","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2056","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2118","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2136","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2141","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2145","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2154","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2157","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2170","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2171","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2172","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2178","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2183","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2185","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2196","minapi":33,"driverversion":2150252544},{"brand":"vivo","device":"PD2199","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2203","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2207","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2217","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2218","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2227","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2229","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2231","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2238","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2241","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2242","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2243","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2244","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2245","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2254","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2256","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2266","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2284","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2301","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2302","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2303","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2304","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2307","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2309","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2314","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2323","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2329","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2337","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2338","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2344","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2144","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2145","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"V2218","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2219","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2230","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2308","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2309","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2318","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"V2319","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"apollo","minapi":31,"driverversion":2149654528},{"brand":"Xiaomi","device":"aristotle","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"aurora","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"babylon","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"cas","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"cetus","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"chenfeng","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"cmi","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"corot","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"cupid","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"dagu","minapi":34,"driverversion":2149654528},{"brand":"Xiaomi","device":"daumier","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"diting","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"elish","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"enuma","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"fuxi","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"haydn","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"haydnin","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"houji","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"ishtar","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"liuqin","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"mars","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"mayfly","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"nuwa","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"odin","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"pipa","minapi":34,"driverversion":2149654528},{"brand":"Xiaomi","device":"plato","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"psyche","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"shennong","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"star","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"thor","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"thyme","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"umi","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"unicorn","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"venus","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"vili","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"XIG04","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"yudi","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"yuechu","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"zeus","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"zizhan","minapi":34,"driverversion":2150252544},{"brand":"ZTE","device":"P870A01","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870A02","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870A21","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870F21","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P875A02","minapi":33,"driverversion":2149654528},{"brand":"ZTE","device":"P875A11","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P875A12","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P898A01","minapi":33,"driverversion":2150252544},{"brand":"ZTE","device":"P898A11","minapi":33,"driverversion":2150252544},{"brand":"ZTE","device":"P898F01","minapi":31,"driverversion":2150252544},{"brand":"ZTE","device":"P898P01","minapi":33,"driverversion":2150252544}],"DriverAllowList":[{"soc":"SM7450","driverfingerprint":"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)"},{"soc":"SM6450","driverfingerprint":"OpenGL ES 3.2 V@0615.80 (GIT@406382a20f, I986008d073, 1704447428) (Date:01/05/24)"},{"soc":"SM8450","driverfingerprint":"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)"},{"soc":"MT6877","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.8135628637558d6d27e8ec61da0ffbb5"},{"soc":"MT6769","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"MT6789","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3"},{"soc":"SM8350","driverfingerprint":"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)"},{"soc":"SM8635","driverfingerprint":"OpenGL ES 3.2 V@0762.15 (GIT@674f6c61df, Iec746bb8f9, 1712300122) (Date:04/05/24)"},{"soc":"MT6983","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b1c355f1ca75ee340751fc2d07d2e153"},{"soc":"SM8450","driverfingerprint":"OpenGL ES 3.2 V@0615.0 (GIT@194d5e5755, I6561b7ccb3, 1691691459) (Date:08/10/23)"},{"soc":"MT6877V/TTZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4"},{"soc":"MT6769Z","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.52688e0652bc37eab85ce86c674ab12f"},{"soc":"MT6879V_T/ZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.a031c769622e85782e9b68c066a81213"},{"soc":"SM7450","driverfingerprint":"OpenGL ES 3.2 V@0615.76 (GIT@fc9849b050, Ibccd5936db, 1700474993) (Date:11/20/23)"},{"soc":"MT6781","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.f8dc73e9e828783da7609cdc1c245dfa"},{"soc":"EXYNOS 2100","driverfingerprint":"OpenGL ES 3.2 v1.r38p0-01eac0-mbs2v41_0.65f90f7db733ed40f27c25ca33fc398f"},{"soc":"SM7675","driverfingerprint":"OpenGL ES 3.2 V@0762.17 (GIT@f115f6bba1, I45c6b84a32, 1712917670) (Date:04/12/24)"},{"soc":"SM4350","driverfingerprint":"OpenGL ES 3.2 V@0530.0 (GIT@8699000cd8, I1027f1d7d9, 1649421937) (Date:04/08/22)"},{"soc":"SM8350","driverfingerprint":"OpenGL ES 3.2 V@0530.0 (GIT@12ae96cb63, I409bbc12eb, 1694603898) (Date:09/13/23)"},{"soc":"MT8781V/CA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3"},{"soc":"SM4450","driverfingerprint":"OpenGL ES 3.2 V@0615.77 (GIT@64bab644ca, I204cbc9b5e, 1700479993) (Date:11/20/23)"},{"soc":"SM6375","driverfingerprint":"OpenGL ES 3.2 V@0530.0 (GIT@f3aa497c33, I7c31881d50, 1639653329) (Date:12/16/21)"},{"soc":"MT6985","driverfingerprint":"OpenGL ES 3.2 v1.r38p1"},{"soc":"MT6883","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.479f7c91bbdfefd5f0c368c0a30bcfd0"},{"soc":"S5E9945","driverfingerprint":"OpenGL ES 3.2 Driver version: 24.1.207 git hash: 927672398aa8"},{"soc":"SM8550","driverfingerprint":"OpenGL ES 3.2 V@0676.57 (GIT@6129fbc570, I5a3b7da999, 1708681500) (Date:02/23/24)"},{"soc":"S5E8835","driverfingerprint":"OpenGL ES 3.2 v1.r38p1-01eac0-mbs2v41_0.8e62f436dbeeadb2f1bba495fbb741ec"},{"soc":"SM8650","driverfingerprint":"OpenGL ES 3.2 V@0744.12 (GIT@62c1f322ce, Id0077aad60, 1700555917) (Date:11/21/23)"},{"soc":"MT6833V/PNZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139"},{"soc":"SM6375","driverfingerprint":"OpenGL ES 3.2 V@0762.17 (GIT@f115f6bba1, I45c6b84a32, 1712929337) (Date:04/12/24)"},{"soc":"MT8798Z/CNZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b1c355f1ca75ee340751fc2d07d2e153"},{"soc":"QCM6490","driverfingerprint":"OpenGL ES 3.2 V@0530.46 (GIT@a3cdec2236, Ief33eea0db, 1661255399) (Date:08/23/22)"},{"soc":"MT6789","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.9850964fe16242c585c8d423010c8595"},{"soc":"MT6768","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"SM4375","driverfingerprint":"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)"},{"soc":"SM8475","driverfingerprint":"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)"},{"soc":"S5E8825","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01bet2-mbs2v39_0.24a5b8b8abb488a61e5e48232a460c3e"},{"soc":"SM8650","driverfingerprint":"OpenGL ES 3.2 V@0744.18 (GIT@d774a8672e, I8ea610b5b4, 1704277645) (Date:01/03/24)"},{"soc":"SM6375","driverfingerprint":"OpenGL ES 3.2 V@0530.48 (GIT@e7626cbb06, If33672715f, 1674571865) (Date:01/24/23)"},{"soc":"SM6225","driverfingerprint":"OpenGL ES 3.2 V@0615.72 (GIT@67600309f5, I34f73d0972, 1688991399) (Date:07/10/23)"},{"soc":"MT6833P","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139"},{"soc":"SM6225","driverfingerprint":"OpenGL ES 3.2 V@0615.81 (GIT@75362bd531, I5cf4e5bf0f, 1704968105) (Date:01/11/24)"},{"soc":"MT6835","driverfingerprint":"OpenGL ES 3.2 v1.r38p1"},{"soc":"S5E9945","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: 131b607622f4"},{"soc":"SM7450","driverfingerprint":"OpenGL ES 3.2 V@0615.84 (GIT@72d8b177be, I020fdb6434, 1709038286) (Date:02/27/24)"},{"soc":"SM6225","driverfingerprint":"OpenGL ES 3.2 V@0615.84 (GIT@72d8b177be, I020fdb6434, 1709038286) (Date:02/27/24)"},{"soc":"SM8450","driverfingerprint":"OpenGL ES 3.2 V@0615.0 (GIT@770ea4bdb9, Ief8f71bb1e, 1706806055) (Date:02/01/24)"},{"soc":"MT6769V/WZ","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"SM7550","driverfingerprint":"OpenGL ES 3.2 V@0676.57 (GIT@6129fbc570, I5a3b7da999, 1708681500) (Date:02/23/24)"},{"soc":"MT6769V/CA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"MT6877V/TTZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.8135628637558d6d27e8ec61da0ffbb5"},{"soc":"SM7675","driverfingerprint":"OpenGL ES 3.2 V@0762.15 (GIT@674f6c61df, Iec746bb8f9, 1712300122) (Date:04/05/24)"},{"soc":"SM6225","driverfingerprint":"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)"},{"soc":"MT6895","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b89152572cfa9465230812a8225a45a0"},{"soc":"SM7435","driverfingerprint":"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)"},{"soc":"MT6833V/ZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139"},{"soc":"MT8791V/T","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4"},{"soc":"S5E8845","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: c2b872f4c96b"},{"soc":"TENSOR G2","driverfingerprint":"OpenGL ES 3.2 v1.r44p0-01eac0.1f05338ba59e9e7d040ba6bef774b2ac"},{"soc":"SM8550","driverfingerprint":"OpenGL ES 3.2 V@0676.42 (GIT@7b26bdd942, Iab69c31769, 1693222181) (Date:08/28/23)"},{"soc":"MT6769","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.52688e0652bc37eab85ce86c674ab12f"},{"soc":"MT6833V/NZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.0a0b917d9265b4c01be9925306306139"},{"soc":"SM8635","driverfingerprint":"OpenGL ES 3.2 V@0762.14 (GIT@c70b9a2a3c, I34176f3f01, 1711715768) (Date:03/29/24)"},{"soc":"SM7450","driverfingerprint":"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)"},{"soc":"SM8450","driverfingerprint":"OpenGL ES 3.2 V@0615.82 (GIT@9dec52427c, Ibe7eb5ecbe, 1705914897) (Date:01/22/24)"},{"soc":"S5E9945","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: d2a158dccead"},{"soc":"MT6893Z/CZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81"},{"soc":"MT6891Z/CZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81"},{"soc":"MT6789V/CD","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.394145956bc7cd8e697b330aba11e3d3"},{"soc":"MT8786V/CA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"SM8350","driverfingerprint":"OpenGL ES 3.2 V@0530.47 (GIT@eaa701cd06, I183f6321f0, 1666871261) (Date:10/27/22)"},{"soc":"MT6886","driverfingerprint":"OpenGL ES 3.2 v1.r38p1"},{"soc":"SM6115","driverfingerprint":"OpenGL ES 3.2 V@0615.86 (GIT@30f48d66fb, I33af6953c3, 1712899917) (Date:04/12/24)"},{"soc":"SM8450","driverfingerprint":"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)"},{"soc":"SM8350","driverfingerprint":"OpenGL ES 3.2 V@0530.53 (GIT@a1cf8ab5e3, I428bf45773, 1699535026) (Date:11/09/23)"},{"soc":"SM8650","driverfingerprint":"OpenGL ES 3.2 V@0762.10 (GIT@1394a2c7a8, Id12349e41b, 1708672982) (Date:02/23/24)"},{"soc":"SM6375","driverfingerprint":"OpenGL ES 3.2 V@0762.18 (GIT@af856151b0, Id776b0abd7, 1714127119) (Date:04/26/24)"},{"soc":"S5E9925","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: ea27396cef93"},{"soc":"SM7325","driverfingerprint":"OpenGL ES 3.2 V@0530.53 (GIT@a1cf8ab5e3, I428bf45773, 1699535026) (Date:11/09/23)"},{"soc":"S5E9925","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: 72640fd9af5e"},{"soc":"MT8766A","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"SM8635","driverfingerprint":"OpenGL ES 3.2 V@0762.9 (GIT@1fe7e097fd, Iac1c08c4e4, 1708364057) (Date:02/19/24)"},{"soc":"SM7435","driverfingerprint":"OpenGL ES 3.2 V@0615.73 (GIT@8f5499ec14, Ie6ef1a0a80, 1689341690) (Date:07/14/23)"},{"soc":"SM8475","driverfingerprint":"OpenGL ES 3.2 V@0615.0 (GIT@770ea4bdb9, Ief8f71bb1e, 1706806055) (Date:02/01/24)"},{"soc":"EXYNOS 2100","driverfingerprint":"OpenGL ES 3.2 v1.r38p0-01eac0-mbs2v41_0.fbda7a2431aa2b386a4490f824f8fcc5"},{"soc":"SM7325","driverfingerprint":"OpenGL ES 3.2 V@0530.0 (GIT@cac6e6f805, I5187d04b75, 1637574833) (Date:11/22/21)"},{"soc":"S5E8835","driverfingerprint":"OpenGL ES 3.2 v1.r38p1-01eac0-mbs2v41_0.c23b38d1557dbf46a5d45aec73cc4d15"},{"soc":"MT6833","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.e1f01de808a0a50894ce9df2ecbbec80"},{"soc":"SM7325","driverfingerprint":"OpenGL ES 3.2 V@0530.47 (GIT@eaa701cd06, I183f6321f0, 1666871261) (Date:10/27/22)"},{"soc":"SM7675","driverfingerprint":"OpenGL ES 3.2 V@0762.21 (GIT@21ec731d58, Ifa39d99f17, 1717163077) (Date:05/31/24)"},{"soc":"SM8475","driverfingerprint":"OpenGL ES 3.2 V@0615.74 (GIT@dad4038ba6, If56d4a5bb8, 1690544947) (Date:07/28/23)"},{"soc":"S5E9925","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: 420895f80df0"},{"soc":"SM8350","driverfingerprint":"OpenGL ES 3.2 V@0530.49 (GIT@329cf4c2a7, I63533b1e29, 1675175164) (Date:01/31/23)"},{"soc":"MT6877","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.b8cf1793b1173c0bb23abcfef1974de4"},{"soc":"SM6225","driverfingerprint":"OpenGL ES 3.2 V@0615.77 (GIT@64bab644ca, I204cbc9b5e, 1700479993) (Date:11/20/23)"},{"soc":"A523","driverfingerprint":"OpenGL ES 3.2 v1.r40p0-01eac0.c527590351327cc7ce8e3744d9361ee2"},{"soc":"MT6893","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.efd03ef21f136842c0935bd4f493fe81"},{"soc":"SM8475","driverfingerprint":"OpenGL ES 3.2 V@0615.0 (GIT@194d5e5755, I6561b7ccb3, 1691691459) (Date:08/10/23)"},{"soc":"MT6896Z/CZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.54329dee8f160f288c574caaf67bbe3f"},{"soc":"MT6833","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.f20ecd5cf326048879c2d906512e687e"},{"soc":"MT6895Z_B/TCZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.54329dee8f160f288c574caaf67bbe3f"},{"soc":"S5E8845","driverfingerprint":"OpenGL ES 3.2 ANGLE git hash: 4ae132631265"},{"soc":"T612","driverfingerprint":"OpenGL ES 3.2 v1.r41p0-01eac0.018fc629603b7a70cc68d32f78ac8686"},{"soc":"MT6878","driverfingerprint":"OpenGL ES 3.2 v1.r44p1-01eac0.9dfad904584e582a866ae268ba67da86"},{"soc":"MT6877V/ZA","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.fdc5c778fea891c0453057246e18e215"},{"soc":"MT6769V/CZ","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"}],"DriverDenyList":[{"soc":"TENSOR","driverfingerprint":"OpenGL ES 3.2 v1.r47p0-01eac0.32ea38cfcac3afe9a9b43f4ca33f49a9"},{"soc":"MT6765","driverfingerprint":"OpenGL ES 3.2 build 1.13@5776728"},{"soc":"MT6769V/CB","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.2a893c04ca0026c2e6802dbe7d7af5c5"},{"soc":"MT6769V/CZ","driverfingerprint":"OpenGL ES 3.2 v1.r32p1-01eac0.fc49d6bd800ecb1492a1f77284a4d178"},{"soc":"SM6450","driverfingerprint":"OpenGL ES 3.2 V@0615.86 (GIT@30f48d66fb, I33af6953c3, 1712899917) (Date:04/12/24)"},{"soc":"TENSOR G4","driverfingerprint":"OpenGL ES 3.2 v1.r47p0-01eac0.dcd0e390f0239618a7dd5d0b929ff6e1"},{"soc":"TENSOR","driverfingerprint":"OpenGL ES 3.2 v1.r46p0-01eac1.6b76d861277b3ea6941f5aa972def735"}],"GpuPredictAllowList":[{"brand":"Adreno","devicename":"^Adreno (TM) 7","deviceid":0,"vendorid":0,"minapi":34,"driverversion":2150252544},{"brand":"Adreno","devicename":"^Adreno (TM) 8","deviceid":0,"vendorid":0,"minapi":34,"driverversion":2150531090},{"brand":"Xclipse","devicename":"Samsung Xclipse 920","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 930","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 930A","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 940","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 950","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Mali","devicename":"^Mali-G625","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"^Mali-G71","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"^Mali-G72","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"*G925","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"IMG","devicename":"*DXT-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*CXTP-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-64-2048","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-16-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-8-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XM-8-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496}],"GpuPredictDenyList":[{"brand":"Adreno","devicename":"^Adreno (TM) 6","deviceid":0,"vendorid":0,"minapi":0,"driverversion":2149490689}]} \ No newline at end of file +{"ProjectSchemaVersion":1,"ExportedListFileVersion":66052,"MinApiForFutureRecommendation":38,"DeviceAllowList":[{"brand":"asus","device":"ASUS_AI2201","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2202","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2203","minapi":33,"driverversion":0},{"brand":"asus","device":"ASUS_AI2205","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2302","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_AI2401","minapi":34,"driverversion":2150252544},{"brand":"asus","device":"ASUS_I002D","minapi":31,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I003_1","minapi":31,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I004D","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I005_1","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I006D","minapi":33,"driverversion":2149654528},{"brand":"asus","device":"ASUS_I007_1","minapi":30,"driverversion":2149654528},{"brand":"DOCOMO","device":"F51A","minapi":31,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51A","minapi":31,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51B","minapi":33,"driverversion":2149654528},{"brand":"DOCOMO","device":"SH-51D","minapi":34,"driverversion":2150252544},{"brand":"DOCOMO","device":"SH-52C","minapi":34,"driverversion":2150252544},{"brand":"DOCOMO","device":"SH-52D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-51A","minapi":31,"driverversion":2149654528},{"brand":"docomo","device":"SO-51B","minapi":33,"driverversion":2149654528},{"brand":"docomo","device":"SO-51C","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-51D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-52A","minapi":31,"driverversion":2149654528},{"brand":"docomo","device":"SO-53B","minapi":33,"driverversion":2149654528},{"brand":"docomo","device":"SO-53D","minapi":34,"driverversion":2150252544},{"brand":"docomo","device":"SO-54C","minapi":34,"driverversion":2150252544},{"brand":"google","device":"akita","minapi":34,"driverversion":0},{"brand":"google","device":"panther","minapi":34,"driverversion":0},{"brand":"google","device":"felix","minapi":34,"driverversion":0},{"brand":"google","device":"husky","minapi":34,"driverversion":0},{"brand":"google","device":"lynx","minapi":34,"driverversion":0},{"brand":"google","device":"cheetah","minapi":34,"driverversion":0},{"brand":"google","device":"tangorpro","minapi":34,"driverversion":0},{"brand":"google","device":"shiba","minapi":34,"driverversion":0},{"brand":"google","device":"comet","minapi":34,"driverversion":0},{"brand":"google","device":"caiman","minapi":34,"driverversion":0},{"brand":"google","device":"tegu","minapi":34,"driverversion":0},{"brand":"google","device":"stallion","minapi":34,"driverversion":0},{"brand":"google","device":"tokay","minapi":34,"driverversion":0},{"brand":"google","device":"komodo","minapi":34,"driverversion":0},{"brand":"google","device":"frankel","minapi":35,"driverversion":0},{"brand":"google","device":"blazer","minapi":35,"driverversion":0},{"brand":"google","device":"rango","minapi":35,"driverversion":0},{"brand":"HONOR","device":"HNBVL","minapi":34,"driverversion":2150531090},{"brand":"HONOR","device":"HNBVL-AN00","minapi":34,"driverversion":2150531090},{"brand":"HONOR","device":"HNFRI","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNLGE","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAA","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAG","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNMAP","minapi":34,"driverversion":2150252544},{"brand":"HONOR","device":"HNPGT","minapi":33,"driverversion":2150252544},{"brand":"HONOR","device":"HNVER","minapi":33,"driverversion":2150252544},{"brand":"HTC","device":"htc_enodugls","minapi":34,"driverversion":2150252544},{"brand":"Infinix","device":"Infinix-X6871","minapi":34,"driverversion":0},{"brand":"iQOO","device":"2009","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2012","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2017","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2019","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"2022","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I1928","minapi":31,"driverversion":2149654528},{"brand":"iQOO","device":"I2201","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2202","minapi":34,"driverversion":2149654528},{"brand":"iQOO","device":"I2212","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2214","minapi":34,"driverversion":0},{"brand":"iQOO","device":"I2217","minapi":34,"driverversion":2150252544},{"brand":"iQOO","device":"I2220","minapi":34,"driverversion":2150531090},{"brand":"iQOO","device":"I2304","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG01","minapi":31,"driverversion":2149654528},{"brand":"KDDI","device":"SOG02","minapi":31,"driverversion":2149654528},{"brand":"KDDI","device":"SOG03","minapi":33,"driverversion":2149654528},{"brand":"KDDI","device":"SOG05","minapi":33,"driverversion":2149654528},{"brand":"KDDI","device":"SOG06","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG09","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG10","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"SOG12","minapi":34,"driverversion":2150252544},{"brand":"KDDI","device":"TGD","minapi":31,"driverversion":2149654528},{"brand":"LeiaInc","device":"LumePad","minapi":31,"driverversion":2149654528},{"brand":"Lenovo","device":"doom","minapi":30,"driverversion":2149654528},{"brand":"Lenovo","device":"halo","minapi":32,"driverversion":2149654528},{"brand":"Lenovo","device":"moba","minapi":30,"driverversion":2149654528},{"brand":"Lenovo","device":"olivine","minapi":33,"driverversion":2149654528},{"brand":"Lenovo","device":"TB320FC","minapi":33,"driverversion":2149654528},{"brand":"lge","device":"L-51A","minapi":31,"driverversion":2149654528},{"brand":"lge","device":"rainbowlm","minapi":30,"driverversion":2149654528},{"brand":"lge","device":"timelm","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu17","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu17Pro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18Pro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18s","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18sPro","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu18X","minapi":33,"driverversion":2149654528},{"brand":"meizu","device":"meizu20","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu20Inf","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu20Pro","minapi":34,"driverversion":2150252544},{"brand":"meizu","device":"meizu21","minapi":34,"driverversion":2150531090},{"brand":"meizu","device":"meizu21Pro","minapi":34,"driverversion":2150531090},{"brand":"Mi","device":"aliothin","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"bronco","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"burton","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"eqe","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"eqs","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"hiphi","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"hiphic","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"nio","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"oneli","minapi":33,"driverversion":2150252544},{"brand":"motorola","device":"pstar","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"rtwo","minapi":34,"driverversion":2150252544},{"brand":"motorola","device":"tundra","minapi":33,"driverversion":2149654528},{"brand":"motorola","device":"xpeng","minapi":31,"driverversion":2149654528},{"brand":"motorola","device":"zeekr","minapi":33,"driverversion":2150252544},{"brand":"NEC","device":"LAVIETab9QHD1","minapi":33,"driverversion":2149654528},{"brand":"Nothing","device":"Pong","minapi":34,"driverversion":2150252544},{"brand":"nubia","device":"NX659J","minapi":29,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-EEA","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-RU","minapi":29,"driverversion":2149654528},{"brand":"nubia","device":"NX659J-UN","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX666J","minapi":30,"driverversion":2149654528},{"brand":"nubia","device":"NX669J","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX669J-EEA","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX669J-UN","minapi":32,"driverversion":2149654528},{"brand":"nubia","device":"NX679J","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX679S","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX709S-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX729J-EEA","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX729J-UN","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"NX769J","minapi":34,"driverversion":2150531090},{"brand":"nubia","device":"P875N02","minapi":31,"driverversion":2149654528},{"brand":"nubia","device":"P898A21","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"P898P02","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A01","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A02","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ82A11","minapi":33,"driverversion":2150252544},{"brand":"nubia","device":"PQ83A01","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OnePlus8","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8Pro","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8T","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8TMO","minapi":33,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8TTMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8Visible","minapi":30,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus8VZW","minapi":30,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9Pro","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9ProTMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9R","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OnePlus9TMO","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP5154L1","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP5155L1","minapi":34,"driverversion":2149654528},{"brand":"OnePlus","device":"OP516EL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5552L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5565","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5566L1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5567L1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP556FL1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP591BL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5927","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5929L1","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OP5943L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP594DL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP595DL1","minapi":34,"driverversion":2150531090},{"brand":"OnePlus","device":"OP5961L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5973L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP59BCL1","minapi":34,"driverversion":0},{"brand":"OnePlus","device":"OP5CF9L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5CFBL1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5D35L1","minapi":34,"driverversion":2150252544},{"brand":"OnePlus","device":"OP5D3FL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP4A77","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4A7A","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4AD9","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4BA1L1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4BA2L1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4E3F","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4E75L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4EA7","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4EC1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F0BL1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F57L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP4F7FL1","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP520DL1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP520F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5223","minapi":33,"driverversion":2149654528},{"brand":"OPPO","device":"OP5281","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP528BL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP528F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5297","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP52D1L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP52D5L1","minapi":34,"driverversion":2149654528},{"brand":"OPPO","device":"OP5335L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP55F3L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP55FF","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5601","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP5607L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP561F","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP564B","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP565FL1","minapi":34,"driverversion":2150531090},{"brand":"OPPO","device":"OP5661L1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56BBL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP56CDL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56CFL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP56D3L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5989","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59BBL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59EDL1","minapi":34,"driverversion":0},{"brand":"OPPO","device":"OP59EFL1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5A15L1","minapi":34,"driverversion":2150252544},{"brand":"OPPO","device":"OP5AD3L1","minapi":34,"driverversion":0},{"brand":"POCO","device":"alioth","minapi":33,"driverversion":2149654528},{"brand":"POCO","device":"garnet","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"ingres","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"lmi","minapi":31,"driverversion":2149654528},{"brand":"POCO","device":"marble","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"marblein","minapi":34,"driverversion":2150252544},{"brand":"POCO","device":"munch","minapi":33,"driverversion":2149654528},{"brand":"POCO","device":"xaga","minapi":33,"driverversion":0},{"brand":"RAKUTEN","device":"Banagher","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RE546F","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE5471","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE5473","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE5477","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE547F","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE54E4L1","minapi":34,"driverversion":2149654528},{"brand":"realme","device":"RE5860","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE58B2L1","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RE58D1L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE5C33","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE5C37","minapi":34,"driverversion":2150531090},{"brand":"realme","device":"RE5C82L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RE879AL1","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RED8ACL1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RED8BEL1","minapi":34,"driverversion":0},{"brand":"realme","device":"REE2B2L1","minapi":34,"driverversion":2150252544},{"brand":"realme","device":"RMX2071CN","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2072CN","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2075L1","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2076L1","minapi":31,"driverversion":2149654528},{"brand":"realme","device":"RMX2202CN","minapi":33,"driverversion":2149654528},{"brand":"realme","device":"RMX2202L1","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"alioth","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"apollo","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"corot","minapi":34,"driverversion":0},{"brand":"Redmi","device":"diting","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"dizi","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"garnet","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"haydn","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"ingres","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"lmi","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"lmipro","minapi":31,"driverversion":2149654528},{"brand":"Redmi","device":"marble","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"mondrian","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"munch","minapi":33,"driverversion":2149654528},{"brand":"Redmi","device":"pearl","minapi":33,"driverversion":0},{"brand":"Redmi","device":"peridot","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"rembrandt","minapi":33,"driverversion":0},{"brand":"Redmi","device":"ruan","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"socrates","minapi":34,"driverversion":2150252544},{"brand":"Redmi","device":"xaga","minapi":33,"driverversion":0},{"brand":"Redmi","device":"xagain","minapi":33,"driverversion":0},{"brand":"Redmi","device":"xagapro","minapi":33,"driverversion":0},{"brand":"samsung","device":"a55x","minapi":34,"driverversion":0},{"brand":"samsung","device":"b0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"b0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"b2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"b4q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"b5q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"bloomxq","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"c1q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"c2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"dm1q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"dm2q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"dm3q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"e1q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"e1s","minapi":34,"driverversion":0},{"brand":"samsung","device":"e2q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"e2s","minapi":34,"driverversion":0},{"brand":"samsung","device":"e3q","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"f2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"g0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"g0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"gts7l","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7lwifi","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7xl","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts7xlwifi","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"gts8","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8p","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8pwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8u","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8uwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts8wifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9p","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9pwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9u","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9uwifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"gts9wifi","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"m44x","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"o1q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"p3q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"q2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"q4q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"q5q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r0q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r0s","minapi":34,"driverversion":0},{"brand":"samsung","device":"r11q","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"r11s","minapi":34,"driverversion":0},{"brand":"samsung","device":"r8q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"r9q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-51A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-51B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-51C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-51D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-51E","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SC-52A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-52B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-52C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-52D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-52E","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SC-53A","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SC-54B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-54C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-54D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-55B","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SC-55C","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC-55D","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SC51Aa","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG01","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG02","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG03","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG04","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG06","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"SCG09","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG10","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG11","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG12","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"SCG13","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG14","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG16","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG17","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG19","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG20","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG22","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG23","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG24","minapi":34,"driverversion":2150252544},{"brand":"samsung","device":"SCG25","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"SCG26","minapi":34,"driverversion":2150531090},{"brand":"samsung","device":"t2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"v2q","minapi":34,"driverversion":2149654528},{"brand":"samsung","device":"x1q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"y2q","minapi":33,"driverversion":2149654528},{"brand":"samsung","device":"z3q","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"Judau","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"JudauL","minapi":33,"driverversion":2149654528},{"brand":"SG","device":"Kamille","minapi":33,"driverversion":2150252544},{"brand":"SG","device":"KamilleL","minapi":34,"driverversion":2150252544},{"brand":"SG","device":"Mineva","minapi":34,"driverversion":2150252544},{"brand":"SG","device":"MinevaL","minapi":31,"driverversion":2150252544},{"brand":"SG","device":"SG908SH","minapi":31,"driverversion":2149654528},{"brand":"SHARP","device":"Banagher","minapi":30,"driverversion":2149654528},{"brand":"SHARP","device":"FaYuiry","minapi":34,"driverversion":2150252544},{"brand":"SHARP","device":"Judau","minapi":33,"driverversion":2149654528},{"brand":"SHARP","device":"Kamille","minapi":34,"driverversion":2150252544},{"brand":"SoftBank","device":"Z8851S","minapi":29,"driverversion":2149654528},{"brand":"Sony","device":"A002SO","minapi":30,"driverversion":2149654528},{"brand":"Sony","device":"A101SO","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"A103SO","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"A201SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"A204SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"A301SO","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"PDT-FP1","minapi":33,"driverversion":2150252544},{"brand":"Sony","device":"XQ-AQ52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AQ62","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS42","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS62","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AS72","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT42","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT51","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT52","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-AT72","minapi":31,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BC72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BE72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ42","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ52","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ62","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-BQ72","minapi":33,"driverversion":2149654528},{"brand":"Sony","device":"XQ-CQ44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CQ72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-CT72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DE72","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ44","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ54","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ62","minapi":34,"driverversion":2150252544},{"brand":"Sony","device":"XQ-DQ72","minapi":34,"driverversion":2150252544},{"brand":"surface","device":"duo2","minapi":32,"driverversion":2149654528},{"brand":"TECNO","device":"TECNO-AD10","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-AD8","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-AD9","minapi":33,"driverversion":0},{"brand":"TECNO","device":"TECNO-CL8","minapi":34,"driverversion":0},{"brand":"TECNO","device":"TECNO-CL9","minapi":34,"driverversion":0},{"brand":"VERTU","device":"VTL-202101","minapi":30,"driverversion":2149654528},{"brand":"VERTU","device":"VTL-202201","minapi":31,"driverversion":2150252544},{"brand":"vivo","device":"2045","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2046","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2047","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"2114","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"DPD2106","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"DPD2221","minapi":33,"driverversion":0},{"brand":"vivo","device":"DPD2305","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"DPD2307","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD1950","minapi":29,"driverversion":2149654528},{"brand":"vivo","device":"PD1955","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD1981","minapi":31,"driverversion":2149654528},{"brand":"vivo","device":"PD2011","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2024","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2049","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2055","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2056","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2118","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2136","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2141","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2145","minapi":34,"driverversion":2149654528},{"brand":"vivo","device":"PD2154","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2157","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2170","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2171","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2172","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2178","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2183","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2185","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2196","minapi":33,"driverversion":2150252544},{"brand":"vivo","device":"PD2199","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2203","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2207","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2217","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2218","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2227","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2229","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2231","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2238","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2241","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2242","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2243","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2244","minapi":33,"driverversion":2149654528},{"brand":"vivo","device":"PD2245","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2254","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2256","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2266","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2284","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2301","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2302","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2303","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2304","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2307","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2309","minapi":34,"driverversion":0},{"brand":"vivo","device":"PD2314","minapi":33,"driverversion":0},{"brand":"vivo","device":"PD2323","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2329","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2337","minapi":34,"driverversion":2150531090},{"brand":"vivo","device":"PD2338","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"PD2344","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2144","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2145","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"V2218","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2219","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2230","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2308","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2309","minapi":34,"driverversion":0},{"brand":"vivo","device":"V2318","minapi":34,"driverversion":2150252544},{"brand":"vivo","device":"V2319","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"apollo","minapi":31,"driverversion":2149654528},{"brand":"Xiaomi","device":"aristotle","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"aurora","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"babylon","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"cas","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"cetus","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"chenfeng","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"cmi","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"corot","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"cupid","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"dagu","minapi":34,"driverversion":2149654528},{"brand":"Xiaomi","device":"daumier","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"diting","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"elish","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"enuma","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"fuxi","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"haydn","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"haydnin","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"houji","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"ishtar","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"liuqin","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"mars","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"mayfly","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"nuwa","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"odin","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"pipa","minapi":34,"driverversion":2149654528},{"brand":"Xiaomi","device":"plato","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"psyche","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"shennong","minapi":34,"driverversion":2150531090},{"brand":"Xiaomi","device":"star","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"thor","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"thyme","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"umi","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"unicorn","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"venus","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"vili","minapi":33,"driverversion":2149654528},{"brand":"Xiaomi","device":"XIG04","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"yudi","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"yuechu","minapi":34,"driverversion":0},{"brand":"Xiaomi","device":"zeus","minapi":34,"driverversion":2150252544},{"brand":"Xiaomi","device":"zizhan","minapi":34,"driverversion":2150252544},{"brand":"ZTE","device":"P870A01","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870A02","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870A21","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P870F21","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P875A02","minapi":33,"driverversion":2149654528},{"brand":"ZTE","device":"P875A11","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P875A12","minapi":31,"driverversion":2149654528},{"brand":"ZTE","device":"P898A01","minapi":33,"driverversion":2150252544},{"brand":"ZTE","device":"P898A11","minapi":33,"driverversion":2150252544},{"brand":"ZTE","device":"P898F01","minapi":31,"driverversion":2150252544},{"brand":"ZTE","device":"P898P01","minapi":33,"driverversion":2150252544}],"DriverAllowList":[{"soc":"zzzzzz","driverfingerprint":"zzzzz"},{"soc":"zzzzzz2","driverfingerprint":"zzzzz2"}],"DriverDenyList":[{"soc":"zzzzzx","driverfingerprint":"zzzzx"},{"soc":"zzzzzx2","driverfingerprint":"zzzzx2"}],"GpuPredictAllowList":[{"brand":"Adreno","devicename":"^Adreno (TM) 7","deviceid":0,"vendorid":0,"minapi":34,"driverversion":2150252544},{"brand":"Adreno","devicename":"^Adreno (TM) 8","deviceid":0,"vendorid":0,"minapi":34,"driverversion":2150531090},{"brand":"Xclipse","devicename":"Samsung Xclipse 920","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 930","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 930A","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 940","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Xclipse","devicename":"Samsung Xclipse 950","deviceid":0,"vendorid":0,"minapi":34,"driverversion":0},{"brand":"Mali","devicename":"^Mali-G625","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"^Mali-G71","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"^Mali-G72","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"Mali","devicename":"*G925","deviceid":0,"vendorid":0,"minapi":34,"driverversion":192937984},{"brand":"IMG","devicename":"*DXT-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*CXTP-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-64-2048","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-48-1536","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-16-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XT*-8-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496},{"brand":"IMG","devicename":"*XM-8-256","deviceid":0,"vendorid":0,"minapi":36,"driverversion":6660496}],"GpuPredictDenyList":[{"brand":"Adreno","devicename":"^Adreno (TM) 6","deviceid":0,"vendorid":0,"minapi":0,"driverversion":2149490689}]} \ No newline at end of file diff --git a/vkq_library/vkquality/src/main/assets/vkqualitydata.vkq b/vkq_library/vkquality/src/main/assets/vkqualitydata.vkq index 40702dc3c035808878dbf1d264127730466d14db..c07ac7f3bb789ccfef9eef4dec3f9a64d317040a 100644 GIT binary patch literal 16088 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 From 1ec0dce9f608d73aa77c5369297ab4db17796e6f Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Thu, 14 May 2026 09:41:00 -0500 Subject: [PATCH 2/9] Add Vulkan dEQP check on unknown devices Changes final-check behavior on unknown devices to recommend Vulkan if the device declares passing on dEQP 2024.03.01 or later. Replaces the 'future Android' recommendation for fail-forward. --- .../src/main/cpp/vkquality_device_info.h | 1 + .../src/main/cpp/vkquality_manager.cpp | 139 +++++++++++++++++- .../src/main/cpp/vkquality_manager.h | 2 + .../src/main/cpp/vkquality_tests.cpp | 8 + 4 files changed, 148 insertions(+), 2 deletions(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_device_info.h b/vkq_library/vkquality/src/main/cpp/vkquality_device_info.h index 29fcdcf..878ab4a 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_device_info.h +++ b/vkq_library/vkquality/src/main/cpp/vkquality_device_info.h @@ -33,6 +33,7 @@ struct DeviceInfo { std::string gles_vendor; std::string gles_version; int32_t api_level = kWildcardValue; + int32_t vk_deqp_level = kWildcardValue; uint32_t vk_api_version = kWildcardValue; uint32_t vk_device_id = kWildcardValue; uint32_t vk_driver_version = kWildcardValue; diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp index 798fd2c..b027807 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp @@ -29,6 +29,7 @@ #include "vulkan_util.h" #define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) +//#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) #define LOG_TAG "VKQUALITY" extern "C" uint32_t VkQuality_getVersion(); @@ -40,6 +41,9 @@ constexpr const char *kCacheFilename = "vkqcache.bin"; // Build.SOC_MODEL requires API 31 or higher constexpr const int kMinSoCAPI = 31; +// Minimum Vulkan dEQP version required for quality +constexpr const int32_t kMinVkDeqp = 0x7e80301; + // Device info class and field name constants for Android constexpr const char *kAndroidBuildClass = "android/os/Build"; constexpr const char *kBrandField = "BRAND"; @@ -127,6 +131,135 @@ std::string VkQualityManager::GetStaticStringField(JNIEnv *env, jclass clz, return ret_value; } +int32_t VkQualityManager::GetVulkanDEQPLevel(JNIEnv *env) { + int32_t deqp_level = 0; + + jclass activity_thread_clz = env->FindClass("android/app/ActivityThread"); + if (activity_thread_clz == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + ALOGE("Failed to find ActivityThread class"); + return 0; + } + + jmethodID current_app_method = env->GetStaticMethodID( + activity_thread_clz, "currentApplication", "()Landroid/app/Application;"); + if (current_app_method == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(activity_thread_clz); + ALOGE("Failed to get currentApplication method"); + return 0; + } + + jobject context = env->CallStaticObjectMethod(activity_thread_clz, current_app_method); + env->DeleteLocalRef(activity_thread_clz); + if (context == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + ALOGE("Context is null"); + return 0; + } + + jclass context_clz = env->FindClass("android/content/Context"); + if (context_clz == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(context); + ALOGE("Failed to find Context class"); + return 0; + } + + jmethodID get_pm_method = env->GetMethodID( + context_clz, "getPackageManager", "()Landroid/content/pm/PackageManager;"); + env->DeleteLocalRef(context_clz); + if (get_pm_method == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(context); + ALOGE("Failed to get getPackageManager method"); + return 0; + } + + jobject pm = env->CallObjectMethod(context, get_pm_method); + env->DeleteLocalRef(context); + if (pm == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + ALOGE("PackageManager is null"); + return 0; + } + + jclass pm_clz = env->FindClass("android/content/pm/PackageManager"); + if (pm_clz == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(pm); + ALOGE("Failed to find PackageManager class"); + return 0; + } + + jmethodID get_features_method = env->GetMethodID( + pm_clz, "getSystemAvailableFeatures", "()[Landroid/content/pm/FeatureInfo;"); + env->DeleteLocalRef(pm_clz); + if (get_features_method == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(pm); + ALOGE("Failed to get getSystemAvailableFeatures method"); + return 0; + } + + auto features = reinterpret_cast( + env->CallObjectMethod(pm, get_features_method)); + env->DeleteLocalRef(pm); + if (features == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + ALOGE("features array is null"); + return 0; + } + + jsize features_len = env->GetArrayLength(features); + jclass feature_info_clz = env->FindClass("android/content/pm/FeatureInfo"); + if (feature_info_clz == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(features); + ALOGE("Failed to find FeatureInfo class"); + return 0; + } + + jfieldID name_field = env->GetFieldID(feature_info_clz, "name", "Ljava/lang/String;"); + jfieldID version_field = env->GetFieldID(feature_info_clz, "version", "I"); + if (name_field == nullptr || version_field == nullptr) { + if (env->ExceptionCheck()) env->ExceptionClear(); + env->DeleteLocalRef(feature_info_clz); + env->DeleteLocalRef(features); + ALOGE("Failed to get FeatureInfo name or version field"); + return 0; + } + + for (jsize i = 0; i < features_len; ++i) { + jobject feature = env->GetObjectArrayElement(features, i); + if (feature == nullptr) { + continue; + } + + auto jname = reinterpret_cast(env->GetObjectField(feature, name_field)); + if (jname != nullptr) { + const char *name_cstr = env->GetStringUTFChars(jname, nullptr); + if (name_cstr != nullptr) { + if (strcmp(name_cstr, "android.software.vulkan.deqp.level") == 0) { + deqp_level = env->GetIntField(feature, version_field); + env->ReleaseStringUTFChars(jname, name_cstr); + env->DeleteLocalRef(jname); + env->DeleteLocalRef(feature); + break; + } + env->ReleaseStringUTFChars(jname, name_cstr); + } + env->DeleteLocalRef(jname); + } + env->DeleteLocalRef(feature); + } + + env->DeleteLocalRef(feature_info_clz); + env->DeleteLocalRef(features); + + return deqp_level; +} + vkQualityInitResult VkQualityManager::InitDeviceInfo(JNIEnv *env, DeviceInfo &device_info, const vkqGraphicsAPIInfo *api_info) { jclass build_class = env->FindClass(kAndroidBuildClass); @@ -144,6 +277,8 @@ vkQualityInitResult VkQualityManager::InitDeviceInfo(JNIEnv *env, DeviceInfo &de device_info.api_level = android_get_device_api_level(); + device_info.vk_deqp_level = GetVulkanDEQPLevel(env); + if (api_info != nullptr && api_info->gles_version_string != nullptr) { device_info.gles_version = api_info->gles_version_string; } else { @@ -351,8 +486,8 @@ vkQualityInitResult VkQualityManager::StartRecommendation() { // Recommend Vulkan on unrecognized devices when ANGLE is the GLES driver quality_recommendation_ = kRecommendationVulkanBecausePredictionMatch; } else if (quality_recommendation_ == kRecommendationGLESBecauseNoDeviceMatch && - device_info.api_level >= prediction_file_.GetFutureAndroidAPILevel()) { - quality_recommendation_ = kRecommendationVulkanBecauseFutureAndroid; + device_info.vk_deqp_level >= kMinVkDeqp) { + quality_recommendation_ = kRecommendationVulkanBecausePredictionMatch; } cache_list_version_ = prediction_file_.GetListVersion(); SaveCache(device_info); diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_manager.h b/vkq_library/vkquality/src/main/cpp/vkquality_manager.h index 8383c6e..819741d 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_manager.h +++ b/vkq_library/vkquality/src/main/cpp/vkquality_manager.h @@ -71,6 +71,8 @@ class VkQualityManager { static std::string GetStaticStringField(JNIEnv *env, jclass clz, const char *name); + static int32_t GetVulkanDEQPLevel(JNIEnv *env); + static vkQualityInitResult InitDeviceInfo(JNIEnv *env, DeviceInfo &device_info, const vkqGraphicsAPIInfo *api_info); diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp index 20bba26..7aa544d 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp @@ -624,6 +624,7 @@ TEST(VkQualityDeviceMatchTests, Validity) "genericvendor", "genericfingerprint", 30, + 0x7e80301, VK_API_VERSION_1_1, 0x3330000, 0x10000, @@ -705,6 +706,7 @@ TEST(VkQualityGpuTests, Validity) "genericvendor", "genericfingerprint", 30, + 0x7e80301, VK_API_VERSION_1_1, 0x3330000, 0x10000, @@ -850,6 +852,7 @@ TEST(VkQualityRecommendationTests, Validity) { "genericvendor", "genericfingerprint", kDefaultMinAndroidApi, + 0x7e80301, VK_API_VERSION_1_3, 0x111, kFakeGpuVendor_Google_MinDriverVersion, @@ -886,6 +889,7 @@ TEST(VkQualityRecommendationTests, Validity) { "genericvendor", "genericfingerprint", kDefaultMinAndroidApi + 1, + 0x7e80301, VK_API_VERSION_1_3, 0x111, kFakeGpuVendor_Google_MinDriverVersion, @@ -904,6 +908,7 @@ TEST(VkQualityRecommendationTests, Validity) { "genericvendor", "genericfingerprint", kDefaultMinAndroidApi, + 0x7e80301, VK_API_VERSION_1_3, 0x333, kFakeGpuVendor_9dfx_MinDriverVersion, @@ -931,6 +936,7 @@ TEST(VkQualityRecommendationTests, Validity) { "genericvendor", "genericfingerprint", kDefaultMinAndroidApi, + 0x7e80301, VK_API_VERSION_1_3, 0x222, kFakeGpuVendor_ZMistake_MinDriverVersion, @@ -968,6 +974,7 @@ TEST(VkQualityFingerprintTests, Validity) { "genericvendor", "zzzFingerprintCGood", kDefaultMinAndroidApi, + 0x7e80301, VK_API_VERSION_1_3, 0x111, kFakeGpuVendor_Google_MinDriverVersion, @@ -991,6 +998,7 @@ TEST(VkQualityFingerprintTests, Validity) { "genericvendor", "zzzFingerprintABad", kDefaultMinAndroidApi, + 0x7e80301, VK_API_VERSION_1_3, 0x111, kFakeGpuVendor_Google_MinDriverVersion, From d65ac94b553917b7a9dd79679024e248c05fb1b7 Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 11:45:58 -0500 Subject: [PATCH 3/9] Force kInitFlagSkipFingerprintRecommendationCheck unless device info provided. --- .../vkquality/src/main/cpp/vkquality_c.cpp | 6 ++++-- .../vkquality/src/main/cpp/vkquality_manager.cpp | 16 +++++++++------- .../vkquality/src/main/cpp/vkquality_manager.h | 3 ++- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp index 03dc51c..6715242 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp @@ -52,7 +52,8 @@ vkQualityInitResult vkQuality_initialize(JNIEnv *env, AAssetManager *asset_manag const char *storage_path, const char *asset_filename) { return vkquality::VkQualityManager::Init(env, asset_manager, storage_path, asset_filename, - nullptr, 0); + nullptr, + kInitFlagSkipFingerprintRecommendationCheck); } vkQualityInitResult vkQuality_initializeFlags(JNIEnv *env, AAssetManager *asset_manager, @@ -60,7 +61,8 @@ vkQualityInitResult vkQuality_initializeFlags(JNIEnv *env, AAssetManager *asset_ const char *asset_filename, int32_t flags) { return vkquality::VkQualityManager::Init(env, asset_manager, storage_path, asset_filename, - nullptr, flags); + nullptr, + flags | kInitFlagSkipFingerprintRecommendationCheck); } vkQualityInitResult vkQuality_initializeFlagsInfo(JNIEnv *env, AAssetManager *asset_manager, diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp index b027807..cdcb7c4 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_manager.cpp @@ -261,7 +261,7 @@ int32_t VkQualityManager::GetVulkanDEQPLevel(JNIEnv *env) { } vkQualityInitResult VkQualityManager::InitDeviceInfo(JNIEnv *env, DeviceInfo &device_info, - const vkqGraphicsAPIInfo *api_info) { + const vkqGraphicsAPIInfo *api_info, const int32_t flags) { jclass build_class = env->FindClass(kAndroidBuildClass); if (env->ExceptionCheck()) { env->ExceptionClear(); @@ -279,11 +279,13 @@ vkQualityInitResult VkQualityManager::InitDeviceInfo(JNIEnv *env, DeviceInfo &de device_info.vk_deqp_level = GetVulkanDEQPLevel(env); - if (api_info != nullptr && api_info->gles_version_string != nullptr) { - device_info.gles_version = api_info->gles_version_string; - } else { - GLESUtil::GetGLESStrings(device_info.gles_renderer, device_info.gles_version, - device_info.gles_vendor); + if ((flags & kInitFlagSkipFingerprintRecommendationCheck) == 0) { + if (api_info != nullptr && api_info->gles_version_string != nullptr) { + device_info.gles_version = api_info->gles_version_string; + } else { + GLESUtil::GetGLESStrings(device_info.gles_renderer, device_info.gles_version, + device_info.gles_vendor); + } } // SoC string will be empty if we can't retrieve it due to older Android version @@ -419,7 +421,7 @@ vkQualityInitResult VkQualityManager::StartRecommendation() { } DeviceInfo device_info; - vkQualityInitResult result = InitDeviceInfo(env_, device_info, api_info_); + vkQualityInitResult result = InitDeviceInfo(env_, device_info, api_info_, flags_); if (result != kSuccess) { return result; } diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_manager.h b/vkq_library/vkquality/src/main/cpp/vkquality_manager.h index 819741d..b0f8981 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_manager.h +++ b/vkq_library/vkquality/src/main/cpp/vkquality_manager.h @@ -74,7 +74,8 @@ class VkQualityManager { static int32_t GetVulkanDEQPLevel(JNIEnv *env); static vkQualityInitResult InitDeviceInfo(JNIEnv *env, DeviceInfo &device_info, - const vkqGraphicsAPIInfo *api_info); + const vkqGraphicsAPIInfo *api_info, + const int32_t flags); bool LoadCache(const DeviceInfo &device_info); From a265aaff4ab9dba1c6a08f8598ee73a5770fecae Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 13:05:48 -0500 Subject: [PATCH 4/9] Fix incorrect table count used for string table validation --- .../src/main/cpp/vkquality_prediction_file.cpp | 2 +- .../vkquality/src/main/cpp/vkquality_tests.cpp | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp index 9772733..5f235fc 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp @@ -146,7 +146,7 @@ VkQualityPredictionFile::FileParseResult VkQualityPredictionFile::ValidateFile( const uint8_t *file_start = reinterpret_cast(file_data); const uint32_t *string_offsets = reinterpret_cast( (file_start + header->string_table_offset)); - if (!CheckOffsetListValidity(string_offsets, header->device_list_count, file_size)) { + if (!CheckOffsetListValidity(string_offsets, header->string_table_count, file_size)) { file_parse_error_ = "Invalid file: String offset table entry overflows end of file"; return kFileParseResult_Error_StringOffsetOverflow; } diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp index 7aa544d..05acc7d 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp @@ -576,12 +576,20 @@ TEST(VkQualityFileParseHeaderOffsetTables, Validity) uint32_t old_offset; uint32_t *string_offsets = reinterpret_cast((base + header->string_table_offset)); - old_offset = *string_offsets; - *string_offsets = 0x7FFFFFFF; + old_offset = string_offsets[0]; + string_offsets[0] = 0x7FFFFFFF; auto result = file.ParseFileData(memory_buffer.GetPtr(), memory_buffer.GetUsedSize(), kValidVersion); EXPECT_EQ(result, VkQualityPredictionFile::kFileParseResult_Error_StringOffsetOverflow); - *string_offsets = old_offset; + string_offsets[0] = old_offset; + + // Corrupt a higher offset that would not be checked if device_list_count was used instead of string_table_count + old_offset = string_offsets[4]; + string_offsets[4] = 0x7FFFFFFF; + result = file.ParseFileData(memory_buffer.GetPtr(), memory_buffer.GetUsedSize(), + kValidVersion); + EXPECT_EQ(result, VkQualityPredictionFile::kFileParseResult_Error_StringOffsetOverflow); + string_offsets[4] = old_offset; } TEST(VkQualityStringComparison, Validity) From 43ead15f33e342e37820e88a1c2447ad8b4bab3f Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 13:08:47 -0500 Subject: [PATCH 5/9] Add null check to custom data filename param --- .../main/java/com/google/android/games/vkquality/VKQuality.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vkq_library/vkquality/src/main/java/com/google/android/games/vkquality/VKQuality.java b/vkq_library/vkquality/src/main/java/com/google/android/games/vkquality/VKQuality.java index caef974..c21e1d5 100644 --- a/vkq_library/vkquality/src/main/java/com/google/android/games/vkquality/VKQuality.java +++ b/vkq_library/vkquality/src/main/java/com/google/android/games/vkquality/VKQuality.java @@ -63,7 +63,7 @@ public int StartVkQuality(String customDataFilename) { public int StartVkQualityWithFlags(String customDataFilename, int flags) { mFlags = flags; - String dataFilename = customDataFilename.isEmpty() ? + String dataFilename = (customDataFilename == null || customDataFilename.isEmpty()) ? DEFAULT_QUALITY_FILE : customDataFilename; if ((mFlags & INIT_FLAG_SKIP_STARTUP_MITIGATION) == 0) From 5a75bfaedd1343fa7bdbd3d99e2b2a4f5cbb5431 Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 13:14:24 -0500 Subject: [PATCH 6/9] Fix reserve instead of resize usage. --- vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp index b2a65c4..aa3bf35 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp @@ -41,7 +41,7 @@ VkQualityMatching::StringMatchResult VkQualityMatching::WildcardsMatch( const size_t wildcard_count, const size_t wildcard_length, const size_t *wildcard_offsets) { std::vector temp_string; - temp_string.reserve(wildcard_length + 1); + temp_string.resize(wildcard_length + 1); char *substring = temp_string.data(); size_t current_index = 0; From a8aa2c0f532a983a3d76e316797ef9aca7bf5103 Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 13:30:07 -0500 Subject: [PATCH 7/9] Fix logic of sequential wildcards, strstr usage --- .../src/main/cpp/vkquality_matching.cpp | 62 ++++++++++--------- .../src/main/cpp/vkquality_matching.h | 2 +- .../src/main/cpp/vkquality_tests.cpp | 18 ++++++ 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp index aa3bf35..3d669bd 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_matching.cpp @@ -22,11 +22,12 @@ namespace vkquality { static constexpr size_t kMaxWildcards = 4; -size_t VkQualityMatching::CountWildcards(const char *str, size_t *string_length, +size_t VkQualityMatching::CountWildcards(const std::string_view &str, size_t *string_length, size_t *offset_array) { size_t offset = 0; size_t wildcard_count = 0; - while (str[offset] != '\0') { + const size_t str_len = str.length(); + while (offset < str_len) { if (str[offset] == '*' && wildcard_count < kMaxWildcards) { offset_array[wildcard_count++] = offset; } @@ -40,34 +41,37 @@ VkQualityMatching::StringMatchResult VkQualityMatching::WildcardsMatch( const std::string_view &a, const std::string_view &b, const size_t wildcard_count, const size_t wildcard_length, const size_t *wildcard_offsets) { - std::vector temp_string; - temp_string.resize(wildcard_length + 1); - char *substring = temp_string.data(); + size_t pos = 0; - size_t current_index = 0; - size_t substring_index = 0; // If the compare string doesn't start with a wildcard, the input string must start with // the prefix chars before the first '*' in the compare string - if (b[current_index] != '*') { - while(current_index < wildcard_length && b[current_index] != '*') { - substring[substring_index++] = b[current_index++]; - } - substring[substring_index] = '\0'; - if (strstr(a.data(), substring) != a.data()) + if (b[0] != '*') { + const size_t first_star_offset = wildcard_offsets[0]; + std::string_view prefix = b.substr(0, first_star_offset); + if (a.length() < prefix.length() || a.substr(0, prefix.length()) != prefix) { return VkQualityMatching::kStringMatch_None; + } + pos = prefix.length(); } - // current_index is now at a wildcard, process each substring in turn - size_t finished_wildcards = 0; - while (finished_wildcards < wildcard_count) { - substring_index = 0; - ++current_index; // past '*' - while(current_index < wildcard_length && b[current_index] != '*') { - substring[substring_index++] = b[current_index++]; + + // Process each substring in turn + for (size_t i = 0; i < wildcard_count; ++i) { + const size_t current_star = wildcard_offsets[i]; + size_t segment_len = 0; + if (i + 1 < wildcard_count) { + segment_len = wildcard_offsets[i + 1] - (current_star + 1); + } else { + segment_len = wildcard_length - (current_star + 1); + } + + std::string_view segment = b.substr(current_star + 1, segment_len); + if (!segment.empty()) { + size_t found = a.find(segment, pos); + if (found == std::string_view::npos) { + return VkQualityMatching::kStringMatch_None; + } + pos = found + segment.length(); } - substring[substring_index] = '\0'; - if (strstr(a.data(), substring) == nullptr) - return VkQualityMatching::kStringMatch_None; - ++finished_wildcards; } return VkQualityMatching::kStringMatch_Substring; @@ -90,21 +94,21 @@ VkQualityMatching::StringMatchResult VkQualityMatching::StringMatches( // *bar*baz = match if A contains 'bar' and 'baz' size_t wildcard_length = 0; size_t wildcard_offsets[kMaxWildcards]; - size_t wildcard_count = CountWildcards(b.data(), &wildcard_length, wildcard_offsets); + size_t wildcard_count = CountWildcards(b, &wildcard_length, wildcard_offsets); if (wildcard_count > 1 || (wildcard_count == 1 && b[0] != '*')) { return WildcardsMatch(a, b, wildcard_count, wildcard_length, wildcard_offsets); } if (b[0] == '^' && b_length > 1) { // Substring match at start of string - const char *compare = b.data() + 1; - if (strstr(a.data(), compare) == a.data()) { + std::string_view pattern = b.substr(1); + if (a.length() >= pattern.length() && a.substr(0, pattern.length()) == pattern) { return kStringMatch_Substring_Start; } } else if (b[0] == '*' && b_length > 1) { // Substring match anywhere in string - const char *compare = b.data() + 1; - if (strstr(a.data(), compare) != nullptr) { + std::string_view pattern = b.substr(1); + if (a.find(pattern) != std::string_view::npos) { return kStringMatch_Substring; } } else { diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_matching.h b/vkq_library/vkquality/src/main/cpp/vkquality_matching.h index 391609d..07aa2f9 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_matching.h +++ b/vkq_library/vkquality/src/main/cpp/vkquality_matching.h @@ -31,7 +31,7 @@ class VkQualityMatching { kStringMatch_Substring }; - static size_t CountWildcards(const char *str, size_t *string_length, size_t *offset_array); + static size_t CountWildcards(const std::string_view &str, size_t *string_length, size_t *offset_array); static StringMatchResult WildcardsMatch( const std::string_view &a, const std::string_view &b, diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp index 05acc7d..2542454 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp @@ -340,6 +340,24 @@ TEST(VkQualityPartialStringMatchTest, Validity) EXPECT_EQ(all_matched, true); } +TEST(VkQualitySequentialWildcardTest, SequentialMatching) { + // Foo*bar*baz should match Foo bar baz + auto result = VkQualityMatching::StringMatches("Foo bar baz", "Foo*bar*baz"); + EXPECT_EQ(result, VkQualityMatching::kStringMatch_Substring); + + // Foo*bar*baz should NOT match Foo baz bar + result = VkQualityMatching::StringMatches("Foo baz bar", "Foo*bar*baz"); + EXPECT_EQ(result, VkQualityMatching::kStringMatch_None); + + // *bar*baz should match bar baz + result = VkQualityMatching::StringMatches("bar baz", "*bar*baz"); + EXPECT_EQ(result, VkQualityMatching::kStringMatch_Substring); + + // *bar*baz should NOT match baz bar + result = VkQualityMatching::StringMatches("baz bar", "*bar*baz"); + EXPECT_EQ(result, VkQualityMatching::kStringMatch_None); +} + // VkQUalityPredictionFile ParseFileData tests static constexpr uint32_t kTooSmallBuffer[4] {0, 0, 0, 0}; From d7d72f8eb1dc7da9e1ceb7af9be7b80df4a6a519 Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Tue, 26 May 2026 13:42:28 -0500 Subject: [PATCH 8/9] Improved quality file validation checks --- .../main/cpp/vkquality_prediction_file.cpp | 136 +++++++++++++----- .../src/main/cpp/vkquality_tests.cpp | 9 ++ 2 files changed, 113 insertions(+), 32 deletions(-) diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp index 5f235fc..bfd9597 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_prediction_file.cpp @@ -64,6 +64,14 @@ VkQualityPredictionFile::FileParseResult VkQualityPredictionFile::ValidateFile( void *file_data, const size_t file_size, const uint32_t library_version) { const VkQualityFileHeader *header = reinterpret_cast(file_data); + // Guard against integer overflow by assuming a valid file will be under a megabyte in size + static constexpr size_t kMaxValidFileSize = 1024 * 1024; // 1 megabyte + if (file_size > kMaxValidFileSize) { + file_parse_error_ = str_fmt("File size (%d) exceeds maximum allowed size of %d bytes", + (int)file_size, (int)kMaxValidFileSize); + return kFileParseResult_Error_TooSmall; + } + // File must be at least the size of the header if (file_size < sizeof(VkQualityFileHeader)) { file_parse_error_ = str_fmt("File size (%d) smaller than header size: %d", @@ -80,66 +88,122 @@ VkQualityPredictionFile::FileParseResult VkQualityPredictionFile::ValidateFile( return kFileParseResult_Error_LibraryTooOldForFile; } + // 1. Device list validation + if (header->device_list_offset > file_size) { + file_parse_error_ = "Invalid file: Device list offset exceeds file size"; + return kFileParseResult_Error_DeviceListOverflow; + } + if (header->device_list_count > file_size / sizeof(VkQualityDeviceAllowListEntry)) { + file_parse_error_ = "Invalid file: Device list count exceeds maximum possible count"; + return kFileParseResult_Error_DeviceListOverflow; + } const size_t device_list_size = header->device_list_count * sizeof(VkQualityDeviceAllowListEntry); - const size_t device_list_end = header->device_list_offset + device_list_size; - if (device_list_end > file_size) { + if (device_list_size > file_size - header->device_list_offset) { file_parse_error_ = "Invalid file: Device list overflows end of file"; return kFileParseResult_Error_DeviceListOverflow; } - const size_t driver_allow_list_size = header->driver_allow_count * - sizeof(VkQualityDriverFingerprintEntry); - const size_t driver_allow_list_end = header->driver_allow_offset + driver_allow_list_size; - if (driver_allow_list_end > file_size) { + // 2. Driver allow list validation + if (header->driver_allow_offset > file_size) { + file_parse_error_ = "Invalid file: driver allow list offset exceeds file size"; + return kFileParseResult_Error_DriverAllowOverflow; + } + if (header->driver_allow_count > file_size / sizeof(VkQualityDriverFingerprintEntry)) { + file_parse_error_ = "Invalid file: driver allow list count exceeds maximum possible count"; + return kFileParseResult_Error_DriverAllowOverflow; + } + const size_t driver_allow_list_size = header->driver_allow_count * sizeof(VkQualityDriverFingerprintEntry); + if (driver_allow_list_size > file_size - header->driver_allow_offset) { file_parse_error_ = "Invalid file: driver allow list overflows end of file"; return kFileParseResult_Error_DriverAllowOverflow; } - const size_t driver_deny_list_size = header->driver_deny_count * - sizeof(VkQualityDriverFingerprintEntry); - const size_t driver_deny_list_end = header->driver_deny_offset + driver_deny_list_size; - if (driver_deny_list_end > file_size) { + // 3. Driver deny list validation + if (header->driver_deny_offset > file_size) { + file_parse_error_ = "Invalid file: driver deny list offset exceeds file size"; + return kFileParseResult_Error_DriverDenyOverflow; + } + if (header->driver_deny_count > file_size / sizeof(VkQualityDriverFingerprintEntry)) { + file_parse_error_ = "Invalid file: driver deny list count exceeds maximum possible count"; + return kFileParseResult_Error_DriverDenyOverflow; + } + const size_t driver_deny_list_size = header->driver_deny_count * sizeof(VkQualityDriverFingerprintEntry); + if (driver_deny_list_size > file_size - header->driver_deny_offset) { file_parse_error_ = "Invalid file: driver deny list overflows end of file"; return kFileParseResult_Error_DriverDenyOverflow; } - const size_t gpu_allow_list_size = header->gpu_allow_predict_count * - sizeof(VkQualityGpuPredictEntry); - const size_t gpu_allow_list_end = header->gpu_allow_predict_offset + gpu_allow_list_size; - if (gpu_allow_list_end > file_size) { + // 4. GPU allow list validation + if (header->gpu_allow_predict_offset > file_size) { + file_parse_error_ = "Invalid file: GPU allow list offset exceeds file size"; + return kFileParseResult_Error_GpuAllowOverflow; + } + if (header->gpu_allow_predict_count > file_size / sizeof(VkQualityGpuPredictEntry)) { + file_parse_error_ = "Invalid file: GPU allow list count exceeds maximum possible count"; + return kFileParseResult_Error_GpuAllowOverflow; + } + const size_t gpu_allow_list_size = header->gpu_allow_predict_count * sizeof(VkQualityGpuPredictEntry); + if (gpu_allow_list_size > file_size - header->gpu_allow_predict_offset) { file_parse_error_ = "Invalid file: GPU allow list overflows end of file"; return kFileParseResult_Error_GpuAllowOverflow; } - const size_t gpu_deny_list_size = header->gpu_deny_predict_count * - sizeof(VkQualityGpuPredictEntry); - const size_t gpu_deny_list_end = header->gpu_deny_predict_offset + gpu_deny_list_size; - if (gpu_deny_list_end > file_size) { + // 5. GPU deny list validation + if (header->gpu_deny_predict_offset > file_size) { + file_parse_error_ = "Invalid file: GPU deny list offset exceeds file size"; + return kFileParseResult_Error_GpuDenyOverflow; + } + if (header->gpu_deny_predict_count > file_size / sizeof(VkQualityGpuPredictEntry)) { + file_parse_error_ = "Invalid file: GPU deny list count exceeds maximum possible count"; + return kFileParseResult_Error_GpuDenyOverflow; + } + const size_t gpu_deny_list_size = header->gpu_deny_predict_count * sizeof(VkQualityGpuPredictEntry); + if (gpu_deny_list_size > file_size - header->gpu_deny_predict_offset) { file_parse_error_ = "Invalid file: GPU deny list overflows end of file"; return kFileParseResult_Error_GpuDenyOverflow; } - const size_t soc_allow_list_size = header->soc_allow_count * - sizeof(VkQualityDriverSoCEntry); - const size_t soc_allow_list_end = header->soc_allow_offset + soc_allow_list_size; - if (soc_allow_list_end > file_size) { + // 6. SoC allow list validation + if (header->soc_allow_offset > file_size) { + file_parse_error_ = "Invalid file: SoC allow list offset exceeds file size"; + return kFileParseResult_Error_SoCAllowOverflow; + } + if (header->soc_allow_count > file_size / sizeof(VkQualityDriverSoCEntry)) { + file_parse_error_ = "Invalid file: SoC allow list count exceeds maximum possible count"; + return kFileParseResult_Error_SoCAllowOverflow; + } + const size_t soc_allow_list_size = header->soc_allow_count * sizeof(VkQualityDriverSoCEntry); + if (soc_allow_list_size > file_size - header->soc_allow_offset) { file_parse_error_ = "Invalid file: SoC allow list overflows end of file"; return kFileParseResult_Error_SoCAllowOverflow; } - const size_t soc_deny_list_size = header->soc_deny_count * - sizeof(VkQualityDriverSoCEntry); - const size_t soc_deny_list_end = header->soc_deny_offset + soc_deny_list_size; - if (soc_deny_list_end > file_size) { + // 7. SoC deny list validation + if (header->soc_deny_offset > file_size) { + file_parse_error_ = "Invalid file: SoC deny list offset exceeds file size"; + return kFileParseResult_Error_SoCDenyOverflow; + } + if (header->soc_deny_count > file_size / sizeof(VkQualityDriverSoCEntry)) { + file_parse_error_ = "Invalid file: SoC deny list count exceeds maximum possible count"; + return kFileParseResult_Error_SoCDenyOverflow; + } + const size_t soc_deny_list_size = header->soc_deny_count * sizeof(VkQualityDriverSoCEntry); + if (soc_deny_list_size > file_size - header->soc_deny_offset) { file_parse_error_ = "Invalid file: soc deny list overflows end of file"; return kFileParseResult_Error_SoCDenyOverflow; } - // Individual string offset bounds checks are made at string retrieval time, we just make - // sure the actual string offset list is within the file bounds here. + // 8. String offset list validation + if (header->string_table_offset > file_size) { + file_parse_error_ = "Invalid file: string table offset exceeds file size"; + return kFileParseResult_Error_StringOffsetOverflow; + } + if (header->string_table_count > file_size / sizeof(uint32_t)) { + file_parse_error_ = "Invalid file: string table count exceeds maximum possible count"; + return kFileParseResult_Error_StringOffsetOverflow; + } const size_t string_offset_list_size = header->string_table_count * sizeof(uint32_t); - const size_t string_offset_list_end = header->string_table_offset + string_offset_list_size; - if (string_offset_list_end > file_size) { + if (string_offset_list_size > file_size - header->string_table_offset) { file_parse_error_ = "Invalid file: string table offset list overflows end of file"; return kFileParseResult_Error_StringOffsetOverflow; } @@ -151,9 +215,17 @@ VkQualityPredictionFile::FileParseResult VkQualityPredictionFile::ValidateFile( return kFileParseResult_Error_StringOffsetOverflow; } + // 9. Shortcut offset list validation + if (header->device_list_shortcuts_offset > file_size) { + file_parse_error_ = "Invalid file: shortcut offset list offset exceeds file size"; + return kFileParseResult_Error_ShortcutOverflow; + } + if (VkQualityPredictionFile::kShortcut_Offset_Count > file_size / sizeof(uint32_t)) { + file_parse_error_ = "Invalid file: shortcut offset list count exceeds maximum possible count"; + return kFileParseResult_Error_ShortcutOverflow; + } const size_t shortcut_offset_list_size = VkQualityPredictionFile::kShortcut_Offset_Count * sizeof(uint32_t); - const size_t shortcut_offset_list_end = header->device_list_shortcuts_offset + shortcut_offset_list_size; - if (shortcut_offset_list_end > file_size) { + if (shortcut_offset_list_size > file_size - header->device_list_shortcuts_offset) { file_parse_error_ = "Invalid file: shortcut offset list overflows end of file"; return kFileParseResult_Error_ShortcutOverflow; } diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp index 2542454..8815c30 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_tests.cpp @@ -370,6 +370,15 @@ TEST(VkQualityFileParseSizeCheck, Validity) EXPECT_EQ(result, VkQualityPredictionFile::kFileParseResult_Error_TooSmall); } +TEST(VkQualityFileParseLargeFileSizeCheck, Validity) +{ + VkQualityPredictionFile file; + MemoryBuffer memory_buffer(1024 * 1024 + 1); // 1 MB + 1 byte + const auto result = file.ParseFileData(memory_buffer.GetPtr(), memory_buffer.GetTotalSize(), + kValidVersion); + EXPECT_EQ(result, VkQualityPredictionFile::kFileParseResult_Error_TooSmall); +} + static constexpr uint32_t kOldVersion = 0x100; TEST(VkQualityFileParseIdentifierCheck, Validity) From d352f92bbfbb4343f763a96c263858e1255e7c3d Mon Sep 17 00:00:00 2001 From: Nate Trost Date: Wed, 27 May 2026 09:22:51 -0500 Subject: [PATCH 9/9] Bump version to 1.2.4, update README --- README.md | 6 ++++++ vkq_library/vkquality/src/main/cpp/vkquality_c.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 468b4a1..41d23fe 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,12 @@ feedback will help refine the recommendation list. ## Version history +* 1.2.4 - (05/27/2026) - Recommend Vulkan on unknown devices if they pass +dEQP 3.2024 or later. Deprecate future Android Vulkan criteria. +Disable fingerprint check by default unless user device +info is provided, deprecate default fingerprint entries in quality file, improve +data validation checks in quality file. Fix potential logic flaw in sequential +wildcard matching. Minor bug fixes. * 1.2.3 - (12/03/2025) - Recommend Vulkan on unrecognized devices if ANGLE is the system GLES driver, fix redundant/missing eglTerminate in GLES utils. * 1.2.2 - (06/09/2025) - Updated device list with additional GPU recommendations diff --git a/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp b/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp index 6715242..983a30c 100644 --- a/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp +++ b/vkq_library/vkquality/src/main/cpp/vkquality_c.cpp @@ -22,7 +22,7 @@ extern "C" { #define VKQUALITY_MAJOR_VERSION 1 #define VKQUALITY_MINOR_VERSION 2 -#define VKQUALITY_BUGFIX_VERSION 3 +#define VKQUALITY_BUGFIX_VERSION 4 #define VKQUALITY_GENERATE_PACKED_VERSION(MAJOR, MINOR, BUGFIX) \ ((MAJOR << 16) | (MINOR << 8) | (BUGFIX))