If a hlsl_ir_load loads a variable whose components are stored from different
instructions, copy propagation doesn't replace it.
But if all these instructions are constants (which currently is the case
for value constructors), the load can be replaced with a constant value, which
is what the first patch of this series does.
For instance, this shader:
```
sampler s;
Texture2D t;
float4 main() : sv_target
{
return t.Gather(s, float2(0.6, 0.6), int2(0, 0));
}
```
results in the following IR before applying the patch:
```
float | 6.00000024e-01
float | 6.00000024e-01
uint | 0
| = (<constructor-2>[@4].x @2)
uint | 1
| = (<constructor-2>[@6].x @3)
float2 | <constructor-2>
int | 0
int | 0
uint | 0
| = (<constructor-5>[@11].x @9)
uint | 1
| = (<constructor-5>[@13].x @10)
int2 | <constructor-5>
float4 | gather_red(resource = t, sampler = s, coords = @8, offset = @15)
| return
| = (<output-sv_target0> @16)
```
and this IR afterwards:
```
float2 | {6.00000024e-01 6.00000024e-01 }
int2 | {0 0 }
float4 | gather_red(resource = t, sampler = s, coords = @2, offset = @3)
| return
| = (<output-sv_target0> @4)
```
This is required to write texel_offsets as aoffimmi modifiers in the sm4 backend, since it expects the texel_offset arguments to be hlsl_ir_constant.
This series also:
* Allows Gather() methods to use aoffimmi modifiers instead of an additional source register (which is the only way allowed for shader model 4.1), when possible.
* Adds support to texel_offsets in the Load() method via aoffimmi modifiers (the only allowed method).
--
v10: vkd3d-shader/hlsl: Fold swizzle chains.
vkd3d-shader/hlsl: Apply copy propagation to swizzled loads.
vkd3d-shader/hlsl: Use aoffimmis when writing gather resource loads.
vkd3d-shader/hlsl: Replace loads with constants in copy prop.
vkd3d-shader/hlsl: Synthesize the swizzle and replace the instruction inside of copy_propagation_compute_replacement().
vkd3d-shader/hlsl: Call copy_propagation_get_value() directly in copy_propagation_transform_object_load().
vkd3d-shader/hlsl: Add some swizzle manipulation definitions.
tests: Test constant propagation through swizzles.
vkd3d-shader/hlsl: Support offset argument for the texture Load() method.
tests: Test offset argument for the texture Load() method.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/51
It's bound to debugger's CPU not debuggee's.
We should eventually get rid of dbghelp_current_cpu, but
but that can wait after 8.0 (mainly in minidump.c).
Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1999
## Summary
Tests for UrlFixupW and semi stub function implementaion.
## Test results
- Tests are 100% ok on my local WIN 10 pc. Wine test bot seems to be okay too.
- Wine tests on debian machine
| function type | result |
| ------ | ------ |
| stub | 0020:url: 69802 tests executed (0 marked as todo, 0 as flaky, **200** failures), 0 skipped. |
| semi stub| 0020:url: 69802 tests executed (0 marked as todo, 0 as flaky, **100** failures), 0 skipped. |
## Todos
For follow up merge request(s).
- [ ] Add more tests for priority investigation, who url scheme fix up is working on windows.
- [ ] Implement missing parts of fix up.
## Conclusion
Semi stub implementation is an improvement to the existing solution. A grep showed that wine internals do not call this function, therefore it should not introduce any new bugs. Windows applications using/relying on the function should now work better, if not they may reveal already existing bugs.
--
v4: shlwapi: fixup leading and trailing typos in UrlFixupW
shlwapi: check for colon in UrlFixupW
kernelbase: Restructure UrlFixupW()
shlwapi/tests: Add tests for UrlFixupW.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1825
On Sun Jan 22 22:25:54 2023 +0000, Thomas Csovcsity wrote:
> Sure, that it can be done. Other parts of the code use goto too. I also
> used already goto in kernel and drivers. ATM i am not able to think
> about a function which would make it easier. If i use early return from
> function, i think it makes no difference, but i plan to use a helper
> function to keep UrlFixup shorter. Any suggestion about the structure is
> well come, because i think i am blind to other and better ways.
It's not cargo-cult avoidance of goto (although in general I think there are only a few situations where it's the most idiomatic choice), but I think using a helper is a lot more readable in patterns like this.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1825#note_21345
On Sun Jan 22 22:25:54 2023 +0000, Thomas Csovcsity wrote:
> source does not have wmemcpy and wcsncpy is defined as:
> `#define wcsncpy(d,s,n) error do_not_use_wcsncpy_use_lstrcpynW_or_memcpy_instead`
In this case you'd write "memcpy(save_str, url_scheme[pos], (len + 1) * sizeof(WCHAR))".
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1825#note_21344
On Sun Dec 18 23:32:22 2022 +0000, Zebediah Figura wrote:
> We use WCHAR, not wchar_t.
> It'd also be nice to use a consistent style for all of variable names in
> this function (wrt snake case vs camel case). In new code I think we
> prefer snake case.
Okay
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1825#note_21342