include: _InterlockedExchangePointer and _InterlockedCompareExchangePointer are intrinsics in x86 msvc.
I fixed this issue in ad05f33d67, but a40973f20 regressed this again. I was carrying a
patch for quite a while, feeling dejavu.
The msvc ver of 1900 is taken from Boost's interlocked.hpp, which matches MSVC 2015
(toolset version v140). Boost has a comment that claims that in msvc 2012 those
functions were defined in intrin.h, but those defines are broken with Microsoft's
winnt.h.
--
v2: include: x86 msvc has _InterlockedExchangePointer and _InterlockedCompareExchangePointer
https://gitlab.winehq.org/wine/wine/-/merge_requests/2591
Currently, the free list consists of a "small list" for sizes below 256,
which are linearly spaced, and a "large list" which is manually split
into a few chunks.
This patch replaces it with a single log-linear policy, while expanding
the range the large list covers.
The old implementation had issues when a lot of large allocations
happened. In this case, all the allocations went in the last catch-all
bucket in the "large list", and what happens is:
1. The linked list grew in size over time, causing searching cost to
skyrocket.
2. With the first-fit allocation policy, fragmentation was also making
the problem worse.
The new bucketing covers the entire range up until we start allocating
large blocks, which will not enter the free list. It also makes the
allocation policy closer to best-fit (although not exactly), reducing
fragmentation.
The increase in number of free lists does incur some cost when it needs
to be skipped over, but the improvement in allocation performance
outweighs it.
For future work, these ideas (mostly from glibc) might or might not
benefit performance:
- Use an exact best-fit allocation policy.
- Add a bitmap for freelist, allowing empty lists to be skipped with a
single bit scan.
Signed-off-by: Tatsuyuki Ishi <ishitatsuyuki(a)gmail.com>
--
v2: ntdll: Use log-linear bucketing for free lists.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2622
Needed for mingw Firefox build.
The WIDL error points to the wrong function, specifically the one after it.
include/windows.ui.composition.interop.idl:35:63: error: parameter 'swapchain' of function 'CreateCompositionSurfaceForHandle' cannot derive from void *
HRESULT CreateCompositionSurfaceForSwapChain([in] IUnknown *swapchain, [out, retval] ICompositionSurface **result);
^
make[1]: *** [Makefile:163749: include/windows.ui.composition.interop.h] Error 1
--
v2: include: Add windows.ui.composition.interop.idl file.
widl: Add support for WinRT HANDLE parameter type.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2620
To simplify SM 6 support, insert a control point id relative address where needed, and declare control point phase inputs where missing.
--
v4: vkd3d-shader/ir: Insert hull shader control point input declarations if no control point phase is defined.
vkd3d-shader/ir: Normalise control point phase output registers to include the control point id.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/141
To simplify SM 6 support, insert a control point id relative address where needed, and declare control point phase inputs where missing.
--
v3: vkd3d-shader/ir: Insert hull shader control point input declarations if no control point phase is defined.
vkd3d-shader/ir: Normalise control point phase output registers to include the control point id.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/141
To simplify SM 6 support, insert a control point id relative address where needed, and declare control point phase inputs where missing.
--
v2: vkd3d-shader/ir: Insert hull shader control point input declarations if no control point phase is defined.
vkd3d-shader/ir: Normalise control point phase output registers to include the control point id.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/141
--
v5: vkd3d: Pass an offset and size to d3d12_heap_unmap() in d3d12_resource_WriteToSubresource().
vkd3d: Call vkFlushMappedMemoryRanges() when unmapping of a heap is requested.
vkd3d: Pass an offset and size to d3d12_heap_map() in d3d12_resource_ReadFromSubresource().
vkd3d: Call vkInvalidateMappedMemoryRanges() when a mapping is requested on a heap.
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/126