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