xref: /aosp_15_r20/external/libkmsxx/py/tests/plane_hog.py (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti#!/usr/bin/python3
2*f0687c8aSRaman Tenneti
3*f0687c8aSRaman Tennetiimport pykms
4*f0687c8aSRaman Tennetiimport sys
5*f0687c8aSRaman Tenneti
6*f0687c8aSRaman Tenneticard = pykms.Card()
7*f0687c8aSRaman Tennetires = pykms.ResourceManager(card)
8*f0687c8aSRaman Tenneti
9*f0687c8aSRaman Tenneticonn1 = False
10*f0687c8aSRaman Tenneticonn2 = False
11*f0687c8aSRaman Tenneti
12*f0687c8aSRaman Tennetifor conn in card.connectors:
13*f0687c8aSRaman Tenneti     if not conn1:
14*f0687c8aSRaman Tenneti          conn1 = conn
15*f0687c8aSRaman Tenneti     elif not conn2:
16*f0687c8aSRaman Tenneti          conn2 = conn
17*f0687c8aSRaman Tenneti     else:
18*f0687c8aSRaman Tenneti          break
19*f0687c8aSRaman Tenneti
20*f0687c8aSRaman Tenneticrtc1 = res.reserve_crtc(conn1)
21*f0687c8aSRaman Tennetimode1 = conn1.get_default_mode()
22*f0687c8aSRaman Tennetimodeb1 = mode1.to_blob(card)
23*f0687c8aSRaman Tennetiprint("CRTC idx %d goes to %s connector" % (crtc1.idx, conn1.fullname))
24*f0687c8aSRaman Tenneti
25*f0687c8aSRaman Tennetiif conn2:
26*f0687c8aSRaman Tenneti     crtc2 = res.reserve_crtc(conn2)
27*f0687c8aSRaman Tenneti     mode2 = conn2.get_default_mode()
28*f0687c8aSRaman Tenneti     modeb2 = mode2.to_blob(card)
29*f0687c8aSRaman Tenneti     print("CRTC idx %d goes to %s connector" % (crtc2.idx, conn2.fullname))
30*f0687c8aSRaman Tenneti
31*f0687c8aSRaman Tennetifbwidth = 480
32*f0687c8aSRaman Tennetifbheight = 270
33*f0687c8aSRaman Tenneti
34*f0687c8aSRaman Tennetifb = pykms.DumbFramebuffer(card, fbwidth, fbheight, "AR24");
35*f0687c8aSRaman Tennetipykms.draw_test_pattern(fb);
36*f0687c8aSRaman Tenneti
37*f0687c8aSRaman Tenneti# Disable request
38*f0687c8aSRaman Tenneticard.disable_planes()
39*f0687c8aSRaman Tenneti
40*f0687c8aSRaman Tennetiplane_list = []
41*f0687c8aSRaman Tenneti
42*f0687c8aSRaman Tennetiwhile True:
43*f0687c8aSRaman Tenneti     plane = res.reserve_generic_plane(crtc1)
44*f0687c8aSRaman Tenneti     if plane:
45*f0687c8aSRaman Tenneti         print("Got plane idx %d" % plane.idx)
46*f0687c8aSRaman Tenneti         plane_list.append(plane)
47*f0687c8aSRaman Tenneti     else:
48*f0687c8aSRaman Tenneti         break
49*f0687c8aSRaman Tenneti
50*f0687c8aSRaman Tennetiprint("Got %d planes" % len(plane_list))
51*f0687c8aSRaman Tenneti
52*f0687c8aSRaman Tennetireq = pykms.AtomicReq(card)
53*f0687c8aSRaman Tennetireq.add(conn1, "CRTC_ID", crtc1.id)
54*f0687c8aSRaman Tennetireq.add(crtc1, {"ACTIVE": 1,
55*f0687c8aSRaman Tenneti               "MODE_ID": modeb1.id})
56*f0687c8aSRaman Tenneti
57*f0687c8aSRaman Tennetiinput("Press enter to enable crtc idx %d at %s" % (crtc1.idx, conn1.fullname))
58*f0687c8aSRaman Tennetir = req.commit_sync(allow_modeset = True)
59*f0687c8aSRaman Tenneti
60*f0687c8aSRaman Tennetiprint("Crtc enable request returned %d\n" % r)
61*f0687c8aSRaman Tenneti
62*f0687c8aSRaman Tennetix = 0
63*f0687c8aSRaman Tennetiy = 0
64*f0687c8aSRaman Tennetiz = 0
65*f0687c8aSRaman Tenneti
66*f0687c8aSRaman Tennetifor plane in plane_list:
67*f0687c8aSRaman Tenneti    input("Press enter to enable plane idx %d on crtc idx %d" %
68*f0687c8aSRaman Tenneti          (plane.idx, crtc1.idx))
69*f0687c8aSRaman Tenneti    req = pykms.AtomicReq(card)
70*f0687c8aSRaman Tenneti    req.add(plane, {"FB_ID": fb.id,
71*f0687c8aSRaman Tenneti                     "CRTC_ID": crtc1.id,
72*f0687c8aSRaman Tenneti                     "SRC_X": 0 << 16,
73*f0687c8aSRaman Tenneti                     "SRC_Y": 0 << 16,
74*f0687c8aSRaman Tenneti                     "SRC_W": fb.width << 16,
75*f0687c8aSRaman Tenneti                     "SRC_H": fb.height << 16,
76*f0687c8aSRaman Tenneti                     "CRTC_X": x,
77*f0687c8aSRaman Tenneti                     "CRTC_Y": y,
78*f0687c8aSRaman Tenneti                     "CRTC_W": fb.width,
79*f0687c8aSRaman Tenneti                     "CRTC_H": fb.height,
80*f0687c8aSRaman Tenneti                     "zpos": z})
81*f0687c8aSRaman Tenneti    r = req.commit_sync()
82*f0687c8aSRaman Tenneti    print("Plane enable request returned %d\n" % r)
83*f0687c8aSRaman Tenneti
84*f0687c8aSRaman Tenneti    x = x + 50
85*f0687c8aSRaman Tenneti    y = y + 50
86*f0687c8aSRaman Tenneti    z = z + 1
87*f0687c8aSRaman Tenneti
88*f0687c8aSRaman Tennetiif not conn2:
89*f0687c8aSRaman Tenneti     sys.exit()
90*f0687c8aSRaman Tenneti
91*f0687c8aSRaman Tennetireq = pykms.AtomicReq(card)
92*f0687c8aSRaman Tennetireq.add(conn2, "CRTC_ID", crtc2.id)
93*f0687c8aSRaman Tennetireq.add(crtc2, {"ACTIVE": 1,
94*f0687c8aSRaman Tenneti                "MODE_ID": modeb2.id})
95*f0687c8aSRaman Tenneti
96*f0687c8aSRaman Tennetiinput("Press enter to enable crtc idx %d at %s" % (crtc2.idx, conn2.fullname))
97*f0687c8aSRaman Tennetir = req.commit_sync(allow_modeset = True)
98*f0687c8aSRaman Tennetiprint("Crtc enable request returned %d\n" % r)
99*f0687c8aSRaman Tenneti
100*f0687c8aSRaman Tennetix = 0
101*f0687c8aSRaman Tennetiy = 0
102*f0687c8aSRaman Tennetiz = 0
103*f0687c8aSRaman Tenneti
104*f0687c8aSRaman Tenneti# Code assumes that planes for crtc1 also work for crtc2
105*f0687c8aSRaman Tennetifor plane in reversed(plane_list):
106*f0687c8aSRaman Tenneti
107*f0687c8aSRaman Tenneti    input("Press enter to disable plane idx %d on crtc idx %d" %
108*f0687c8aSRaman Tenneti          (plane.idx, crtc1.idx))
109*f0687c8aSRaman Tenneti    req = pykms.AtomicReq(card)
110*f0687c8aSRaman Tenneti    req.add(plane, {"FB_ID": 0,
111*f0687c8aSRaman Tenneti                    "CRTC_ID": 0})
112*f0687c8aSRaman Tenneti    r = req.commit_sync(allow_modeset = True)
113*f0687c8aSRaman Tenneti    print("Plane disable request returned %d\n" % r)
114*f0687c8aSRaman Tenneti
115*f0687c8aSRaman Tenneti    input("Press enter to enable plane idx %d on crtc idx %d" %
116*f0687c8aSRaman Tenneti          (plane.idx, crtc2.idx))
117*f0687c8aSRaman Tenneti    req = pykms.AtomicReq(card)
118*f0687c8aSRaman Tenneti    req.add(plane, {"FB_ID": fb.id,
119*f0687c8aSRaman Tenneti                    "CRTC_ID": crtc2.id,
120*f0687c8aSRaman Tenneti                    "SRC_X": 0 << 16,
121*f0687c8aSRaman Tenneti                    "SRC_Y": 0 << 16,
122*f0687c8aSRaman Tenneti                    "SRC_W": fb.width << 16,
123*f0687c8aSRaman Tenneti                    "SRC_H": fb.height << 16,
124*f0687c8aSRaman Tenneti                    "CRTC_X": x,
125*f0687c8aSRaman Tenneti                    "CRTC_Y": y,
126*f0687c8aSRaman Tenneti                    "CRTC_W": fb.width,
127*f0687c8aSRaman Tenneti                    "CRTC_H": fb.height,
128*f0687c8aSRaman Tenneti                    "zpos": z})
129*f0687c8aSRaman Tenneti    r = req.commit_sync(allow_modeset = True)
130*f0687c8aSRaman Tenneti    print("Plane enable request returned %d\n" % r)
131*f0687c8aSRaman Tenneti
132*f0687c8aSRaman Tenneti    x = x + 50
133*f0687c8aSRaman Tenneti    y = y + 50
134*f0687c8aSRaman Tenneti    z = z + 1
135*f0687c8aSRaman Tenneti
136*f0687c8aSRaman Tennetiinput("press enter to exit\n")
137