1*f0687c8aSRaman Tenneti#!/usr/bin/python3 2*f0687c8aSRaman Tenneti 3*f0687c8aSRaman Tennetiimport pykms 4*f0687c8aSRaman Tennetiimport time 5*f0687c8aSRaman Tennetiimport argparse 6*f0687c8aSRaman Tenneti 7*f0687c8aSRaman Tennetiparser = argparse.ArgumentParser(description='Simple alpha blending test.') 8*f0687c8aSRaman Tennetiparser.add_argument('--resetcrtc', action="store_true", 9*f0687c8aSRaman Tenneti help='Reset legacy CRTC color properties') 10*f0687c8aSRaman Tennetiparser.add_argument('--connector', '-c', dest='connector', default="", 11*f0687c8aSRaman Tenneti required=False, help='connector to output') 12*f0687c8aSRaman Tennetiparser.add_argument('--mode', '-m', dest='modename', 13*f0687c8aSRaman Tenneti required=False, help='Video mode name to use') 14*f0687c8aSRaman Tennetiargs = parser.parse_args() 15*f0687c8aSRaman Tenneti 16*f0687c8aSRaman Tennetimax_planes = 4 17*f0687c8aSRaman Tenneti 18*f0687c8aSRaman Tenneticard = pykms.Card() 19*f0687c8aSRaman Tennetires = pykms.ResourceManager(card) 20*f0687c8aSRaman Tenneticonn = res.reserve_connector(args.connector) 21*f0687c8aSRaman Tenneticrtc = res.reserve_crtc(conn) 22*f0687c8aSRaman Tennetiif args.modename == None: 23*f0687c8aSRaman Tenneti mode = conn.get_default_mode() 24*f0687c8aSRaman Tennetielse: 25*f0687c8aSRaman Tenneti mode = conn.get_mode(args.modename) 26*f0687c8aSRaman Tenneti 27*f0687c8aSRaman Tennetiplanes = [] 28*f0687c8aSRaman Tenneti 29*f0687c8aSRaman Tennetifor i in range(max_planes): 30*f0687c8aSRaman Tenneti p = res.reserve_generic_plane(crtc) 31*f0687c8aSRaman Tenneti if p == None: 32*f0687c8aSRaman Tenneti break 33*f0687c8aSRaman Tenneti planes.append(p) 34*f0687c8aSRaman Tenneti 35*f0687c8aSRaman Tennetiprint("Got {} planes. Test supports up to 4 planes.".format(len(planes))) 36*f0687c8aSRaman Tenneti 37*f0687c8aSRaman Tenneticard.disable_planes() 38*f0687c8aSRaman Tenneti 39*f0687c8aSRaman Tennetiw = mode.hdisplay 40*f0687c8aSRaman Tennetih = mode.vdisplay 41*f0687c8aSRaman Tenneti 42*f0687c8aSRaman Tennetifbs=[] 43*f0687c8aSRaman Tenneti 44*f0687c8aSRaman Tennetifor i in range(max_planes): 45*f0687c8aSRaman Tenneti fbs.append(pykms.DumbFramebuffer(card, w, h, "AR24")) 46*f0687c8aSRaman Tenneti 47*f0687c8aSRaman Tennetipykms.draw_rect(fbs[0], 50, 50, 200, 200, pykms.RGB(128, 255, 0, 0)) 48*f0687c8aSRaman Tennetipykms.draw_rect(fbs[1], 150, 50, 200, 200, pykms.RGB(128, 0, 255, 0)) 49*f0687c8aSRaman Tennetipykms.draw_rect(fbs[2], 50, 150, 200, 200, pykms.RGB(128, 0, 0, 255)) 50*f0687c8aSRaman Tennetipykms.draw_rect(fbs[3], 150, 150, 200, 200, pykms.RGB(128, 128, 128, 128)) 51*f0687c8aSRaman Tenneti 52*f0687c8aSRaman Tenneticard.disable_planes() 53*f0687c8aSRaman Tenneti 54*f0687c8aSRaman Tennetiif args.resetcrtc: 55*f0687c8aSRaman Tenneti crtc.set_props({ 56*f0687c8aSRaman Tenneti "trans-key-mode": 0, 57*f0687c8aSRaman Tenneti "trans-key": 0, 58*f0687c8aSRaman Tenneti "background": 0, 59*f0687c8aSRaman Tenneti "alpha_blender": 1, 60*f0687c8aSRaman Tenneti }) 61*f0687c8aSRaman Tenneti 62*f0687c8aSRaman Tennetifor i in range(len(planes)): 63*f0687c8aSRaman Tenneti plane = planes[i] 64*f0687c8aSRaman Tenneti fb = fbs[i] 65*f0687c8aSRaman Tenneti 66*f0687c8aSRaman Tenneti print("set crtc {}, plane {}, z {}, fb {}".format(crtc.id, plane.id, i, fb.id)) 67*f0687c8aSRaman Tenneti 68*f0687c8aSRaman Tenneti plane.set_props({ 69*f0687c8aSRaman Tenneti "FB_ID": fb.id, 70*f0687c8aSRaman Tenneti "CRTC_ID": crtc.id, 71*f0687c8aSRaman Tenneti "SRC_W": fb.width << 16, 72*f0687c8aSRaman Tenneti "SRC_H": fb.height << 16, 73*f0687c8aSRaman Tenneti "CRTC_W": fb.width, 74*f0687c8aSRaman Tenneti "CRTC_H": fb.height, 75*f0687c8aSRaman Tenneti "zpos": i, 76*f0687c8aSRaman Tenneti }) 77*f0687c8aSRaman Tenneti 78*f0687c8aSRaman Tenneti time.sleep(1) 79*f0687c8aSRaman Tenneti 80*f0687c8aSRaman Tennetiinput("press enter to exit\n") 81