#!/usr/bin/python3 # SPDX-License-Identifier: GPL-2.0-or-later # SPDX-FileCopyrightText: 2019 Renesas Electronics Corporation import kmstest import pykms import time class FormatsTest(kmstest.KMSTest): """Test all available plane formats.""" def main(self): self.start("plane formats") # Find a CRTC with a connected connector and at least one plane for connector in self.output_connectors(): if not connector.connected(): self.skip("unconnected connector") continue try: mode = connector.get_default_mode() except ValueError: continue crtcs = connector.get_possible_crtcs() for crtc in crtcs: if crtc.primary_plane: break else: crtc = None if crtc: break else: self.skip("no CRTC available with connector") return self.logger.log("Testing connector %s, CRTC %u, mode %s" % \ (connector.fullname, crtc.id, mode.name)) failed = 0 num_formats = len(crtc.primary_plane.formats) for i in range(num_formats): format = crtc.primary_plane.formats[i] self.logger.log("Testing format %s" % format) self.progress(i+1, num_formats) # Create a frame buffer try: fb = pykms.DumbFramebuffer(self.card, mode.hdisplay, mode.vdisplay, format) except ValueError: self.logger.log("Failed to create frame buffer") failed += 1 continue pykms.draw_test_pattern(fb) # Set the mode with a primary plane ret = self.atomic_crtc_mode_set(crtc, connector, mode, fb) if ret < 0: self.logger.log("atomic mode set failed with %d" % ret) failed += 1 continue self.run(3) self.atomic_crtc_disable(crtc) if failed: self.fail("%s/%s formats failed" % (failed, num_formats)) else: self.success() FormatsTest().execute()