| // Copyright 2017 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "gpu/command_buffer/client/command_buffer_direct_locked.h" | |
| namespace gpu { | |
| void CommandBufferDirectLocked::Flush(int32_t put_offset) { | |
| flush_count_++; | |
| client_put_offset_ = put_offset; | |
| if (!flush_locked_) | |
| DoFlush(); | |
| } | |
| CommandBuffer::State CommandBufferDirectLocked::WaitForTokenInRange( | |
| int32_t start, | |
| int32_t end) { | |
| State state = GetLastState(); | |
| if (state.error != error::kNoError || InRange(start, end, state.token)) { | |
| return state; | |
| } else { | |
| DoFlush(); | |
| return CommandBufferDirect::WaitForTokenInRange(start, end); | |
| } | |
| } | |
| CommandBuffer::State CommandBufferDirectLocked::WaitForGetOffsetInRange( | |
| uint32_t set_get_buffer_count, | |
| int32_t start, | |
| int32_t end) { | |
| State state = GetLastState(); | |
| if (state.error != error::kNoError || | |
| (InRange(start, end, state.get_offset) && | |
| (set_get_buffer_count == state.set_get_buffer_count))) { | |
| return state; | |
| } else { | |
| DoFlush(); | |
| return CommandBufferDirect::WaitForGetOffsetInRange(set_get_buffer_count, | |
| start, end); | |
| } | |
| } | |
| scoped_refptr<Buffer> CommandBufferDirectLocked::CreateTransferBuffer( | |
| size_t size, | |
| int32_t* id) { | |
| if (fail_create_transfer_buffer_) { | |
| *id = -1; | |
| return nullptr; | |
| } else { | |
| return CommandBufferDirect::CreateTransferBuffer(size, id); | |
| } | |
| } | |
| } // namespace gpu |