In order to write conformance tests for widl we'll need to run midl.exe from the SDK against some tests IDL, and do the same with our own IDL parser implementation. This is going to be easier using some midl.exe program, which will import widl lexer and parser.
This MR is some cleanup in preparation for this, trying to reduce the amount of global state in widl, and make it possible to share only selected parts with midl.exe.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/570
--
v3: mshtml: Handle S_FALSE return values from IUri methods.
mshtml: Handle S_FALSE from IUri methods in the NSAPI interfaces.
mshtml: Handle S_FALSE from IUri methods when navigating.
mshtml: Don't navigate if GetDisplayUri failed.
mshtml: Handle S_FALSE from IUri methods when checking targetOrigin.
mshtml: Handle S_FALSE from IUri methods in Anchor Elements.
mshtml: Handle S_FALSE from IUri methods in localStorage and sessionStorage.
https://gitlab.winehq.org/wine/wine/-/merge_requests/683
The objective of this patch series is to converge to the correct argument count checks and offset parameter dimensions when parsing the Load, Sample, SampleLevel, Gather (and variants) methods, for the different texture types.
I made the following table to summarize the expected arguments and their dimensions:
![resource_methods_dims](/uploads/43511fe82e934c2542f6152f9134cb0e/resource_methods_dims.png)
Getting these required some extensive trial-and-error, because:
- Official documentation about the methods is spread in different pages and in a somewhat inconsistent manner.
- Automatic vector truncation, scalar broadcasting, and type conversion, make shaders that pass inexact types compile.
- clamp and status arguments (for tiled resources) are not present in fxc 9, and yet, they are part of ps_5_0 and vs_5_0.
- Some methods (Load() in particular) require the mipmap level as part of the location parameter (except for Multi-Sampled textures), while other don't.
For implementing new methods I recommend passing an invalid parameter count to them in fxc 10, so that it lists available overloads.
And to do this for each texture type.
--
v2: vkd3d-shader/hlsl: Add offset parameter to 'Load' method.
vkd3d-shader/hlsl: Properly check argument count in gather methods.
vkd3d-shader/hlsl: Properly check argument count in SampleLevel method.
vkd3d-shader/hlsl: Use proper dimensions on SampleLevel method offset parameter.
vkd3d-shader/hlsl: Properly check argument count in Sample method.
vkd3d-shader/hlsl: Use proper dimensions on gather methods offset parameter.
vkd3d-shader/hlsl: Use proper dimensions on Sample method offset parameter.
vkd3d-shader/hlsl: Parse the SampleLevel method.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/9
Copy propagation is translated to index paths, invalidation of variable components is made more precise.
This, together with checking for non-static object references (which are not allowed in HLSL) allows to set object register sizes back to zero without overlapping registers.
I also included implicit array initialization, since, if I remember correctly, what was holding it back was that structs/arrays with object components couldn't be represented with the correct register offsets.
After this, we have to decide if (and how to) move register allocation and register offset calculation to each shader model.
--
v3: vkd3d-shader/hlsl: Support initialization of implicit size arrays.
vkd3d-shader/hlsl: Set objects' register size back to 0.
vkd3d-shader/hlsl: Check for non-static object references.
vkd3d-shader/hlsl: Invalidate components more precisely in copy
vkd3d-shader/hlsl: Replace register offsets with index paths in copy
vkd3d-shader/hlsl: Print halfs in dump_ir_constant().
vkd3d-shader/hlsl: Skip implicit conversion if types are equal.
vkd3d-shader/hlsl: Set component count for objects to 1.
tests: Test object references.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/7
--
v2: mshtml: Handle S_FALSE return values from IUri methods.
mshtml: Handle S_FALSE from IUri methods in the NSAPI interfaces.
mshtml: Handle S_FALSE from IUri methods when navigating.
mshtml: Handle S_FALSE from IUri methods when checking targetOrigin.
mshtml: Handle S_FALSE from IUri methods in Anchor Elements.
mshtml: Handle S_FALSE from IUri methods in localStorage and sessionStorage.
https://gitlab.winehq.org/wine/wine/-/merge_requests/683
This MR has 2 purposes:
1. Get first 3 patches upstreamed.
2. Have the whole patch set to be reviewed to make sure I'm on the correct direction.
It means I'm just going to upstream first 3 patches. The remaining 2 patches are not going to be upstreamed for now. They are for reviewing purpose, to see if I am implementing them in a good way.
So, Nikolay, here are 2 questions:
1. Do first 3 patches (a test patch and 2 patches that implement transform graph) are good to be upstreamed?
2. Am I in a good way for implementing effect drawing?
Some notes:
d2d_transform_node struct is not implemented like d2d_brush, because there are user defined draw transforms. Users can have a custom struct, and implement ID2D1DrawTransform interface for that struct. So that in transform graph, we should rely on interface, not concrete struct implementation.
--
v4:
https://gitlab.winehq.org/wine/wine/-/merge_requests/635
For example, queueing a MF_SOURCE_READERF_ENDOFSTREAM response will set
a NULL sample. This fixes a regression introduced by commit
68fa3f673633c138596b86ad2ed1befcd0cc63c5.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/696