This goes atop !598 and !603.
--
v8: vkd3d-shader/ir: Introduce a simple control flow graph structurizer.
vkd3d-shader/ir: Handle PHI nodes when materializing SSA registers.
vkd3d-shader/ir: Materialize SSA registers to temporaries.
vkd3d-shader/spirv: Support bool TEMP registers.
vkd3d-shader/spirv: Move bool casting helpers above register loading helpers.
vkd3d-shader/spirv: Convert the swizzle according to the source bit width.
vkd3d-shader/dxil: Set the register before calling src_param_init_scalar().
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/607
With tests from !364, separated out from the HLSL changes there and updated.
It is apparently unnecessary to match the SM4/5 implementation, since the AMD Windows results differ. The RADV results are a bit wrong, but Proton uses the SPIR-V GLSL extension instructions too, and no workarounds have been implemented there.
--
v3: vkd3d-shader/spirv: Handle the ACOS, ASIN and ATAN instructions in spirv_compiler_emit_ext_glsl_instruction().
vkd3d-shader/dxil: Handle inverse trigonometric functions in sm6_parser_emit_dx_unary().
tests/shader-runner: Add tests for atan and atan2 trig intrinsics.
tests/shader-runner: Add tests for acos and asin trig intrinsics.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/602
Normally I am a strong proponent of adjusting implementations one small step at
a time, but this is a bit of an extreme case.
The current state of UrlCanonicalize() is a prototypical example of "spaghetti
code": the implementation has been repeatedly adjusted to fix a new discovered
edge case, without properly testing the scope of the new logic, with the effect
that the current logic is a scattered mess of conditions that interact in
unpredictable ways.
To be fair, the actual function is much more complicated than one would
anticipate, and the number of new weird edge cases I found while trying to flesh
out existing logic was rather exhausting.
I initially tried to "fix" the existing implementation one step at a time. After
racking up dozens of commits without an end in sight, though, and having to
waste time carefully unravelling the broken code in the right order so as to
avoid temporary failures, I decided instead to just fix everything at once,
effectively rewriting the function from scratch, and this proved to be much more
productive.
Hopefully the huge swath of new tests is enough to prove that this new
implementation really is correct, and has no more spaghetti than what Microsoft
made necessary.
--
v3: shlwapi/tests: Add many more tests for UrlCanonicalize().
kernelbase: Use scheme_is_opaque() in UrlIs().
kernelbase: Reimplement UrlCanonicalize().
https://gitlab.winehq.org/wine/wine/-/merge_requests/4954
Found while refactoring FFP code; no known application is affected.
--
v2: wined3d/glsl: Pass through the specular varying when SPECULARENABLE is FALSE.
wined3d/glsl: Always set WINED3D_SHADER_CONST_FFP_LIGHTS in FFP constant update masks.
d3d8/tests: Add more tests for SPECULARENABLE.
https://gitlab.winehq.org/wine/wine/-/merge_requests/4956