xref: /aosp_15_r20/external/libkmsxx/py/tests/trans-test.py (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti#!/usr/bin/python3
2*f0687c8aSRaman Tenneti
3*f0687c8aSRaman Tennetiimport pykms
4*f0687c8aSRaman Tennetiimport time
5*f0687c8aSRaman Tennetiimport sys
6*f0687c8aSRaman Tennetiimport argparse
7*f0687c8aSRaman Tenneti
8*f0687c8aSRaman Tennetitests = {
9*f0687c8aSRaman Tenneti    1: "test_am5_trans_dest",
10*f0687c8aSRaman Tenneti    2: "test_am5_trans_src",
11*f0687c8aSRaman Tenneti    3: "test_am4_normal_trans_dst",
12*f0687c8aSRaman Tenneti    4: "test_am4_normal_trans_src",
13*f0687c8aSRaman Tenneti    5: "test_am4_alpha_trans_src",
14*f0687c8aSRaman Tenneti}
15*f0687c8aSRaman Tenneti
16*f0687c8aSRaman Tennetiparser = argparse.ArgumentParser()
17*f0687c8aSRaman Tennetiparser.add_argument("-c", "--connector", default="")
18*f0687c8aSRaman Tennetiparser.add_argument("test", type=int, help="test number 1-" + str(len(tests)))
19*f0687c8aSRaman Tennetiargs = parser.parse_args()
20*f0687c8aSRaman Tenneti
21*f0687c8aSRaman Tenneti#if len(sys.argv) != 2:
22*f0687c8aSRaman Tenneti#    print("Usage: {} <test-number>".format(sys.argv[0]))
23*f0687c8aSRaman Tenneti#    print("  1 - test_am5_trans_dest()")
24*f0687c8aSRaman Tenneti#    print("  2 - test_am5_trans_src()")
25*f0687c8aSRaman Tenneti#    print("  3 - test_am4_normal_trans_dst()")
26*f0687c8aSRaman Tenneti#    print("  4 - test_am4_normal_trans_src()")
27*f0687c8aSRaman Tenneti#    print("  5 - test_am4_alpha_trans_src()")
28*f0687c8aSRaman Tenneti#    exit(0)
29*f0687c8aSRaman Tenneti
30*f0687c8aSRaman TennetiTEST = args.test
31*f0687c8aSRaman Tenneti
32*f0687c8aSRaman Tenneticard = pykms.Card()
33*f0687c8aSRaman Tennetires = pykms.ResourceManager(card)
34*f0687c8aSRaman Tenneticonn = res.reserve_connector(args.connector)
35*f0687c8aSRaman Tenneticrtc = res.reserve_crtc(conn)
36*f0687c8aSRaman Tennetimode = conn.get_default_mode()
37*f0687c8aSRaman Tenneti
38*f0687c8aSRaman Tennetiplanes = []
39*f0687c8aSRaman Tennetifor p in card.planes:
40*f0687c8aSRaman Tenneti    if p.supports_crtc(crtc) == False:
41*f0687c8aSRaman Tenneti        continue
42*f0687c8aSRaman Tenneti    planes.append(p)
43*f0687c8aSRaman Tenneti
44*f0687c8aSRaman Tenneticard.disable_planes()
45*f0687c8aSRaman Tenneti
46*f0687c8aSRaman Tennetiw = mode.hdisplay
47*f0687c8aSRaman Tennetih = mode.vdisplay
48*f0687c8aSRaman Tenneti
49*f0687c8aSRaman Tennetifbs=[]
50*f0687c8aSRaman Tenneti
51*f0687c8aSRaman Tenneti# See Figure 11-78. DISPC Destination Transparency Color Key Example
52*f0687c8aSRaman Tennetidef test_am5_trans_dest():
53*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
54*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
55*f0687c8aSRaman Tenneti
56*f0687c8aSRaman Tenneti    fb = fbs[0]
57*f0687c8aSRaman Tenneti    stepX = fb.width // 7
58*f0687c8aSRaman Tenneti    stepY = fb.height // 5;
59*f0687c8aSRaman Tenneti
60*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple)
61*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
62*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
63*f0687c8aSRaman Tenneti                    pykms.green)
64*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 3, stepY,
65*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
66*f0687c8aSRaman Tenneti                    pykms.red)
67*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 5, stepY,
68*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
69*f0687c8aSRaman Tenneti                    pykms.white)
70*f0687c8aSRaman Tenneti
71*f0687c8aSRaman Tenneti    fb = fbs[1]
72*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0,
73*f0687c8aSRaman Tenneti                    fb.width, fb.height,
74*f0687c8aSRaman Tenneti                    pykms.cyan)
75*f0687c8aSRaman Tenneti    pykms.draw_circle(fb, (stepX * 3) + (stepX // 2), fb.height // 2,
76*f0687c8aSRaman Tenneti                      (fb.height // 2) - stepY,
77*f0687c8aSRaman Tenneti                      pykms.yellow)
78*f0687c8aSRaman Tenneti
79*f0687c8aSRaman Tenneti    crtc.set_props({
80*f0687c8aSRaman Tenneti        "trans-key-mode": 1,
81*f0687c8aSRaman Tenneti        "trans-key": pykms.purple.rgb888,
82*f0687c8aSRaman Tenneti        "background": 0,
83*f0687c8aSRaman Tenneti        "alpha_blender": 0,
84*f0687c8aSRaman Tenneti    })
85*f0687c8aSRaman Tenneti
86*f0687c8aSRaman Tenneti    print("Purple bg. Green, red, white boxes.")
87*f0687c8aSRaman Tenneti
88*f0687c8aSRaman Tenneti    plane = planes[0]
89*f0687c8aSRaman Tenneti    fb = fbs[0]
90*f0687c8aSRaman Tenneti    z = 0
91*f0687c8aSRaman Tenneti
92*f0687c8aSRaman Tenneti    plane.set_props({
93*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
94*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
95*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
96*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
97*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
98*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
99*f0687c8aSRaman Tenneti        "zpos": z,
100*f0687c8aSRaman Tenneti    })
101*f0687c8aSRaman Tenneti
102*f0687c8aSRaman Tenneti    input("press enter\n")
103*f0687c8aSRaman Tenneti
104*f0687c8aSRaman Tenneti    print("Cyan bg. Green, red, white boxes. Yellow circle behind the red box.")
105*f0687c8aSRaman Tenneti
106*f0687c8aSRaman Tenneti    plane = planes[1]
107*f0687c8aSRaman Tenneti    fb = fbs[1]
108*f0687c8aSRaman Tenneti    z = 1
109*f0687c8aSRaman Tenneti
110*f0687c8aSRaman Tenneti    plane.set_props({
111*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
112*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
113*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
114*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
115*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
116*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
117*f0687c8aSRaman Tenneti        "zpos": z,
118*f0687c8aSRaman Tenneti    })
119*f0687c8aSRaman Tenneti
120*f0687c8aSRaman Tenneti    input("press enter\n")
121*f0687c8aSRaman Tenneti
122*f0687c8aSRaman Tenneti# See Figure 11-77. DISPC Source Transparency Color Key Example
123*f0687c8aSRaman Tennetidef test_am5_trans_src():
124*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
125*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
126*f0687c8aSRaman Tenneti
127*f0687c8aSRaman Tenneti    fb = fbs[0]
128*f0687c8aSRaman Tenneti    halfX = fb.width // 2
129*f0687c8aSRaman Tenneti    stepX = (fb.width // 2) // 5;
130*f0687c8aSRaman Tenneti    stepY = fb.height // 5;
131*f0687c8aSRaman Tenneti
132*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.white)
133*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 2, stepY * 2,
134*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
135*f0687c8aSRaman Tenneti                    pykms.red)
136*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2,
137*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
138*f0687c8aSRaman Tenneti                    pykms.green)
139*f0687c8aSRaman Tenneti
140*f0687c8aSRaman Tenneti    fb = fbs[1]
141*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan)
142*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
143*f0687c8aSRaman Tenneti                    fb.width - (stepX * 2), fb.height - (stepY * 2),
144*f0687c8aSRaman Tenneti                    pykms.purple)
145*f0687c8aSRaman Tenneti
146*f0687c8aSRaman Tenneti    crtc.set_props({
147*f0687c8aSRaman Tenneti        "trans-key-mode": 2,
148*f0687c8aSRaman Tenneti        "trans-key": pykms.purple.rgb888,
149*f0687c8aSRaman Tenneti        "background": 0,
150*f0687c8aSRaman Tenneti        "alpha_blender": 0,
151*f0687c8aSRaman Tenneti    })
152*f0687c8aSRaman Tenneti
153*f0687c8aSRaman Tenneti    print("White bg. Red and green boxes.")
154*f0687c8aSRaman Tenneti
155*f0687c8aSRaman Tenneti    plane = planes[0]
156*f0687c8aSRaman Tenneti    fb = fbs[0]
157*f0687c8aSRaman Tenneti    z = 0
158*f0687c8aSRaman Tenneti
159*f0687c8aSRaman Tenneti    plane.set_props({
160*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
161*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
162*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
163*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
164*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
165*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
166*f0687c8aSRaman Tenneti        "zpos": z,
167*f0687c8aSRaman Tenneti    })
168*f0687c8aSRaman Tenneti
169*f0687c8aSRaman Tenneti    input("press enter\n")
170*f0687c8aSRaman Tenneti
171*f0687c8aSRaman Tenneti    print("Cyan bg. Big white box, containing red and green boxes.")
172*f0687c8aSRaman Tenneti
173*f0687c8aSRaman Tenneti    plane = planes[1]
174*f0687c8aSRaman Tenneti    fb = fbs[1]
175*f0687c8aSRaman Tenneti    z = 3
176*f0687c8aSRaman Tenneti
177*f0687c8aSRaman Tenneti    plane.set_props({
178*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
179*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
180*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
181*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
182*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
183*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
184*f0687c8aSRaman Tenneti        "zpos": z,
185*f0687c8aSRaman Tenneti    })
186*f0687c8aSRaman Tenneti
187*f0687c8aSRaman Tenneti    input("press enter\n")
188*f0687c8aSRaman Tenneti
189*f0687c8aSRaman Tennetidef test_am4_normal_trans_dst():
190*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
191*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
192*f0687c8aSRaman Tenneti
193*f0687c8aSRaman Tenneti    fb = fbs[0]
194*f0687c8aSRaman Tenneti    stepX = fb.width // 7
195*f0687c8aSRaman Tenneti    stepY = fb.height // 5;
196*f0687c8aSRaman Tenneti
197*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple)
198*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
199*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
200*f0687c8aSRaman Tenneti                    pykms.green)
201*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 3, stepY,
202*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
203*f0687c8aSRaman Tenneti                    pykms.red)
204*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 5, stepY,
205*f0687c8aSRaman Tenneti                    stepX, fb.height - (stepY * 2),
206*f0687c8aSRaman Tenneti                    pykms.white)
207*f0687c8aSRaman Tenneti
208*f0687c8aSRaman Tenneti    fb = fbs[1]
209*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0,
210*f0687c8aSRaman Tenneti                    fb.width, fb.height,
211*f0687c8aSRaman Tenneti                    pykms.cyan)
212*f0687c8aSRaman Tenneti    pykms.draw_circle(fb, (stepX * 3) + (stepX // 2), fb.height // 2,
213*f0687c8aSRaman Tenneti                      (fb.height // 2) - stepY,
214*f0687c8aSRaman Tenneti                      pykms.yellow)
215*f0687c8aSRaman Tenneti
216*f0687c8aSRaman Tenneti    crtc.set_props({
217*f0687c8aSRaman Tenneti        "trans-key-mode": 1,
218*f0687c8aSRaman Tenneti        "trans-key": pykms.purple.rgb888,
219*f0687c8aSRaman Tenneti        "background": 0,
220*f0687c8aSRaman Tenneti        "alpha_blender": 0,
221*f0687c8aSRaman Tenneti    })
222*f0687c8aSRaman Tenneti
223*f0687c8aSRaman Tenneti    print("Purple bg. Green, red, white boxes.")
224*f0687c8aSRaman Tenneti
225*f0687c8aSRaman Tenneti    plane = planes[0]
226*f0687c8aSRaman Tenneti    fb = fbs[0]
227*f0687c8aSRaman Tenneti    z = 0
228*f0687c8aSRaman Tenneti
229*f0687c8aSRaman Tenneti    plane.set_props({
230*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
231*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
232*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
233*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
234*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
235*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
236*f0687c8aSRaman Tenneti        "zpos": z,
237*f0687c8aSRaman Tenneti    })
238*f0687c8aSRaman Tenneti
239*f0687c8aSRaman Tenneti    input("press enter\n")
240*f0687c8aSRaman Tenneti
241*f0687c8aSRaman Tenneti    print("Cyan bg. Green, red, white boxes. Yellow circle behind the red box.")
242*f0687c8aSRaman Tenneti
243*f0687c8aSRaman Tenneti    plane = planes[1]
244*f0687c8aSRaman Tenneti    fb = fbs[1]
245*f0687c8aSRaman Tenneti    z = 1
246*f0687c8aSRaman Tenneti
247*f0687c8aSRaman Tenneti    plane.set_props({
248*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
249*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
250*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
251*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
252*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
253*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
254*f0687c8aSRaman Tenneti        "zpos": z,
255*f0687c8aSRaman Tenneti    })
256*f0687c8aSRaman Tenneti
257*f0687c8aSRaman Tenneti    input("press enter\n")
258*f0687c8aSRaman Tenneti
259*f0687c8aSRaman Tennetidef test_am4_normal_trans_src():
260*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
261*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
262*f0687c8aSRaman Tenneti
263*f0687c8aSRaman Tenneti    fb = fbs[0]
264*f0687c8aSRaman Tenneti    halfX = fb.width // 2
265*f0687c8aSRaman Tenneti    stepX = (fb.width // 2) // 5;
266*f0687c8aSRaman Tenneti    stepY = fb.height // 5;
267*f0687c8aSRaman Tenneti
268*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.white)
269*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 2, stepY * 2,
270*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
271*f0687c8aSRaman Tenneti                    pykms.red)
272*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2,
273*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
274*f0687c8aSRaman Tenneti                    pykms.green)
275*f0687c8aSRaman Tenneti
276*f0687c8aSRaman Tenneti    fb = fbs[1]
277*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan)
278*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
279*f0687c8aSRaman Tenneti                    fb.width - (stepX * 2), fb.height - (stepY * 2),
280*f0687c8aSRaman Tenneti                    pykms.purple)
281*f0687c8aSRaman Tenneti
282*f0687c8aSRaman Tenneti    crtc.set_props({
283*f0687c8aSRaman Tenneti        "trans-key-mode": 2,
284*f0687c8aSRaman Tenneti        "trans-key": pykms.purple.rgb888,
285*f0687c8aSRaman Tenneti        "background": 0,
286*f0687c8aSRaman Tenneti        "alpha_blender": 0,
287*f0687c8aSRaman Tenneti    })
288*f0687c8aSRaman Tenneti
289*f0687c8aSRaman Tenneti    print("White bg. Red and green boxes.")
290*f0687c8aSRaman Tenneti
291*f0687c8aSRaman Tenneti    plane = planes[0]
292*f0687c8aSRaman Tenneti    fb = fbs[0]
293*f0687c8aSRaman Tenneti    z = 0
294*f0687c8aSRaman Tenneti
295*f0687c8aSRaman Tenneti    plane.set_props({
296*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
297*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
298*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
299*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
300*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
301*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
302*f0687c8aSRaman Tenneti        "zpos": z,
303*f0687c8aSRaman Tenneti    })
304*f0687c8aSRaman Tenneti
305*f0687c8aSRaman Tenneti    input("press enter\n")
306*f0687c8aSRaman Tenneti
307*f0687c8aSRaman Tenneti    print("Cyan bg. Big white box, containing red and green boxes.")
308*f0687c8aSRaman Tenneti
309*f0687c8aSRaman Tenneti    plane = planes[1]
310*f0687c8aSRaman Tenneti    fb = fbs[1]
311*f0687c8aSRaman Tenneti    z = 2
312*f0687c8aSRaman Tenneti
313*f0687c8aSRaman Tenneti    plane.set_props({
314*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
315*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
316*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
317*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
318*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
319*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
320*f0687c8aSRaman Tenneti        "zpos": z,
321*f0687c8aSRaman Tenneti    })
322*f0687c8aSRaman Tenneti
323*f0687c8aSRaman Tenneti    input("press enter\n")
324*f0687c8aSRaman Tenneti
325*f0687c8aSRaman Tennetidef test_am4_alpha_trans_src():
326*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
327*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
328*f0687c8aSRaman Tenneti    fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
329*f0687c8aSRaman Tenneti
330*f0687c8aSRaman Tenneti    fb = fbs[0]
331*f0687c8aSRaman Tenneti    halfX = fb.width // 2
332*f0687c8aSRaman Tenneti    stepX = (fb.width // 2) // 5;
333*f0687c8aSRaman Tenneti    stepY = fb.height // 5;
334*f0687c8aSRaman Tenneti
335*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, w, h, pykms.purple)
336*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX * 2, stepY * 2,
337*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
338*f0687c8aSRaman Tenneti                    pykms.red)
339*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2,
340*f0687c8aSRaman Tenneti                    halfX - (stepX * 4), fb.height - (stepY * 4),
341*f0687c8aSRaman Tenneti                    pykms.green)
342*f0687c8aSRaman Tenneti
343*f0687c8aSRaman Tenneti    fb = fbs[1]
344*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.blue)
345*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
346*f0687c8aSRaman Tenneti                    fb.width - (stepX * 2), fb.height - (stepY * 2),
347*f0687c8aSRaman Tenneti                    pykms.purple)
348*f0687c8aSRaman Tenneti
349*f0687c8aSRaman Tenneti    fb = fbs[2]
350*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan)
351*f0687c8aSRaman Tenneti    pykms.draw_rect(fb, stepX, stepY,
352*f0687c8aSRaman Tenneti                    fb.width - (stepX * 2), fb.height - (stepY * 2),
353*f0687c8aSRaman Tenneti                    pykms.purple)
354*f0687c8aSRaman Tenneti
355*f0687c8aSRaman Tenneti    crtc.set_props({
356*f0687c8aSRaman Tenneti        "trans-key-mode": 1,
357*f0687c8aSRaman Tenneti        "trans-key": pykms.purple.rgb888,
358*f0687c8aSRaman Tenneti        "background": 0x666666,
359*f0687c8aSRaman Tenneti        "alpha_blender": 1,
360*f0687c8aSRaman Tenneti    })
361*f0687c8aSRaman Tenneti
362*f0687c8aSRaman Tenneti    print("grey background")
363*f0687c8aSRaman Tenneti    input("press enter\n")
364*f0687c8aSRaman Tenneti
365*f0687c8aSRaman Tenneti    plane = planes[0]
366*f0687c8aSRaman Tenneti    fb = fbs[0]
367*f0687c8aSRaman Tenneti    plane.set_props({
368*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
369*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
370*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
371*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
372*f0687c8aSRaman Tenneti        "CRTC_W": w,
373*f0687c8aSRaman Tenneti        "CRTC_H": h,
374*f0687c8aSRaman Tenneti    })
375*f0687c8aSRaman Tenneti
376*f0687c8aSRaman Tenneti    print("grey background, red and green boxes")
377*f0687c8aSRaman Tenneti    input("press enter\n")
378*f0687c8aSRaman Tenneti
379*f0687c8aSRaman Tenneti    plane = planes[1]
380*f0687c8aSRaman Tenneti    fb = fbs[1]
381*f0687c8aSRaman Tenneti    plane.set_props({
382*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
383*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
384*f0687c8aSRaman Tenneti        "SRC_X": 0 << 16,
385*f0687c8aSRaman Tenneti        "SRC_Y": 0 << 16,
386*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
387*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
388*f0687c8aSRaman Tenneti        "CRTC_X": 0,
389*f0687c8aSRaman Tenneti        "CRTC_Y": 0,
390*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
391*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
392*f0687c8aSRaman Tenneti    })
393*f0687c8aSRaman Tenneti
394*f0687c8aSRaman Tenneti    print("left side: blue bg, purple box, red box inside purple. right side: unchanged")
395*f0687c8aSRaman Tenneti    input("press enter\n")
396*f0687c8aSRaman Tenneti
397*f0687c8aSRaman Tenneti    plane = planes[2]
398*f0687c8aSRaman Tenneti    fb = fbs[2]
399*f0687c8aSRaman Tenneti    plane.set_props({
400*f0687c8aSRaman Tenneti        "FB_ID": fb.id,
401*f0687c8aSRaman Tenneti        "CRTC_ID": crtc.id,
402*f0687c8aSRaman Tenneti        "SRC_X": 0 << 16,
403*f0687c8aSRaman Tenneti        "SRC_Y": 0 << 16,
404*f0687c8aSRaman Tenneti        "SRC_W": fb.width << 16,
405*f0687c8aSRaman Tenneti        "SRC_H": fb.height << 16,
406*f0687c8aSRaman Tenneti        "CRTC_X": w - fb.width,
407*f0687c8aSRaman Tenneti        "CRTC_Y": 0,
408*f0687c8aSRaman Tenneti        "CRTC_W": fb.width,
409*f0687c8aSRaman Tenneti        "CRTC_H": fb.height,
410*f0687c8aSRaman Tenneti    })
411*f0687c8aSRaman Tenneti
412*f0687c8aSRaman Tenneti    print("left side: unchanged. right side: cyan bg, purple box, green box inside purple.")
413*f0687c8aSRaman Tenneti    input("press enter\n")
414*f0687c8aSRaman Tenneti
415*f0687c8aSRaman Tennetiprint(tests[args.test])
416*f0687c8aSRaman Tennetilocals()[tests[args.test]]()
417