picom icon indicating copy to clipboard operation
picom copied to clipboard

Some window changes when unmapped are not applied correctly

Open anomiex opened this issue 3 years ago • 3 comments

Platform

Debian unstable amd64

GPU, drivers, and screen setup

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel (0x8086)
    Device: Mesa Intel(R) Xe Graphics (TGL GT2) (0x9a49)
    Version: 21.3.5
    Accelerated: yes
    Video memory: 3072MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.6
    Max compat profile version: 4.6
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.2
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Xe Graphics (TGL GT2)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 21.3.5
OpenGL core profile shading language version string: 4.60
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6 (Compatibility Profile) Mesa 21.3.5
OpenGL shading language version string: 4.60
OpenGL context flags: (none)
OpenGL profile mask: compatibility profile

OpenGL ES profile version string: OpenGL ES 3.2 Mesa 21.3.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

Video device is "Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)". X version is "X.Org X Server 1.21.1.3". Not sure what other information you want.

Environment

Window Maker, no desktop environment.

picom version

v9

Diagnostics

Version: v9

Extensions:

  • Shape: Yes
  • XRandR: Yes
  • Present: Present

Misc:

  • Use Overlay: Yes
  • Config file used: None

Drivers (inaccurate):

modesetting

Backend: glx

  • Driver vendors:
  • GLX: Mesa Project and SGI
  • GL: Intel
  • GL renderer: Mesa Intel(R) Xe Graphics (TGL GT2)
  • Accelerated: 1

Configuration:

No config file. I ran these tests using simply picom. I also observed the same behavior with picom --daemon --unredir-if-possible --blur-method=none --vsync.

Steps of reproduction

These reproduction steps make use of osd_cat from libxosd.

  1. Run (echo "XXXXXX"; sleep 1.2; echo "??????") | osd_cat -p bottom -A center --font '-*-fixed-*-r-*-*-50-*-*-*-*-*-*-*' -l 1 --delay=1

Expected behavior

It displays "XXXXXX" for a second, then after 0.2s displays "??????" for a second.

https://user-images.githubusercontent.com/1030580/154382519-8d5987e7-2d5f-4b3b-8f60-0a0dcd1dbec8.mp4

Current Behavior

It displays "XXXXXX" for a second, then after 0.2s displays some mangled graphics that look like "??????" masked with "XXXXXX" for a second.

https://user-images.githubusercontent.com/1030580/154382535-3ffdce70-543d-42af-90e8-203074450189.mp4

Stack trace

It does not crash.

Other details

git bisect points to a56d66b4f35d975276935305dc381dc070f39922 as the first bad commit.

anomiex avatar Feb 17 '22 01:02 anomiex

how does osd_cat work? is it based on the Shape extension? If you are able can you catpure a trace?

yshui avatar Feb 17 '22 12:02 yshui

I don't know how osd_cat works, but xtrace does report it's doing a SHAPE-Request.

xtrace excerpt
000:<:007d: 24: Request(56): ChangeGC gc=0x03e00005 values={foreground=0x00ffffff background=0x00000000 font=0x03e0000b}
000:<:007e: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=867 y=46 texts={delta=0 s='X'};
000:<:007f: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=898 y=46 texts={delta=0 s='X'};
000:<:0080: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=929 y=46 texts={delta=0 s='X'};
000:<:0081: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=960 y=46 texts={delta=0 s='X'};
000:<:0082: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=991 y=46 texts={delta=0 s='X'};
000:<:0083: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=1022 y=46 texts={delta=0 s='X'};
000:<:0084: 24: Request(56): ChangeGC gc=0x03e00004 values={foreground=0x00ff0000 background=0x00ffffff font=0x03e0000b}
000:<:0085: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=867 y=46 texts={delta=0 s='X'};
000:<:0086: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=898 y=46 texts={delta=0 s='X'};
000:<:0087: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=929 y=46 texts={delta=0 s='X'};
000:<:0088: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=960 y=46 texts={delta=0 s='X'};
000:<:0089: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=991 y=46 texts={delta=0 s='X'};
000:<:008a: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=1022 y=46 texts={delta=0 s='X'};
000:<:008b: 20: SHAPE-Request(129,2): Mask operation=Set(0x00) destination-kind=Bounding(0x00) destination-window=0x03e00001 x-offset=0 y-offset=0 source-bitmap=0x03e00009
000:<:008c: 16: Request(12): ConfigureWindow window=0x03e00001 values={stack-mode=Above(0x00)}
000:<:008d:  8: Request(8): MapWindow window=0x03e00001
000:<:008e: 28: Request(62): CopyArea src-drawable=0x03e0000a dst-drawable=0x03e00001 gc=0x03e00004 src-x=0 src-y=0 dst-x=0 dst-y=0 width=1920 height=56
000:>:008e: Event Expose(12) window=0x03e00001 x=867 y=12 width=183 height=34 count=0x0000
000:>:008e: Event Expose(12) window=0x03e00001 x=867 y=12 width=183 height=34 count=0x0000
000:<:008f: 28: Request(62): CopyArea src-drawable=0x03e0000a dst-drawable=0x03e00001 gc=0x03e00004 src-x=867 src-y=12 dst-x=867 dst-y=12 width=183 height=34
000:<:0090: 28: Request(62): CopyArea src-drawable=0x03e0000a dst-drawable=0x03e00001 gc=0x03e00004 src-x=867 src-y=12 dst-x=867 dst-y=12 width=183 height=34
000:<:0091:  8: Request(10): UnmapWindow window=0x03e00001
000:<:0092: 20: Request(70): PolyFillRectangle drawable=0x03e00009 gc=0x03e00006 rectangles={x=0 y=0 w=1920 h=56};
000:<:0093: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=867 y=46 texts={delta=0 s='?'};
000:<:0094: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=898 y=46 texts={delta=0 s='?'};
000:<:0095: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=929 y=46 texts={delta=0 s='?'};
000:<:0096: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=960 y=46 texts={delta=0 s='?'};
000:<:0097: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=991 y=46 texts={delta=0 s='?'};
000:<:0098: 20: Request(74): PolyText8 drawable=0x03e00009 gc=0x03e00005 x=1022 y=46 texts={delta=0 s='?'};
000:<:0099: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=867 y=46 texts={delta=0 s='?'};
000:<:009a: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=898 y=46 texts={delta=0 s='?'};
000:<:009b: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=929 y=46 texts={delta=0 s='?'};
000:<:009c: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=960 y=46 texts={delta=0 s='?'};
000:<:009d: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=991 y=46 texts={delta=0 s='?'};
000:<:009e: 20: Request(74): PolyText8 drawable=0x03e0000a gc=0x03e00004 x=1022 y=46 texts={delta=0 s='?'};
000:<:009f: 20: SHAPE-Request(129,2): Mask operation=Set(0x00) destination-kind=Bounding(0x00) destination-window=0x03e00001 x-offset=0 y-offset=0 source-bitmap=0x03e00009
000:<:00a0: 16: Request(12): ConfigureWindow window=0x03e00001 values={stack-mode=Above(0x00)}
000:<:00a1:  8: Request(8): MapWindow window=0x03e00001
000:<:00a2: 28: Request(62): CopyArea src-drawable=0x03e0000a dst-drawable=0x03e00001 gc=0x03e00004 src-x=0 src-y=0 dst-x=0 dst-y=0 width=1920 height=56
000:>:00a2: Event Expose(12) window=0x03e00001 x=870 y=12 width=180 height=34 count=0x0000
000:<:00a3: 28: Request(62): CopyArea src-drawable=0x03e0000a dst-drawable=0x03e00001 gc=0x03e00004 src-x=870 src-y=12 dst-x=870 dst-y=12 width=180 height=34
000:<:00a4:  8: Request(10): UnmapWindow window=0x03e00001

anomiex avatar Feb 17 '22 15:02 anomiex

I guess we probably didn't refresh the shape properly.

yshui avatar Feb 17 '22 16:02 yshui