#!/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()