diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-bonaire-3.0 b/autotests/libkwineffects/data/glplatform/amd-gallium-bonaire-3.0 index e570fe322f..7c18f2c78b 100644 --- a/autotests/libkwineffects/data/glplatform/amd-gallium-bonaire-3.0 +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-bonaire-3.0 @@ -16,6 +16,6 @@ GLSLVersion=1,30 MesaVersion=11,2,2 GalliumVersion=0,4 DriverVersion=11,2,2 -Driver=5 -ChipClass=999 +Driver=16 +ChipClass=10 Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-hawaii-3.0 b/autotests/libkwineffects/data/glplatform/amd-gallium-hawaii-3.0 index 35e275d45f..28017dbbc7 100644 --- a/autotests/libkwineffects/data/glplatform/amd-gallium-hawaii-3.0 +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-hawaii-3.0 @@ -16,6 +16,6 @@ GLSLVersion=1,30 MesaVersion=11,1,2 GalliumVersion=0,4 DriverVersion=11,1,2 -Driver=5 -ChipClass=999 +Driver=16 +ChipClass=10 Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-r9-290-4.5 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-r9-290-4.5 new file mode 100644 index 0000000000..320fdb0634 --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-r9-290-4.5 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=AMD Radeon R9 200 Series (HAWAII DRM 3.26.0 4.18.9-92.current LLVM 6.0.1) +Version=4.5 Mesa 18.1.6 +ShadingLanguageVersion=4.50 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=4,5 +GLSLVersion=4,50 +MesaVersion=18,1,6 +GalliumVersion=0,4 +DriverVersion=18,1,6 +Driver=16 +ChipClass=10 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-480-series-4.5 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-480-series-4.5 new file mode 100644 index 0000000000..c34da71bc1 --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-480-series-4.5 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=AMD Radeon (TM) RX 480 Graphics (POLARIS10 / DRM 3.23.0 / 4.15.0-rc1-g516fb7f2e73d, LLVM 6.0.0) +Version=4.5 (Core Profile) Mesa 17.4.0-devel (git-b6b4b2c6d8) +ShadingLanguageVersion=4.50 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=4,5 +GLSLVersion=4,50 +MesaVersion=17,4,0 +GalliumVersion=0,4 +DriverVersion=17,4,0 +Driver=16 +ChipClass=12 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-550-series-3.1 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-550-series-3.1 new file mode 100644 index 0000000000..067d5ca340 --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-550-series-3.1 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=Radeon RX 550 Series (POLARIS12, DRM 3.25.0, 4.17.0-rc6-GTW1+, LLVM 6.0.0) +Version=3.1 Mesa 18.1.0 +ShadingLanguageVersion=1.40 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=3,1 +GLSLVersion=1,40 +MesaVersion=18,1,0 +GalliumVersion=0,4 +DriverVersion=18,1,0 +Driver=16 +ChipClass=12 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-580-series-4.5 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-580-series-4.5 new file mode 100644 index 0000000000..447d68c61b --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-580-series-4.5 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=Radeon RX 580 Series (POLARIS10, DRM 3.27.0, 4.19.10-arch1-1-ARCH, LLVM 7.0.0) +Version=4.5 (Compatibility Profile) Mesa 18.3.1 +ShadingLanguageVersion=4.50 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=4,5 +GLSLVersion=4,50 +MesaVersion=18,3,1 +GalliumVersion=0,4 +DriverVersion=18,3,1 +Driver=16 +ChipClass=12 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-56-4.5 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-56-4.5 new file mode 100644 index 0000000000..aa01e2ff2c --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-56-4.5 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=Radeon RX Vega (VEGA10, DRM 3.25.0, 4.17.0-trunk-amd64, LLVM 6.0.0) +Version=4.5 (Core Profile) Mesa 18.1.2 +ShadingLanguageVersion=4.50 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=4,5 +GLSLVersion=4,50 +MesaVersion=18,1,2 +GalliumVersion=0,4 +DriverVersion=18,1,2 +Driver=16 +ChipClass=13 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-64-4.5 b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-64-4.5 new file mode 100644 index 0000000000..684fb78ed3 --- /dev/null +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-radeon-rx-vega-64-4.5 @@ -0,0 +1,21 @@ +[Driver] +Vendor=X.Org +Renderer=Radeon RX Vega (VEGA10 / DRM 3.23.0 / 4.16.16-300.fc28.x86_64, LLVM 6.0.0) +Version=4.5 (Core Profile) Mesa 18.0.5 +ShadingLanguageVersion=4.50 + +[Settings] +LooseBinding=true +GLSL=true +TextureNPOT=true +Mesa=true +Gallium=true +Radeon=true +GLVersion=4,5 +GLSLVersion=4,50 +MesaVersion=18,0,5 +GalliumVersion=0,4 +DriverVersion=18,0,5 +Driver=16 +ChipClass=13 +Compositor=9 diff --git a/autotests/libkwineffects/data/glplatform/amd-gallium-tonga-4.1 b/autotests/libkwineffects/data/glplatform/amd-gallium-tonga-4.1 index a20045e1fc..9b34861d47 100644 --- a/autotests/libkwineffects/data/glplatform/amd-gallium-tonga-4.1 +++ b/autotests/libkwineffects/data/glplatform/amd-gallium-tonga-4.1 @@ -16,6 +16,6 @@ GLSLVersion=4,10 MesaVersion=12,0,1 GalliumVersion=0,4 DriverVersion=12,0,1 -Driver=5 -ChipClass=999 +Driver=16 +ChipClass=11 Compositor=9 diff --git a/autotests/libkwineffects/kwinglplatformtest.cpp b/autotests/libkwineffects/kwinglplatformtest.cpp index 2f069b89bd..6046b220e1 100644 --- a/autotests/libkwineffects/kwinglplatformtest.cpp +++ b/autotests/libkwineffects/kwinglplatformtest.cpp @@ -67,6 +67,7 @@ void GLPlatformTest::testDriverToString_data() QTest::newRow("R300G") << Driver_R300G << QStringLiteral("R300G"); QTest::newRow("R600C") << Driver_R600C << QStringLiteral("R600C"); QTest::newRow("R600G") << Driver_R600G << QStringLiteral("R600G"); + QTest::newRow("RadeonSI") << Driver_RadeonSI << QStringLiteral("RadeonSI"); QTest::newRow("Nouveau") << Driver_Nouveau << QStringLiteral("Nouveau"); QTest::newRow("Intel") << Driver_Intel << QStringLiteral("Intel"); QTest::newRow("NVidia") << Driver_NVidia << QStringLiteral("NVIDIA"); @@ -99,7 +100,12 @@ void GLPlatformTest::testChipClassToString_data() QTest::newRow("R600") << R600 << QStringLiteral("R600"); QTest::newRow("R700") << R700 << QStringLiteral("R700"); QTest::newRow("Evergreen") << Evergreen << QStringLiteral("EVERGREEN"); - QTest::newRow("NorthernIslands") << NorthernIslands << QStringLiteral("NI"); + QTest::newRow("NorthernIslands") << NorthernIslands << QStringLiteral("Northern Islands"); + QTest::newRow("SouthernIslands") << SouthernIslands << QStringLiteral("Southern Islands"); + QTest::newRow("SeaIslands") << SeaIslands << QStringLiteral("Sea Islands"); + QTest::newRow("VolcanicIslands") << VolcanicIslands << QStringLiteral("Volcanic Islands"); + QTest::newRow("Arctic Islands") << ArcticIslands << QStringLiteral("Arctic Islands"); + QTest::newRow("Vega") << Vega << QStringLiteral("Vega"); QTest::newRow("UnknownRadeon") << UnknownRadeon << QStringLiteral("Unknown"); QTest::newRow("NV10") << NV10 << QStringLiteral("NV10"); QTest::newRow("NV20") << NV20 << QStringLiteral("NV20"); @@ -245,20 +251,11 @@ void GLPlatformTest::testDetect() QEXPECT_FAIL("amd-catalyst-radeonhd-7700M-3.1.13399", "Detects GL version instead of driver version", Continue); QCOMPARE(gl->driverVersion(), readVersion(settingsGroup, "DriverVersion")); - QEXPECT_FAIL("amd-gallium-bonaire-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-hawaii-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-tonga-4.1", "Not detected as a radeon driver", Continue); QCOMPARE(gl->driver(), Driver(settingsGroup.readEntry("Driver", int(Driver_Unknown)))); - QEXPECT_FAIL("amd-gallium-bonaire-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-hawaii-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-tonga-4.1", "Not detected as a radeon driver", Continue); QCOMPARE(gl->chipClass(), ChipClass(settingsGroup.readEntry("ChipClass", int(UnknownChipClass)))); QCOMPARE(gl->isMesaDriver(), settingsGroup.readEntry("Mesa", false)); QCOMPARE(gl->isGalliumDriver(), settingsGroup.readEntry("Gallium", false)); - QEXPECT_FAIL("amd-gallium-bonaire-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-hawaii-3.0", "Not detected as a radeon driver", Continue); - QEXPECT_FAIL("amd-gallium-tonga-4.1", "Not detected as a radeon driver", Continue); QCOMPARE(gl->isRadeon(), settingsGroup.readEntry("Radeon", false)); QCOMPARE(gl->isNvidia(), settingsGroup.readEntry("Nvidia", false)); QCOMPARE(gl->isIntel(), settingsGroup.readEntry("Intel", false)); diff --git a/libkwineffects/kwinglplatform.cpp b/libkwineffects/kwinglplatform.cpp index cb571dab91..d3c91b75f7 100644 --- a/libkwineffects/kwinglplatform.cpp +++ b/libkwineffects/kwinglplatform.cpp @@ -187,6 +187,44 @@ static ChipClass detectRadeonClass(const QByteArray &chipset) chipset.contains("CAYMAN")) return NorthernIslands; + if (chipset.contains("TAHITI") || + chipset.contains("PITCAIRN") || + chipset.contains("VERDE") || + chipset.contains("OLAND") || + chipset.contains("HAINAN")) { + return SouthernIslands; + } + + if (chipset.contains("BONAIRE") || + chipset.contains("KAVERI") || + chipset.contains("KABINI") || + chipset.contains("HAWAII") || + chipset.contains("MULLINS")) { + return SeaIslands; + } + + if (chipset.contains("TONGA") || + chipset.contains("TOPAZ") || + chipset.contains("FIJI") || + chipset.contains("CARRIZO") || + chipset.contains("STONEY")) { + return VolcanicIslands; + } + + if (chipset.contains("POLARIS10") || + chipset.contains("POLARIS11") || + chipset.contains("POLARIS12") || + chipset.contains("VEGAM")) { + return ArcticIslands; + } + + if (chipset.contains("VEGA10") || + chipset.contains("VEGA12") || + chipset.contains("VEGA20") || + chipset.contains("RAVEN")) { + return Vega; + } + const QString chipset16 = QString::fromLatin1(chipset); QString name = extract(chipset16, QStringLiteral("HD [0-9]{4}")); // HD followed by a space and 4 digits if (!name.isEmpty()) { @@ -464,6 +502,8 @@ QByteArray GLPlatform::driverToString8(Driver driver) return QByteArrayLiteral("R600C"); case Driver_R600G: return QByteArrayLiteral("R600G"); + case Driver_RadeonSI: + return QByteArrayLiteral("RadeonSI"); case Driver_Nouveau: return QByteArrayLiteral("Nouveau"); case Driver_Intel: @@ -514,7 +554,17 @@ QByteArray GLPlatform::chipClassToString8(ChipClass chipClass) case Evergreen: return QByteArrayLiteral("EVERGREEN"); case NorthernIslands: - return QByteArrayLiteral("NI"); + return QByteArrayLiteral("Northern Islands"); + case SouthernIslands: + return QByteArrayLiteral("Southern Islands"); + case SeaIslands: + return QByteArrayLiteral("Sea Islands"); + case VolcanicIslands: + return QByteArrayLiteral("Volcanic Islands"); + case ArcticIslands: + return QByteArrayLiteral("Arctic Islands"); + case Vega: + return QByteArrayLiteral("Vega"); case NV10: return QByteArrayLiteral("NV10"); @@ -800,6 +850,35 @@ void GLPlatform::detect(OpenGLPlatformInterface platformInterface) m_driver = Driver_R600G; } + // RadeonSI + else if (m_vendor == "X.Org" && + (m_renderer.contains("TAHITI") || + m_renderer.contains("PITCAIRN") || + m_renderer.contains("VERDE") || + m_renderer.contains("OLAND") || + m_renderer.contains("HAINAN") || + m_renderer.contains("BONAIRE") || + m_renderer.contains("KAVERI") || + m_renderer.contains("KABINI") || + m_renderer.contains("HAWAII") || + m_renderer.contains("MULLINS") || + m_renderer.contains("TOPAZ") || + m_renderer.contains("TONGA") || + m_renderer.contains("FIJI") || + m_renderer.contains("CARRIZO") || + m_renderer.contains("STONEY") || + m_renderer.contains("POLARIS10") || + m_renderer.contains("POLARIS11") || + m_renderer.contains("POLARIS12") || + m_renderer.contains("VEGAM") || + m_renderer.contains("VEGA10") || + m_renderer.contains("VEGA12") || + m_renderer.contains("VEGA20") || + m_renderer.contains("RAVEN"))) { + m_chipClass = detectRadeonClass(m_renderer); + m_driver = Driver_RadeonSI; + } + // Nouveau else if (m_vendor == "nouveau") { m_chipClass = detectNVidiaClass(m_chipset); diff --git a/libkwineffects/kwinglplatform.h b/libkwineffects/kwinglplatform.h index 62dc396992..72addcef03 100644 --- a/libkwineffects/kwinglplatform.h +++ b/libkwineffects/kwinglplatform.h @@ -102,6 +102,7 @@ enum Driver { Driver_VirtualBox, Driver_VMware, Driver_Qualcomm, + Driver_RadeonSI, Driver_Unknown }; @@ -116,6 +117,11 @@ enum ChipClass { R700, // GL3.3 DX10.1 SM 4.1 2008 Evergreen, // GL4.0 CL1.0 DX11 SM 5.0 2009 NorthernIslands, // GL4.0 CL1.1 DX11 SM 5.0 2010 + SouthernIslands, // GL4.5 CL1.2 DX11.1 SM 5.1 2012 + SeaIslands, // GL4.5 CL2.0 DX12 SM 6.0 2013 + VolcanicIslands, // GL4.5 CL2.0 DX12 SM 6.0 2015 + ArcticIslands, // GL4.5 CL2.0 DX12 SM 6.0 2016 + Vega, // GL4.6 CL2.0 DX12 SM 6.0 2017 UnknownRadeon = 999, // NVIDIA