• Igor Torrente's avatar
    drm: vkms: Refactor the plane composer to accept new formats · 8ba16485
    Igor Torrente authored
    Currently the blend function only accepts XRGB_8888 and ARGB_8888
    as a color input.
    
    This patch refactors all the functions related to the plane composition
    to overcome this limitation.
    
    The pixels blend is done using the new internal format. And new handlers
    are being added to convert a specific format to/from this internal format.
    
    So the blend operation depends on these handlers to convert to this common
    format. The blended result, if necessary, is converted to the writeback
    buffer format.
    
    This patch introduces three major differences to the blend function.
    1 - All the planes are blended at once.
    2 - The blend calculus is done as per line instead of per pixel.
    3 - It is responsible to calculates the CRC and writing the writeback
    buffer(if necessary).
    
    These changes allow us to allocate way less memory in the intermediate
    buffer to compute these operations. Because now we don't need to
    have the entire intermediate image lines at once, just one line is
    enough.
    
    | Memory consumption (output dimensions) |
    |:--------------------------------------:|
    |       Current      |     This patch    |
    |:------------------:|:-----------------:|
    |   Width * Heigth   |     2 * Width     |
    
    Beyond memory, we also have a minor performance benefit from all
    these changes. Results running the IGT[1] test
    `igt@kms_cursor_crc@pipe-a-cursor-512x512-onscreen` ten times:
    
    |                 Frametime                  |
    |:------------------------------------------:|
    |  Implementation |  Current  |  This commit |
    |:---------------:|:---------:|:------------:|
    | frametime range |  9~22 ms  |    5~17 ms   |
    |     Average     |  11.4 ms  |    7.8 ms    |
    
    [1] IGT commit id: bc3f6833a12221a46659535dac06ebb312490eb4
    
    V2: Improves the performance drastically, by performing the operations
        per-line and not per-pixel(Pekka Paalanen).
        Minor improvements(Pekka Paalanen).
    V3: Changes the code to blend the planes all at once. This improves
        performance, memory consumption, and removes much of the weirdness
        of the V2(Pekka Paalanen and me).
        Minor improvements(Pekka Paalanen and me).
    V4: Rebase the code and adapt it to the new NUM_OVERLAY_PLANES constant.
    V5: Minor checkpatch fixes and the removal of TO-DO item(Melissa Wen).
        Several security/robustness improvents(Pekka Paalanen).
        Removes check_planes_x_bounds function and allows partial
        partly off-screen(Pekka Paalanen).
    V6: Fix a mismatch of some variable sizes (Pekka Paalanen).
        Several minor improvements (Pekka Paalanen).
    Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarIgor Torrente <igormtorrente@gmail.com>
    Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220905190811.25024-7-igormtorrente@gmail.com
    8ba16485
vkms_writeback.c 4.67 KB