1*f0687c8aSRaman Tenneti#!/usr/bin/python3 2*f0687c8aSRaman Tenneti 3*f0687c8aSRaman Tennetiimport pykms 4*f0687c8aSRaman Tennetiimport time 5*f0687c8aSRaman Tennetiimport random 6*f0687c8aSRaman Tennetiimport argparse 7*f0687c8aSRaman Tenneti 8*f0687c8aSRaman Tennetidef plane_commit(card, crtc, plane, fb, x, y, w, h) : 9*f0687c8aSRaman Tenneti req = pykms.AtomicReq(card) 10*f0687c8aSRaman Tenneti req.add_plane(plane, fb, crtc, None, (x, y, w, h)) 11*f0687c8aSRaman Tenneti r = req.commit_sync() 12*f0687c8aSRaman Tenneti assert r == 0, "Plane commit failed: %d" % r 13*f0687c8aSRaman Tenneti 14*f0687c8aSRaman Tenneti 15*f0687c8aSRaman Tennetiparser = argparse.ArgumentParser(description='Simple scaling stress test.') 16*f0687c8aSRaman Tennetiparser.add_argument('--plane', '-p', dest='plane', default="", 17*f0687c8aSRaman Tenneti required=False, help='plane number to use') 18*f0687c8aSRaman Tennetiparser.add_argument('--connector', '-c', dest='connector', default="", 19*f0687c8aSRaman Tenneti required=False, help='connector to output') 20*f0687c8aSRaman Tenneti 21*f0687c8aSRaman Tennetiargs = parser.parse_args() 22*f0687c8aSRaman Tenneti 23*f0687c8aSRaman Tenneticard = pykms.Card() 24*f0687c8aSRaman Tennetires = pykms.ResourceManager(card) 25*f0687c8aSRaman Tenneticonn = res.reserve_connector(args.connector) 26*f0687c8aSRaman Tenneticrtc = res.reserve_crtc(conn) 27*f0687c8aSRaman Tennetiformat = pykms.PixelFormat.NV12 28*f0687c8aSRaman Tenneti 29*f0687c8aSRaman Tennetiif args.plane == "": 30*f0687c8aSRaman Tenneti plane = res.reserve_generic_plane(crtc, format) 31*f0687c8aSRaman Tennetielse: 32*f0687c8aSRaman Tenneti plane = card.planes[int(args.plane)] 33*f0687c8aSRaman Tenneti 34*f0687c8aSRaman Tennetimode = conn.get_default_mode() 35*f0687c8aSRaman Tennetimodeb = mode.to_blob(card) 36*f0687c8aSRaman Tennetireq = pykms.AtomicReq(card) 37*f0687c8aSRaman Tennetireq.add(conn, "CRTC_ID", crtc.id) 38*f0687c8aSRaman Tennetireq.add(crtc, {"ACTIVE": 1, 39*f0687c8aSRaman Tenneti "MODE_ID": modeb.id}) 40*f0687c8aSRaman Tennetir = req.commit_sync(allow_modeset = True) 41*f0687c8aSRaman Tennetiassert r == 0, "Initial commit failed: %d" % r 42*f0687c8aSRaman Tenneti 43*f0687c8aSRaman Tenneti# Initialize framebuffer for the scaled plane 44*f0687c8aSRaman TennetifbX = 1920 45*f0687c8aSRaman TennetifbY = 1080 46*f0687c8aSRaman Tennetifb = pykms.DumbFramebuffer(card, fbX, fbY, format); 47*f0687c8aSRaman Tennetipykms.draw_test_pattern(fb); 48*f0687c8aSRaman Tenneti 49*f0687c8aSRaman Tenneti# max downscale. 50*f0687c8aSRaman Tenneti# The values bellow are for DSS5. For DSS7 use 64 for both. 51*f0687c8aSRaman Tennetimax_downscale_x=5 52*f0687c8aSRaman Tennetimax_downscale_y=8 53*f0687c8aSRaman Tenneti 54*f0687c8aSRaman Tenneti# Plane's initial scaled size 55*f0687c8aSRaman TennetiW = 640 56*f0687c8aSRaman TennetiH = 480 57*f0687c8aSRaman Tenneti 58*f0687c8aSRaman Tenneti# Plane's initial position 59*f0687c8aSRaman TennetiX = 0 60*f0687c8aSRaman TennetiY = 0 61*f0687c8aSRaman Tenneti 62*f0687c8aSRaman Tenneti# initialize increments 63*f0687c8aSRaman TennetiWinc = 1 64*f0687c8aSRaman TennetiHinc = 1 65*f0687c8aSRaman TennetiXinc = 1 66*f0687c8aSRaman TennetiYinc = 1 67*f0687c8aSRaman Tenneti 68*f0687c8aSRaman Tennetiwhile True: 69*f0687c8aSRaman Tenneti print("+%d+%d %dx%d" % (X, Y, W, H)) 70*f0687c8aSRaman Tenneti plane_commit(card, crtc, plane, fb, X, Y, W, H) 71*f0687c8aSRaman Tenneti W = W + Winc 72*f0687c8aSRaman Tenneti H = H + Hinc 73*f0687c8aSRaman Tenneti if (Winc == 1 and W >= mode.hdisplay - X): 74*f0687c8aSRaman Tenneti Winc = -1 75*f0687c8aSRaman Tenneti if (Winc == -1 and W <= fbX/max_downscale_x): 76*f0687c8aSRaman Tenneti Winc = 1 77*f0687c8aSRaman Tenneti if (Hinc == 1 and H >= mode.vdisplay - Y): 78*f0687c8aSRaman Tenneti Hinc = -1 79*f0687c8aSRaman Tenneti if (Hinc == -1 and H <= fbY/max_downscale_y): 80*f0687c8aSRaman Tenneti Hinc = 1 81*f0687c8aSRaman Tenneti X = X + Xinc 82*f0687c8aSRaman Tenneti Y = Y + Yinc 83*f0687c8aSRaman Tenneti if (Xinc == 1 and X >= mode.hdisplay - W): 84*f0687c8aSRaman Tenneti Xinc = -1 85*f0687c8aSRaman Tenneti if (Xinc == -1 and X <= 0): 86*f0687c8aSRaman Tenneti Xinc = 1 87*f0687c8aSRaman Tenneti if (Yinc == 1 and Y >= mode.vdisplay - H): 88*f0687c8aSRaman Tenneti Yinc = -1 89*f0687c8aSRaman Tenneti if (Yinc == -1 and Y <= 0): 90*f0687c8aSRaman Tenneti Yinc = 1 91