]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/helpers/gpu.py
arch: Separately identify arm64_only CPUs without AArch32 support
[waydroid.git] / tools / helpers / gpu.py
index 5f346566546fc28ad901ecdfe9ad4060a609a5b3..0f621bb16a62f4939a81d0ecc6b1d2227bc2c04f 100644 (file)
@@ -4,10 +4,58 @@ import tools.helpers.props
 
 unsupported = ["nvidia"]
 
+def getMinor(args, dev):
+    return tools.helpers.props.file_get(args, "/sys/class/drm/{}/uevent".format(dev), "MINOR")
+
+def getKernelDriver(args, dev):
+    return tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER")
+
+def getCardFromRender(args, dev):
+    try:
+        return "/dev/dri/" + os.path.basename(sorted(glob.glob("/sys/class/drm/{}/device/drm/card*".format(dev)))[0])
+    except IndexError:
+        return ""
+
 def getDriNode(args):
-    for node in glob.glob("/dev/dri/renderD*"):
-        dev = os.path.basename(node)
-        driver = tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER")
-        if driver not in unsupported:
-            return node
+    cfg = tools.config.load(args)
+    node = cfg["waydroid"].get("drm_device")
+    if node:
+        if not os.path.exists(node):
+            raise OSError("The specified drm_device {} does not exist".format(node))
+        renderDev = os.path.basename(node)
+        if getKernelDriver(args, renderDev) not in unsupported:
+            return node, getCardFromRender(args, renderDev)
+        return "", ""
+
+    for node in sorted(glob.glob("/dev/dri/renderD*")):
+        renderDev = os.path.basename(node)
+        if getKernelDriver(args, renderDev) not in unsupported:
+            return node, getCardFromRender(args, renderDev)
+    return "", ""
+
+def getVulkanDriver(args, dev):
+    mapping = {
+        "i915": "intel",
+        "amdgpu": "radeon",
+        "radeon": "radeon",
+        "panfrost": "panfrost",
+        "msm": "freedreno",
+        "msm_dpu": "freedreno",
+        "vc4": "broadcom",
+        "nouveau": "nouveau",
+    }
+    kernel_driver = getKernelDriver(args, dev)
+
+    if kernel_driver == "i915":
+        try:
+            dev = os.path.basename(getCardFromRender(args, dev))
+            gen = tools.helpers.run.user(args,["awk", "/^graphics version:|^gen:/ {print $NF}",
+                "/sys/kernel/debug/dri/{}/i915_capabilities".format(getMinor(args, dev))], output_return=True, check=False)
+            if int(gen) < 9:
+                return "intel_hasvk"
+        except:
+            pass
+
+    if kernel_driver in mapping:
+        return mapping[kernel_driver]
     return ""