https://bugs.kde.org/show_bug.cgi?id=522991

            Bug ID: 522991
           Summary: Degraded performance on Nvidia when rendering is done
                    on 2nd HDMI monitor
    Classification: Plasma
           Product: kwin
      Version First 6.7.2
       Reported In:
          Platform: Fedora RPMs
                OS: Linux
            Status: REPORTED
          Severity: major
          Priority: NOR
         Component: performance
          Assignee: [email protected]
          Reporter: [email protected]
  Target Milestone: ---

DESCRIPTION
After recently upgrading from plasma 6.6.4 to 6.7.x (6.7.0 - 6.7.2) all
WINE/Proton games became insanely laggy, not just stutters, but massive FPS
drops from 60 FPS to 40-30 FPS for many seconds.
Forcing WINE's native wayland driver also didn't help.

Outside of WINE, `vkcube` and `glxgears` show a huge FPS drop for many seconds
if their window is rendering on my second HDMI monitor (Nvidia 3070 laptop), if
instead their window was moved to the internal monitor (Intel internal GFX)
then FPS stays at 60 stable without any drops.

Note that this was not a problem on the old Plasma stack v6.6.4, newly
introduced in latest v6.7.2.

STEPS TO REPRODUCE
* Ensure entire Plasma stack v6.7.2 is installed
* On a laptop with Intel (iGFX) / Nvidia (dGFX) hybrid graphics, connect an
HDMI monitor to the Nvidia port
* Launch any WINE/Proton game and turn on VSync, or launch `vkcube` or
`glxgears` 
* (Optional) If you have controllable cooler fans, ensure they are running at
max speeds to factor-out power throttling possibilty due to overheating
* Launch GPU and CPU monitoring tools
* Keep everything running for 2 hours

OBSERVED RESULT
Massive FPS drop for many seconds

EXPECTED RESULT
Rendering a Vulkan/OpenGL window on the Nvidia external GPU should have the
same performance if the app window is rendering on either the internal or
external monitor.

I don't know much honestly about graphics rendering, but a somewhat infamous
problem on Nvidia cards is copying the rendering buffer, I assume something
related to that logic was refactored in the new update which triggered this
behavior.

SOFTWARE/OS VERSIONS
```shell
$ kinfo

Operating System: Fedora Linux 44
KDE Plasma Version: 6.7.2
KDE Frameworks Version: 6.28.0
Qt Version: 6.11.1
Kernel Version: 7.1.3-200.fc44.x86_64 (64-bit)
Graphics Platform: Wayland
Processors: 20 × 12th Gen Intel® Core™ i9-12900H
Memory: 32 GB of RAM (31.0 GB usable)
Graphics Processor 1: Intel® Iris® Xe Graphics
Graphics Processor 2: NVIDIA GeForce RTX 3070 Ti Laptop GPU
```

```shell
$ kscreen-doctor -o

Output: 1 HDMI-A-1 dd3adedc-57ed-43c4-986d-ec4f8113ba91
        enabled
        connected
        priority 1
        HDMI
        replication source:0
        Modes:  1:[email protected]*!  2:[email protected]  3:[email protected] 
4:[email protected]  5:[email protected]  6:[email protected]  7:[email protected] 
8:[email protected]  9:[email protected]  10:[email protected]  11:[email protected] 
12:[email protected]  13:[email protected]  14:[email protected]  15:[email protected] 
16:[email protected]  17:[email protected]  18:[email protected]  19:[email protected] 
20:[email protected]  21:[email protected]  22:[email protected]  23:[email protected] 
24:[email protected]  25:[email protected]  26:[email protected]  27:[email protected] 
28:[email protected] 
        Custom modes: None
        Geometry: 0,0 1920x1080
        Scale: 1
        Rotation: 1
        Overscan: 0
        Vrr: incapable
        RgbRange: unknown
        HDR: incapable
        Wide Color Gamut: incapable
        ICC profile: none
        Color profile source: sRGB
        Color power preference: prefer accuracy
        Brightness control: supported, set to 30% and dimming to 100%
        DDC/CI: allowed
        Color resolution: unknown
        Allow EDR: unsupported
        Sharpness control: unsupported
        Automatic brightness: unsupported
        Auto Rotate Policy: incapable
        Adaptive backlight modulation: unsupported
Output: 2 eDP-1 6b90206c-8235-4918-a215-c8a06beabafd
        enabled
        connected
        priority 2
        Panel
        replication source:0
        Modes:  29:[email protected]!  30:[email protected]*  31:[email protected] 
32:[email protected]  33:[email protected]  34:[email protected]  35:[email protected] 
36:[email protected]  37:[email protected]  38:[email protected]  39:[email protected] 
40:[email protected]  41:[email protected]  42:[email protected] 
        Custom modes: None
        Geometry: 1920,132 1536x864
        Scale: 1.25
        Rotation: 1
        Overscan: 0
        Vrr: Never
        RgbRange: Full
        HDR: incapable
        Wide Color Gamut: incapable
        ICC profile: none
        Color profile source: sRGB
        Color power preference: prefer efficiency and performance
        Brightness control: supported, set to 100% and dimming to 100%
        Color resolution: 8 bits per color, range: [6; 12] bits per color
        Allow EDR: never
        Sharpness control: unsupported
        Automatic brightness: unsupported
        Auto Rotate Policy: incapable
        Adaptive backlight modulation: unsupported
```

