This patch originally was in !93 but I decided to separate it, since it solves a different bug that the first part of that series.
Currently, in copy-prop, we may create nodes of different dimensions than the ones we are replacing, i.e. the assertions included in this patch fail for many tests.
Without the patch, the following assertion in `hlsl_sm4.c` fails for me
```c
/* Narrowing casts were already lowered. */
assert(src_type->dimx == dst_type->dimx);
```
for some tests in one of my branches, because narrowing casts end up appearing if the node is replaced with a node with more components. This error happens under quite complex conditions (involving casts and matrices) that I still try to narrow down.
The cause of this problem is that, for the generated swizzles, we are passing `count` instead of `instr_component_count`.
`count` is the number of components of the source deref (without
considering the swizzle), while `instr_component_count` is the actual
number of components of the instruction to be replaced.
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/96
Not completely sure if it's worth having for 8.0, but opening this to share the target I'm trying to reach.
--
v12: ntdll: Add a heap thread affinity and per-affinity bin group cache.
ntdll: Use atomics and lock-free list for bin groups.
ntdll: Implement Low Fragmentation Heap frontend.
ntdll: Split heap_resize_block into heap_resize_(block|large) helpers.
ntdll: Count allocations and automatically enable LFH.
ntdll: Increase heap block tail_size capacity to 16 bits.
ntdll: Implement HeapCompatibilityInformation.
ntdll: Fix HeapWalk with empty uncommitted consecutive subheaps.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1628