]> glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/helpers/gpu.py
shell: Do not abort if classpath env file is missing
[waydroid.git] / tools / helpers / gpu.py
1 import glob
2 import os
3 import tools.helpers.props
4
5 unsupported = ["nvidia"]
6
7 def getMinor(args, dev):
8 return tools.helpers.props.file_get(args, "/sys/class/drm/{}/uevent".format(dev), "MINOR")
9
10 def getKernelDriver(args, dev):
11 return tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER")
12
13 def getCardFromRender(args, dev):
14 try:
15 return "/dev/dri/" + os.path.basename(sorted(glob.glob("/sys/class/drm/{}/device/drm/card*".format(dev)))[0])
16 except IndexError:
17 return ""
18
19 def getDriNode(args):
20 cfg = tools.config.load(args)
21 node = cfg["waydroid"].get("drm_device")
22 if node:
23 if not os.path.exists(node):
24 raise OSError("The specified drm_device {} does not exist".format(node))
25 renderDev = os.path.basename(node)
26 if getKernelDriver(args, renderDev) not in unsupported:
27 return node, getCardFromRender(args, renderDev)
28 return "", ""
29
30 for node in sorted(glob.glob("/dev/dri/renderD*")):
31 renderDev = os.path.basename(node)
32 if getKernelDriver(args, renderDev) not in unsupported:
33 return node, getCardFromRender(args, renderDev)
34 return "", ""
35
36 def getVulkanDriver(args, dev):
37 mapping = {
38 "i915": "intel",
39 "amdgpu": "radeon",
40 "radeon": "radeon",
41 "panfrost": "panfrost",
42 "msm": "freedreno",
43 "msm_dpu": "freedreno",
44 "vc4": "broadcom",
45 "nouveau": "nouveau",
46 }
47 kernel_driver = getKernelDriver(args, dev)
48
49 if kernel_driver == "i915":
50 try:
51 dev = os.path.basename(getCardFromRender(args, dev))
52 gen = tools.helpers.run.user(args,["awk", "/^graphics version:|^gen:/ {print $NF}",
53 "/sys/kernel/debug/dri/{}/i915_capabilities".format(getMinor(args, dev))], output_return=True, check=False)
54 if int(gen) < 9:
55 return "intel_hasvk"
56 except:
57 pass
58
59 if kernel_driver in mapping:
60 return mapping[kernel_driver]
61 return ""