Allocating Partial Render Buffer for RGB display

Display - RGB 480 x 800 - ST7701 display controller
CPU - ESP32-S3 with 8MB PSRAM
Display does not support hardware 180 deg. Rotation - So Software rotation is required.

We have initialized the RGB display, ESP-IDF 5.4, LVGL 9.2

We are getting the screens as needed, issue arises when transitioning from one screen to other, fadeout mode, 500mS.
We can see jerky movement of the screen elements and line artefacts.

Direct render mode works without any issue.
But as we need to rotate display by 180 degree in software, we resorted to partial render mode.

Attaching videos showing the screen issue and portion of the code allocating buffer.

We appreciate any guidance in achieving better display transitions effect.

    lv_init();
    lv_display_t *lv_display = lv_display_create(LCD_H_RES, LCD_V_RES);

    void *buf1 = NULL;
    void *buf2 = NULL;
    // Single buffer -  Partial update only - Allocate frame buffer in PSRAM
    buf1 = heap_caps_malloc(LCD_H_RES * 80 * sizeof(lv_color_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_DMA);
    assert(buf1);
    // Double buffer - Direct update - Allocate frame buffer in PSRAM
    //esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2);
    lv_display_set_buffers(lv_display, buf1, buf2, LCD_H_RES * 80 * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_PARTIAL);
    //lv_display_set_buffers(lv_display, buf1, buf2, LCD_H_RES * LCD_V_RES * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_DIRECT);

    lv_display_set_flush_cb(lv_display, (lv_display_flush_cb_t)my_flush_cb);

    // Display rotate 180 degrees - works only with Partial render mode
    esp_lcd_panel_mirror(panel_handle,true,true);

    lv_indev_t *pointer = lv_indev_create();
    lv_indev_set_type(pointer, LV_INDEV_TYPE_POINTER);
    lv_indev_set_read_cb(pointer, touchpad_read);

    ESP_LOGI(TAG, "Install LVGL tick timer");
    // Tick interface for LVGL (using esp_timer to generate 5ms periodic event)
    const esp_timer_create_args_t lvgl_tick_timer_args = {
        .callback = &example_increase_lvgl_tick,
        .dispatch_method = ESP_TIMER_TASK,
        .name = "lvgl_tick"};
    esp_timer_handle_t lvgl_tick_timer = NULL;
    ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer));
    ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_tick_timer, 5 * 1000));

    lvgl_mux = xSemaphoreCreateRecursiveMutex();
    assert(lvgl_mux);
    ESP_LOGI(TAG, "Create LVGL task");