1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
gpu / command_buffer / client / command_buffer_direct_locked.cc [blame]
// Copyright 2017 The Chromium Authors
// 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(
uint32_t size,
int32_t* id,
uint32_t alignment,
TransferBufferAllocationOption option) {
if (fail_create_transfer_buffer_) {
*id = -1;
return nullptr;
} else {
return CommandBufferDirect::CreateTransferBuffer(size, id, alignment,
option);
}
}
} // namespace gpu