This MR improves driver support for scaled HiDPI displays, by giving the application access to the full native resolution of the displays, rather than the logical resolution which is the Wayland default for client ignores scale hints. The application (and/or user through Wine settings) can then control the scale it renders at.
If the compositor doesn't support the required extensions to support application scaling, we fall back to compositor scaling. Note that compositor scaling may be sometimes desirable anyway, so in an upcoming MR I will introduce a driver registry option to force it if needed.
Here is how things look with the various options on a 2x scaled output:
1. Application scaling at 96dpi (i.e, 1x scaling)

2. Application scaling at 192dpi (i.e., 2x scaling)

3. Compositor scaling 2x (with app scaling at 1x)

Thanks!
--
v2: winewayland.drv: Ignore spurious size hints.
winewayland.drv: Present cursors with the correct scale.
winewayland.drv: Refactor cursor code to prepare for scaling support.
winewayland.drv: Present surfaces with the correct scale.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4203
First part of the continuation of the implementation of non-constant offset dereferences (a.k.a. relative addressing) for SM4, now that we use vsir registers in tpf.c.
As a quick recap: while parsing HLSL we are expressing derefs as paths, and then we are lowering these paths into a single offset node (which is closer to the bytecode) using the replace_deref_path_with_offset() pass, right before register allocation.
This first part of the series splits this offset node into 2 parts:
- A constant uint, which will be called hlsl_deref.offset_const.
- A non-hlsl_ir_constant offset node that will only be present when we need relative addressing, that we will end up calling hlsl_deref.offset_rel.
Both these fields will be analog to the ones used in vsir register indexes, vkd3d_shader_register_index.rel_addr and vkd3d_shader_register_index.offset respectively, which is something we need for the second part of this series.
The following patches are in my [nonconst-offsets-8](https://gitlab.winehq.org/fcasas/vkd3d/-/commits/noncon… branch, if something is not clear in this series, it may be worth skimming through them.
Supersedes !229.
--
v5: vkd3d-shader/tpf: Declare indexable temps.
vkd3d-shader/hlsl: Mark vars that require non-constant dereferences.
vkd3d-shader/hlsl: Rename hlsl_deref.offset to hlsl_deref.rel_offset.
vkd3d-shader/hlsl: Absorb hlsl_ir_constant deref offsets into const_offset.
vkd3d-shader/hlsl: Express deref->offset in whole registers.
vkd3d-shader/hlsl: Split deref-offset into a node and a constant uint.
vkd3d-shader/hlsl: Introduce hlsl_deref_is_lowered() helper.
vkd3d-shader/hlsl: Clean-up instruction block for offset node creation.
tests: Test array indexing with multiple swizzles.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/396
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v25: vkd3d-shader/tpf: Write out 'switch' statements.
vkd3d-shader/hlsl: Add a pass to normalize switch cases blocks.
vkd3d-shader/hlsl: Add a pass to remove unreachable code.
vkd3d-shader/hlsl: Add copy propagation logic for switches.
vkd3d-shader/hlsl: Validate break/continue context.
vkd3d-shader/hlsl: Check for duplicate case statements.
vkd3d-shader/hlsl: Add initial support for parsing 'switch' statements.
tests: Add some tests for the 'switch' statements.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/361