1 #!/usr/bin/python3
3 import pykms
4 import time
6 # This hack makes drm initialize the fbcon, setting up the default connector
7 card = pykms.Card()
8 card = 0
10 card = pykms.Card()
11 res = pykms.ResourceManager(card)
12 conn = res.reserve_connector()
13 crtc = res.reserve_crtc(conn)
14 mode = conn.get_default_mode()
16 planes = []
17 for p in card.planes:
18 if p.supports_crtc(crtc) == False:
19 continue
20 planes.append(p)
22 card.disable_planes()
24 w = mode.hdisplay
25 h = mode.vdisplay
27 fbs=[]
29 def test_am5_trans_dest():
30 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
31 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
33 fb = fbs[0]
34 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, purple)
35 pykms.draw_rect(fb, 100, 100, 100, 200, green)
36 pykms.draw_rect(fb, 300, 100, 100, 200, red)
37 pykms.draw_rect(fb, 500, 100, 100, 200, white)
39 fb = fbs[1]
40 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan)
41 pykms.draw_rect(fb, 250, 100, 200, 200, yellow)
43 crtc.set_props({
44 "trans-key-mode": 1,
45 "trans-key": purple.rgb888,
46 "background": 0,
47 "alpha_blender": 0,
48 })
50 plane = 0
52 for i in range(0,2):
53 print("set crtc {}, plane {}, fb {}".format(crtc.id, planes[i].id, fbs[i].id))
55 plane = planes[i]
56 fb = fbs[i]
57 plane.set_props({
58 "FB_ID": fb.id,
59 "CRTC_ID": crtc.id,
60 "SRC_W": fb.width << 16,
61 "SRC_H": fb.height << 16,
62 "CRTC_W": fb.width,
63 "CRTC_H": fb.height,
64 "zorder": i,
65 })
67 time.sleep(1)
69 def test_am5_trans_src():
70 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
71 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
73 fb = fbs[0]
74 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, white)
75 pykms.draw_rect(fb, 200, 200, 100, 100, red)
76 pykms.draw_rect(fb, fb.width - 300, 200, 100, 100, green)
78 fb = fbs[1]
79 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan)
80 pykms.draw_rect(fb, 100, 100, 500, 500, purple)
82 crtc.set_props({
83 "trans-key-mode": 2,
84 "trans-key": purple.rgb888,
85 "background": 0,
86 "alpha_blender": 0,
87 })
89 plane = 0
91 for i in range(0,2):
92 print("set crtc {}, plane {}, fb {}".format(crtc.id, planes[i].id, fbs[i].id))
94 plane = planes[i]
95 fb = fbs[i]
96 plane.set_props({
97 "FB_ID": fb.id,
98 "CRTC_ID": crtc.id,
99 "SRC_W": fb.width << 16,
100 "SRC_H": fb.height << 16,
101 "CRTC_W": fb.width,
102 "CRTC_H": fb.height,
103 "zorder": 3 if i == 1 else 0,
104 })
106 time.sleep(1)
108 def test_am4_normal_trans_dst():
109 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
110 fbs.append(pykms.DumbFramebuffer(card, w * 2 // 3, h, "XR24"))
111 fbs.append(pykms.DumbFramebuffer(card, w * 2 // 3, h, "XR24"))
113 fb = fbs[0]
114 pykms.draw_rect(fb, 0, 0, w, h, purple)
115 pykms.draw_rect(fb, 100, 50, 50, 200, green)
116 pykms.draw_rect(fb, 200, 50, 50, 200, red)
117 pykms.draw_rect(fb, 300, 50, 50, 200, white)
119 fb = fbs[1]
120 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, blue)
122 fb = fbs[2]
123 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan)
125 crtc.set_props({
126 "trans-key-mode": 1,
127 "trans-key": purple.rgb888,
128 "background": 0,
129 "alpha_blender": 0,
130 })
132 time.sleep(1)
134 plane = planes[0]
135 fb = fbs[0]
136 plane.set_props({
137 "FB_ID": fb.id,
138 "CRTC_ID": crtc.id,
139 "SRC_W": fb.width << 16,
140 "SRC_H": fb.height << 16,
141 "CRTC_W": w,
142 "CRTC_H": h,
143 })
145 time.sleep(1)
147 plane = planes[1]
148 fb = fbs[1]
149 plane.set_props({
150 "FB_ID": fb.id,
151 "CRTC_ID": crtc.id,
152 "SRC_X": 0 << 16,
153 "SRC_Y": 0 << 16,
154 "SRC_W": fb.width << 16,
155 "SRC_H": fb.height << 16,
156 "CRTC_X": 0,
157 "CRTC_Y": 0,
158 "CRTC_W": fb.width,
159 "CRTC_H": fb.height,
160 })
162 time.sleep(1)
164 plane = planes[2]
165 fb = fbs[2]
166 plane.set_props({
167 "FB_ID": fb.id,
168 "CRTC_ID": crtc.id,
169 "SRC_X": 0 << 16,
170 "SRC_Y": 0 << 16,
171 "SRC_W": fb.width << 16,
172 "SRC_H": fb.height << 16,
173 "CRTC_X": w // 3,
174 "CRTC_Y": 0,
175 "CRTC_W": fb.width,
176 "CRTC_H": fb.height,
177 })
179 def test_am4_normal_trans_src():
180 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
181 fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
182 fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
184 fb = fbs[0]
185 pykms.draw_rect(fb, 0, 0, w, h, pykms.RGB(128, 255, 255))
186 pykms.draw_rect(fb, 200, 100, 50, 200, red)
187 pykms.draw_rect(fb, w - 200 - 50, 100, 50, 200, green)
189 fb = fbs[1]
190 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, blue)
191 pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple)
193 fb = fbs[2]
194 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan)
195 pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple)
197 crtc.set_props({
198 "trans-key-mode": 2,
199 "trans-key": purple.rgb888,
200 "background": 0,
201 "alpha_blender": 0,
202 })
204 time.sleep(1)
206 plane = planes[0]
207 fb = fbs[0]
208 plane.set_props({
209 "FB_ID": fb.id,
210 "CRTC_ID": crtc.id,
211 "SRC_W": fb.width << 16,
212 "SRC_H": fb.height << 16,
213 "CRTC_W": w,
214 "CRTC_H": h,
215 })
217 time.sleep(1)
219 plane = planes[1]
220 fb = fbs[1]
221 plane.set_props({
222 "FB_ID": fb.id,
223 "CRTC_ID": crtc.id,
224 "SRC_X": 0 << 16,
225 "SRC_Y": 0 << 16,
226 "SRC_W": fb.width << 16,
227 "SRC_H": fb.height << 16,
228 "CRTC_X": 0,
229 "CRTC_Y": 0,
230 "CRTC_W": fb.width,
231 "CRTC_H": fb.height,
232 })
234 time.sleep(1)
236 plane = planes[2]
237 fb = fbs[2]
238 plane.set_props({
239 "FB_ID": fb.id,
240 "CRTC_ID": crtc.id,
241 "SRC_X": 0 << 16,
242 "SRC_Y": 0 << 16,
243 "SRC_W": fb.width << 16,
244 "SRC_H": fb.height << 16,
245 "CRTC_X": w - fb.width,
246 "CRTC_Y": 0,
247 "CRTC_W": fb.width,
248 "CRTC_H": fb.height,
249 })
251 def test_am4_alpha_trans_src():
252 fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24"))
253 fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
254 fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24"))
256 fb = fbs[0]
257 pykms.draw_rect(fb, 0, 0, w, h, purple)
258 pykms.draw_rect(fb, 200, 100, 50, 200, red)
259 pykms.draw_rect(fb, w - 200 - 50, 100, 50, 200, green)
261 fb = fbs[1]
262 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, blue)
263 pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple)
265 fb = fbs[2]
266 pykms.draw_rect(fb, 0, 0, fb.width, fb.height, cyan)
267 pykms.draw_rect(fb, 100, 100, fb.width - 200, fb.height - 200, purple)
269 crtc.set_props({
270 "trans-key-mode": 1,
271 "trans-key": purple.rgb888,
272 "background": 0,
273 "alpha_blender": 1,
274 })
276 time.sleep(1)
278 plane = planes[0]
279 fb = fbs[0]
280 plane.set_props({
281 "FB_ID": fb.id,
282 "CRTC_ID": crtc.id,
283 "SRC_W": fb.width << 16,
284 "SRC_H": fb.height << 16,
285 "CRTC_W": w,
286 "CRTC_H": h,
287 })
289 time.sleep(1)
291 plane = planes[1]
292 fb = fbs[1]
293 plane.set_props({
294 "FB_ID": fb.id,
295 "CRTC_ID": crtc.id,
296 "SRC_X": 0 << 16,
297 "SRC_Y": 0 << 16,
298 "SRC_W": fb.width << 16,
299 "SRC_H": fb.height << 16,
300 "CRTC_X": 0,
301 "CRTC_Y": 0,
302 "CRTC_W": fb.width,
303 "CRTC_H": fb.height,
304 })
306 time.sleep(1)
308 plane = planes[2]
309 fb = fbs[2]
310 plane.set_props({
311 "FB_ID": fb.id,
312 "CRTC_ID": crtc.id,
313 "SRC_X": 0 << 16,
314 "SRC_Y": 0 << 16,
315 "SRC_W": fb.width << 16,
316 "SRC_H": fb.height << 16,
317 "CRTC_X": w - fb.width,
318 "CRTC_Y": 0,
319 "CRTC_W": fb.width,
320 "CRTC_H": fb.height,
321 })
325 #test_am5_trans_dest()
326 test_am5_trans_src()
327 #test_am4_normal_trans_dst()
328 #test_am4_normal_trans_src()
329 #test_am4_alpha_trans_src()
331 input("press enter to exit\n")