Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LayerSurface damage isn't handled properly #6830

Open
rs-pro0 opened this issue Jul 9, 2024 · 3 comments
Open

LayerSurface damage isn't handled properly #6830

rs-pro0 opened this issue Jul 9, 2024 · 3 comments
Labels
bug Something isn't working stale Not much going on

Comments

@rs-pro0
Copy link

rs-pro0 commented Jul 9, 2024

Regression?

No

System Info and Version

System/Version info
Hyprland, built from branch  at commit 918d8340afd652b011b937d29d5eea0be08467f5  (flake.lock: update).
Date: Tue Jun 25 12:06:02 2024
Tag: v0.41.2, commits: 4886

flags: (if any)


System Information:
System name: Linux
Node name: rostyslarchy
Release: 6.9.8-zen1-1-zen
Version: #1 ZEN SMP PREEMPT_DYNAMIC Fri, 05 Jul 2024 22:11:01 +0000


GPU information: 
0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-P Integrated Graphics Controller [8086:4626] (rev 0c) (prog-if 00 [VGA controller])
0000:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD107M [GeForce RTX 4060 Max-Q / Mobile] [10de:28e0] (rev a1) (prog-if 00 [VGA controller])


os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo


plugins:

======Config-Start======


Config File: /home/rostyslav/.config/hypr/hyprland.conf: Read Succeeded
#
# Please note not all available settings / options are set here.
# For a full list, see the wiki
#
#

# Nvidia stuff to use integrated gpu
env = WLR_DRM_DEVICES,$HOME/.config/hypr/card:/dev/dri/card0
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
#cursor = {
    #no_hardware_cursors = true
#}
env = WLR_NO_HARDWARE_CURSORS,1



# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=HDMI-A-1, 3840x2160@60, 0x0, 1.00
monitor=eDP-2, 2560x1600@240, 3840x0, 1.00


# See https://wiki.hyprland.org/Configuring/Keywords/ for more

# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox
exec-once = tmux setenv -g HYPRLAND_INSTANCE_SIGNATURE "$HYPRLAND_INSTANCE_SIGNATURE" 
exec-once = tmux setenv -g WAYLAND_DISPLAY "$WAYLAND_DISPLAY" 
exec-once = mako & ~/.azotebg & /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & eww daemon & eww open bar
exec-once = [workspace 1 silent] foot
exec-once = [workspace 2 silent] firefox
exec-once = [workspace 3 silent] flatpak run org.telegram.desktop
exec-once = [workspace 4 silent] pavucontrol
exec-once = [workspace 4 silent] blueman-manager

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# Some default env vars.
env = XCURSOR_SIZE,24

# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us,ua
    kb_variant =
    kb_model =
    kb_options = grp:alt_shift_toggle,caps:escape
    kb_rules =
    repeat_delay = 300
    repeat_rate = 40

    follow_mouse = 1

    touchpad {
        natural_scroll = no
    }

    tablet {

    }

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}

general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    gaps_in = 5
    gaps_out = 10
    border_size = 2
    col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.inactive_border = rgba(595959aa)

    layout = dwindle
}

decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    rounding = 10

    drop_shadow = yes
    shadow_range = 4
    shadow_render_power = 3
    col.shadow = rgba(1a1a1aee)
}

animations {
    enabled = yes

    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = myBezier, 0.05, 0.9, 0.1, 1.05

    animation = windows, 1, 0.001, myBezier
    animation = windowsOut, 1, 0.001, default, popin 80%
    animation = border, 1, 10, default
    animation = borderangle, 1, 8, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 0.5, default
}

dwindle {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = yes # you probably want this
}

master {
    # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
    # new_is_master = true
}

gestures {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    workspace_swipe = off
}

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
#device:epic-mouse-v1 {
#    sensitivity = -0.5
#}

# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more


# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER

# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, RETURN, exec, foot
bind = $mainMod SHIFT, Q, killactive, 
bind = $mainMod, M, exit, 
bind = $mainMod, E, exec, nautilus
bind = $mainMod, V, togglefloating, 
bind = $mainMod, F, fullscreen, 
bind = $mainMod, D, exec, fuzzel
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, S, togglesplit, # dwindle
bind = $mainMod, P, pin

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# Move focus with mainMod + vim keys
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10

bind = $mainMod SHIFT, H, movewindow, l
bind = $mainMod SHIFT, L, movewindow, r
bind = $mainMod SHIFT, K, movewindow, u
bind = $mainMod SHIFT, J, movewindow, d

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

bind = CTRL, F9, exec, XDG_CURRENT_DESKTOP=sway flameshot gui
# bind = CTRL, F9, exec, hyprshot -m region --clipboard-only
bind = $mainMod CTRL SHIFT, L, exec, ~/.config/hypr/scripts/lock.sh
bind = $mainMod ALT, L, exec, ~/.config/hypr/scripts/stealth_lock.sh

# Audio control
binde = , xf86audioraisevolume, exec, pamixer --increase 1
binde = , xf86audiolowervolume, exec, pamixer --decrease 1
binde = , xf86audiomicmute, exec, pamixer --default-source -t 
bind = , xf86audioplay, exec, playerctl play-pause
bind = , xf86audiopause, exec, playerctl play-pause
bind = , xf86audionext, exec, playerctl next
bind = , xf86audioprev, exec, playerctl previous

# Brightness
bind= , XF86MonBrightnessUp, exec, brillo -q -A 5
bind= , XF86MonBrightnessDown, exec, brillo -q -U 5



# lid syspend
bindl=,switch:on:Lid Switch, exec, ~/.config/hypr/scripts/lid.py

bind = ALT, 0, exec, hyprpicker -a

misc:vfr = true

# change power profile
bind = $mainMod, B, exec, ~/.config/hypr/scripts/switch_power_profile.py

workspace = 1,monitor:eDP-2
workspace = 2,monitor:eDP-2
workspace = 3,monitor:eDP-2
workspace = 4,monitor:eDP-2
workspace = 5,monitor:eDP-2

debug:damage_blink = 1

======Config-End========

Description

When committing WlSurface that is associated with LayerSurface, layer surface commits(

events.commit.emit();
) and when layer surface commits it damages whole surface(
g_pHyprRenderer->damageBox(&geomFixed);
), so you observe it damaging whole surface with damage blink.

How to reproduce

Damage some part of the surface associated with layer surface and then commit it.

Crash reports, logs, images, videos

No response

@rs-pro0 rs-pro0 added the bug Something isn't working label Jul 9, 2024
@vaxerski
Copy link
Member

likely should only damage entire if the size changed

MRs welcome

@rs-pro0
Copy link
Author

rs-pro0 commented Jul 13, 2024

So I tried disabling that damage to geomFixed and first of all when triggering markBlurDirtyForMonitor it looks like it damages whole surface, so I tried checking how it works without it. It sometimes works, but you have this artifacts pretty often

2024-07-14.00-25-23.mp4

Most of this is incorrect, I get some artifacts(they are similar to the ones in the video but on a much smaller scale), but that's probably an error in my app. So it works, when there are no windows in front of it, if there are it still damages everything.

@rs-pro0
Copy link
Author

rs-pro0 commented Jul 14, 2024

If blur m_mMonitorRenderResources[pMonitor].blurFBDirty is true, then preRender gets triggered and it damages whole monitor which is not needed(I removed that line and it works just fine, but performance still sucks compared to case without blur, so there is some other issue).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working stale Not much going on
Projects
None yet
Development

No branches or pull requests

2 participants