Skip to content

Subsurfaces on layer-shell overlay shrink when extending beyond screen geometry #9117

Description

@CluelessCatBurger

Already reported ? *

  • I have searched the existing open and closed issues.

Regression?

I don't know, I started using Hyprland only recently

System Info and Hyprland Version

System/Version info
Hyprland 0.46.2 built from branch  at commit 0bd541f2fd902dbfa04c3ea2ccf679395e316887  (version: bump to 0.46.2).
Date: Thu Dec 19 19:26:47 2024
Tag: v0.46.2, commits: 5566
built against:
 aquamarine 0.7.1
 hyprlang 0.6.0
 hyprutils 0.3.3
 hyprcursor 0.1.11
 hyprgraphics 0.1.1


flags set:
debug


System Information:
System name: Linux
Node name: polosatyi
Release: 6.12.9-1-cachyos-bore
Version: #1 SMP PREEMPT_DYNAMIC Fri, 17 Jan 2025 01:15:12 +0000


GPU information: 
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] [10de:24dc] (rev a1) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64  565.77  Release Build  (archlinux-builder@polosatyi)  


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:
        unknown: not runtime

Description

Four days ago, I received a bug report (CluelessCatBurger/wl_shimeji#17) stating that some graphics in my project appear incorrectly when displayed near the screen edges. After testing, I found that when a wl_subsurface is attached to a layer-shell overlay (wlr-layer-shell protocol) and extends beyond the screen geometry on the positive x and y axes, it becomes squeezed. However, when the wl_subsurface extends beyond the screen geometry on the negative x-axis (-x), it is clipped as expected.

I believe this is a compositor bug because on my side, I don’t modify the rendered content after creation. I create wl_buffers on startup and do not alter them in any way. Even with wp_viewporter disabled, the issue persists.

Technical details of my project:
My project works by creating a layer-shell overlay with the following parameters:

  • An empty input region.
  • A fully transparent wl_shm-based buffer with the format ARGB8888, sized based on the last received zwlr_layer_surface_v1.configure() event.
  • Anchors set to: ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT.

After that, multiple subsurfaces are attached (typically around 128x128px in size). The positions of the subsurfaces can sometimes be negative (when part of the subsurface extends beyond the left edge of the screen) or near the right edge of the screen. A common scenario is when a subsurface is placed at x == screen_width - 64, meaning that half of the subsurface (128x128px buffer) extends beyond the screen geometry on the positive x-axis (x+), which triggers that bug.

Screenshots

Expected result (Observed when subsurface extends beyond the screen geometry on -x or -y)

Image

Subsurface rendered incorrectly (part of surface extends beyond screen geometry on +y)

Image

Full screenshot with both examples, incorrect rendering marked with red, correct with green

Image

How to reproduce

  1. Build wl_shimeji from https://github.com/CluelessCatBurger/wl_shimeji
  2. Use shimejictl import on Shimeji-EE instance or wl_shimeji pack (for example Shimeji.zip)
  3. Wait until mascot decides to climb right wall or grab mascot while it is on ground (do not move pointer, there is another bug that currently prevents dragging on Hyprland)
  4. When mascot is near right wall, or dragged near floor (both cases cause part of subsurface to be beyond the screen geometry on +x or +y) it is shrinks

To speed up process, you can use shimejictl config set framerate 120

Attach not paste

  • I understand that all text files must be attached, and not pasted directly. If not respected, this issue will likely get closed as spam

Checklist of files to include below

  • Hyprland config - hyprctl systeminfo -c (always include)
  • Crash report (always include in case of crash)
  • Video (always include in case of a visual bug)
  • Logs (might contain useful info such as errors)

Additional info & File uploads

Hyprland config: hyprconfig.txt
Video of bug:

wl_shimeji-hypr.mp4

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingstaleNot much going on

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions