winit: winit 0.26.1: assertion failed: validate_scale_factor(scale_factor)

Heya, I’m running X11 on Kubuntu 21.10. While trying Bevy, which depends on Winit 0.26.1, I got the following problem:

     Running `/home/ngirard/sandboxes/rust/./target/debug/examples/breakout`
2022-01-23T20:17:11.323894Z  INFO winit::platform_impl::platform::x11::window: Guessed window scale factor: 0    
thread 'main' panicked at 'assertion failed: validate_scale_factor(scale_factor)', /home/ngirard/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.26.1/src/dpi.rs:351:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

After modifying this debugging message from

info!("Guessed window scale factor: {}", scale_factor);

to

info!("Guessed window scale factor: {}; guessed_monitor: {:#?}", scale_factor, guessed_monitor);

and recompiling, I’m getting

this
2022-01-23T21:03:12.904029Z  INFO winit::platform_impl::platform::x11::window: Guessed window scale factor: 0; guessed_monitor: MonitorHandle {
    id: 65,
    name: "HDMI-1",
    dimensions: (
        1920,
        1080,
    ),
    position: (
        0,
        0,
    ),
    primary: true,
    scale_factor: 0.0,
    rect: AaRect {
        x: 0,
        y: 0,
        width: 1920,
        height: 1080,
    },
    video_modes: [
        VideoMode {
            size: (
                1024,
                768,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 83,
            monitor: None,
        },
        VideoMode {
            size: (
                800,
                600,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 98,
            monitor: None,
        },
        VideoMode {
            size: (
                640,
                480,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 113,
            monitor: None,
        },
        VideoMode {
            size: (
                1280,
                1024,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 141,
            monitor: None,
        },
        VideoMode {
            size: (
                1920,
                1080,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 148,
            monitor: None,
        },
        VideoMode {
            size: (
                1920,
                1080,
            ),
            bit_depth: 24,
            refresh_rate: 50,
            native_mode: 149,
            monitor: None,
        },
        VideoMode {
            size: (
                1920,
                1080,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 150,
            monitor: None,
        },
        VideoMode {
            size: (
                1680,
                1050,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 151,
            monitor: None,
        },
        VideoMode {
            size: (
                1600,
                900,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 152,
            monitor: None,
        },
        VideoMode {
            size: (
                1440,
                900,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 153,
            monitor: None,
        },
        VideoMode {
            size: (
                1280,
                800,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 154,
            monitor: None,
        },
        VideoMode {
            size: (
                1280,
                720,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 155,
            monitor: None,
        },
        VideoMode {
            size: (
                1280,
                720,
            ),
            bit_depth: 24,
            refresh_rate: 50,
            native_mode: 156,
            monitor: None,
        },
        VideoMode {
            size: (
                1280,
                720,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 157,
            monitor: None,
        },
        VideoMode {
            size: (
                720,
                576,
            ),
            bit_depth: 24,
            refresh_rate: 50,
            native_mode: 158,
            monitor: None,
        },
        VideoMode {
            size: (
                720,
                480,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 159,
            monitor: None,
        },
        VideoMode {
            size: (
                720,
                480,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 160,
            monitor: None,
        },
        VideoMode {
            size: (
                640,
                480,
            ),
            bit_depth: 24,
            refresh_rate: 60,
            native_mode: 161,
            monitor: None,
        },
    ],
}     

so guessed_monitor seems to be correct except for the scale factor.

Heres' the (partial) output of `xdpyinfo`:
name of display:    :0
version number:    11.0
vendor string:    The X.Org Foundation
vendor release number:    12013000
X.Org version: 1.20.13
maximum request size:  16777212 bytes
motion buffer size:  256
bitmap unit, bit order, padding:    32, LSBFirst, 32
image byte order:    LSBFirst
number of supported pixmap formats:    7
supported pixmap formats:
    depth 1, bits_per_pixel 1, scanline_pad 32
    depth 4, bits_per_pixel 8, scanline_pad 32
    depth 8, bits_per_pixel 8, scanline_pad 32
    depth 15, bits_per_pixel 16, scanline_pad 32
    depth 16, bits_per_pixel 16, scanline_pad 32
    depth 24, bits_per_pixel 32, scanline_pad 32
    depth 32, bits_per_pixel 32, scanline_pad 32
keycode range:    minimum 8, maximum 255
focus:  window 0x9600007, revert to PointerRoot
number of extensions:    28
    BIG-REQUESTS
    Composite
    DAMAGE
    DOUBLE-BUFFER
    DPMS
    DRI2
    DRI3
    GLX
    Generic Event Extension
    MIT-SCREEN-SAVER
    MIT-SHM
    Present
    RANDR
    RECORD
    RENDER
    SECURITY
    SHAPE
    SYNC
    X-Resource
    XC-MISC
    XFIXES
    XFree86-DGA
    XFree86-VidModeExtension
    XINERAMA
    XInputExtension
    XKEYBOARD
    XTEST
    XVideo
default screen number:    0
number of screens:    1

screen #0:
  dimensions:    3199x1080 pixels (844x285 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x17c
  depth of root window:    24 planes
  number of colormaps:    minimum 1, maximum 1
  default colormap:    0x20
  default number of colormap cells:    256
  preallocated pixels:    black 0, white 16777215
  options:    backing-store WHEN MAPPED, save-unders NO
  largest cursor:    256x256
  current input event mask:    0xfa8033
    KeyPressMask             KeyReleaseMask           EnterWindowMask          
    LeaveWindowMask          ExposureMask             StructureNotifyMask      
    SubstructureNotifyMask   SubstructureRedirectMask FocusChangeMask          
    PropertyChangeMask       ColormapChangeMask       
  number of visuals:    90
  default visual id:  0x21
  visual:
    visual id:    0x21
    class:    TrueColor
    depth:    24 planes
    available colormap entries:    256 per subfield
    red, green, blue masks:    0xff0000, 0xff00, 0xff
    significant bits in color specification:    8 bits
    (...)

Any thoughts ? Thanks !

About this issue

  • Original URL
  • State: open
  • Created 2 years ago
  • Comments: 19 (8 by maintainers)

Most upvoted comments

You could try setting WINIT_X11_SCALE_FACTOR=randr to get winit to ignore Xft.dpi.