vkd3d: Lower contention when spinlocking writers.
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
b85a345d48
commit
adf0be5bf1
|
@ -44,9 +44,10 @@ static inline void rw_spinlock_release_read(spinlock_t *spinlock)
|
||||||
|
|
||||||
static inline void rw_spinlock_acquire_write(spinlock_t *spinlock)
|
static inline void rw_spinlock_acquire_write(spinlock_t *spinlock)
|
||||||
{
|
{
|
||||||
while (vkd3d_atomic_uint32_compare_exchange(spinlock,
|
while (vkd3d_atomic_uint32_load_explicit(spinlock, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE ||
|
||||||
VKD3D_RW_SPINLOCK_IDLE, VKD3D_RW_SPINLOCK_WRITE,
|
vkd3d_atomic_uint32_compare_exchange(spinlock,
|
||||||
vkd3d_memory_order_acquire, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE)
|
VKD3D_RW_SPINLOCK_IDLE, VKD3D_RW_SPINLOCK_WRITE,
|
||||||
|
vkd3d_memory_order_acquire, vkd3d_memory_order_relaxed) != VKD3D_RW_SPINLOCK_IDLE)
|
||||||
{
|
{
|
||||||
#ifdef __SSE2__
|
#ifdef __SSE2__
|
||||||
_mm_pause();
|
_mm_pause();
|
||||||
|
|
Loading…
Reference in New Issue