```shell
$ vulkaninfo --summary
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Received return
code -9 from call to vkCreateInstance in ICD /usr/lib64/libvulkan_dzn.so.
Skipping this driver.
WARNING: [Loader Message] Code 0 : ICD for selected physical device does not
export vkGetPhysicalDeviceDisplayPlanePropertiesKHR!
WARNING: [Loader Message] Code 0 : ICD for selected physical device does not
export vkGetPhysicalDeviceDisplayPropertiesKHR!
==========
VULKANINFO
==========

Vulkan Instance Version: 1.4.341


Instance Extensions: count = 27
-------------------------------
VK_EXT_acquire_drm_display             : extension revision 1
VK_EXT_acquire_xlib_display            : extension revision 1
VK_EXT_debug_report                    : extension revision 10
VK_EXT_debug_utils                     : extension revision 2
VK_EXT_direct_mode_display             : extension revision 1
VK_EXT_display_surface_counter         : extension revision 1
VK_EXT_headless_surface                : extension revision 1
VK_EXT_layer_settings                  : extension revision 2
VK_EXT_surface_maintenance1            : extension revision 1
VK_EXT_swapchain_colorspace            : extension revision 5
VK_KHR_device_group_creation           : extension revision 1
VK_KHR_display                         : extension revision 23
VK_KHR_external_fence_capabilities     : extension revision 1
VK_KHR_external_memory_capabilities    : extension revision 1
VK_KHR_external_semaphore_capabilities : extension revision 1
VK_KHR_get_display_properties2         : extension revision 1
VK_KHR_get_physical_device_properties2 : extension revision 2
VK_KHR_get_surface_capabilities2       : extension revision 1
VK_KHR_portability_enumeration         : extension revision 1
VK_KHR_surface                         : extension revision 25
VK_KHR_surface_maintenance1            : extension revision 1
VK_KHR_surface_protected_capabilities  : extension revision 1
VK_KHR_wayland_surface                 : extension revision 6
VK_KHR_xcb_surface                     : extension revision 6
VK_KHR_xlib_surface                    : extension revision 6
VK_LUNARG_direct_driver_loading        : extension revision 1
VK_NV_display_stereo                   : extension revision 1

Instance Layers: count = 11
---------------------------
VK_LAYER_FROG_gamescope_wsi_x86_64 Gamescope WSI (XWayland Bypass) Layer
(x86_64) 1.3.221  version 1
VK_LAYER_MANGOHUD_overlay_x86      Vulkan Hud Overlay                          
  1.3.0    version 1
VK_LAYER_MANGOHUD_overlay_x86_64   Vulkan Hud Overlay                          
  1.3.0    version 1
VK_LAYER_MESA_device_select        Linux device selection layer                
  1.4.303  version 1
VK_LAYER_NV_optimus                NVIDIA Optimus layer                        
  1.4.329  version 1
VK_LAYER_NV_present                NVIDIA Presentation Layer                   
  1.4.329  version 1
VK_LAYER_TORKEL104_libstrangle     Libstrangle framerate limiter               
  1.1.125  version 1
VK_LAYER_VALVE_steam_fossilize_32  Steam Pipeline Caching Layer                
  1.3.207  version 1
VK_LAYER_VALVE_steam_fossilize_64  Steam Pipeline Caching Layer                
  1.3.207  version 1
VK_LAYER_VALVE_steam_overlay_32    Steam Overlay Layer                         
  1.3.207  version 1
VK_LAYER_VALVE_steam_overlay_64    Steam Overlay Layer                         
  1.3.207  version 1

Devices:
========
GPU0:
        apiVersion         = 1.4.354
        driverVersion      = 26.1.4
        vendorID           = 0x8086
        deviceID           = 0x46a6
        deviceType         = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
        deviceName         = Intel(R) Iris(R) Xe Graphics (ADL GT2)
        driverID           = DRIVER_ID_INTEL_OPEN_SOURCE_MESA
        driverName         = Intel open-source Mesa driver
        driverInfo         = Mesa 26.1.4
        conformanceVersion = 1.4.0.0
        deviceUUID         = 8680a646-0c00-0000-0002-000000000000
        driverUUID         = 657acdbc-4bf8-dc79-9688-a9b96f2a07ef
GPU1:
        apiVersion         = 1.4.329
        driverVersion      = 595.80.0.0
        vendorID           = 0x10de
        deviceID           = 0x24a0
        deviceType         = PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        deviceName         = NVIDIA GeForce RTX 3070 Ti Laptop GPU
        driverID           = DRIVER_ID_NVIDIA_PROPRIETARY
        driverName         = NVIDIA
        driverInfo         = 595.80
        conformanceVersion = 1.4.3.3
        deviceUUID         = 01c67e3d-9400-5015-c93c-282a6cc1ffc9
        driverUUID         = 8011cb9e-1c51-52dc-bd8a-1ca78f7561ec
GPU2:
        apiVersion         = 1.4.354
        driverVersion      = 26.1.4
        vendorID           = 0x10005
        deviceID           = 0x0000
        deviceType         = PHYSICAL_DEVICE_TYPE_CPU
        deviceName         = llvmpipe (LLVM 22.1.8, 256 bits)
        driverID           = DRIVER_ID_MESA_LLVMPIPE
        driverName         = llvmpipe
        driverInfo         = Mesa 26.1.4 (LLVM 22.1.8)
        conformanceVersion = 1.3.1.1
        deviceUUID         = 6d657361-3236-2e31-2e34-000000000000
        driverUUID         = 6c6c766d-7069-7065-5555-494400000000

```


ADDITIONAL INFORMATION
Please check the attached video link:
https://vimeo.com/manage/videos/1209318472
OBS is set to software rendering, I captured what it looks like when the
`vkcube`  window was rendering on the HDMI external monitor, and halfway
switched its window to the internal monitor, to show the vast difference.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to