summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/common/command_buffer_shared.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/common/command_buffer_shared.h')
-rw-r--r--gpu/command_buffer/common/command_buffer_shared.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/gpu/command_buffer/common/command_buffer_shared.h b/gpu/command_buffer/common/command_buffer_shared.h
index 017a644..fafe767 100644
--- a/gpu/command_buffer/common/command_buffer_shared.h
+++ b/gpu/command_buffer/common/command_buffer_shared.h
@@ -30,16 +30,17 @@ public:
base::subtle::NoBarrier_Store(&reading_, 0);
base::subtle::NoBarrier_Store(&latest_, 0);
base::subtle::NoBarrier_Store(&slots_[0], 0);
- base::subtle::Acquire_Store(&slots_[1], 0);
+ base::subtle::Release_Store(&slots_[1], 0);
+ base::subtle::MemoryBarrier();
}
void Write(const T& state) {
int towrite = !base::subtle::Acquire_Load(&reading_);
int index = !base::subtle::Acquire_Load(&slots_[towrite]);
states_[towrite][index] = state;
+ base::subtle::Release_Store(&slots_[towrite], index);
+ base::subtle::Release_Store(&latest_, towrite);
base::subtle::MemoryBarrier();
- base::subtle::Acquire_Store(&slots_[towrite], index);
- base::subtle::Acquire_Store(&latest_, towrite);
}
// Attempt to update the state, updating only if the generation counter is
@@ -47,7 +48,8 @@ public:
void Read(T* state) {
base::subtle::MemoryBarrier();
int toread = !!base::subtle::Acquire_Load(&latest_);
- base::subtle::Acquire_Store(&reading_, toread);
+ base::subtle::Release_Store(&reading_, toread);
+ base::subtle::MemoryBarrier();
int index = !!base::subtle::Acquire_Load(&slots_[toread]);
if (states_[toread][index].generation - state->generation < 0x80000000U)
*state = states_[toread][index];