vkd3d: Lower contention when spinlocking writers.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2020-12-02 12:57:58 +01:00
parent b85a345d48
commit adf0be5bf1
1 changed files with 4 additions and 3 deletions

View File

@ -44,9 +44,10 @@ static inline void rw_spinlock_release_read(spinlock_t *spinlock)
static inline void rw_spinlock_acquire_write(spinlock_t *spinlock)
{
while (vkd3d_atomic_uint32_compare_exchange(spinlock,
VKD3D_RW_SPINLOCK_IDLE, VKD3D_RW_SPINLOCK_WRITE,
vkd3d_memory_order_acquire, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE)
while (vkd3d_atomic_uint32_load_explicit(spinlock, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE ||
vkd3d_atomic_uint32_compare_exchange(spinlock,
VKD3D_RW_SPINLOCK_IDLE, VKD3D_RW_SPINLOCK_WRITE,
vkd3d_memory_order_acquire, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE)
{
#ifdef __SSE2__
_mm_pause();