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).
--
v9: 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
Second part of !50.
--
v4: vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_scope.
vkd3d-shader/hlsl: Add field-level documentation to function structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_buffer.
vkd3d-shader/hlsl: Add documentation to small hlsl.h structs.
vkd3d-shader/hlsl: Add field-level documentation to struct hlsl_deref.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/61
SPIR-V doesn't support parallelisation in patch constant functions.
Merging into one phase allows generation of a single patch constant
function and normalises to the shader model 6 pattern.
--
v5: vkd3d-shader/spirv: Merge all shader IR fork and join phases into a single phase.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/60
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
v3: iphlpapi: Set Ipv4Enabled and Ipv6Enabled flags accordignly.
iphlpapi/tests: Test for Ipv4Enabled and Ipv6Enabled flags.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
v2: iphlpapi: Set Ipv4Enabled and Ipv6Enabled flags accordignly.
iphlpapi/tests: Test for Ipv4Enabled and Ipv6Enabled flags.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985
This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1985