1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/service/command_buffer_direct.h"
6
7 #include "base/bind.h"
8 #include "base/callback_helpers.h"
9 #include "gpu/command_buffer/service/transfer_buffer_manager.h"
10
11 namespace gpu {
12
CommandBufferDirect()13 CommandBufferDirect::CommandBufferDirect() : service_(this, nullptr) {}
14
15 CommandBufferDirect::~CommandBufferDirect() = default;
16
GetLastState()17 CommandBuffer::State CommandBufferDirect::GetLastState() {
18 service_.UpdateState();
19 return service_.GetState();
20 }
21
WaitForTokenInRange(int32_t start,int32_t end)22 CommandBuffer::State CommandBufferDirect::WaitForTokenInRange(int32_t start,
23 int32_t end) {
24 State state = GetLastState();
25 DCHECK(state.error != error::kNoError || InRange(start, end, state.token));
26 return state;
27 }
28
WaitForGetOffsetInRange(uint32_t set_get_buffer_count,int32_t start,int32_t end)29 CommandBuffer::State CommandBufferDirect::WaitForGetOffsetInRange(
30 uint32_t set_get_buffer_count,
31 int32_t start,
32 int32_t end) {
33 State state = GetLastState();
34 DCHECK(state.error != error::kNoError ||
35 (InRange(start, end, state.get_offset) &&
36 (set_get_buffer_count == state.set_get_buffer_count)));
37 return state;
38 }
39
Flush(int32_t put_offset)40 void CommandBufferDirect::Flush(int32_t put_offset) {
41 DCHECK(handler_);
42 if (GetLastState().error != gpu::error::kNoError)
43 return;
44 service_.Flush(put_offset, handler_);
45 }
46
OrderingBarrier(int32_t put_offset)47 void CommandBufferDirect::OrderingBarrier(int32_t put_offset) {
48 Flush(put_offset);
49 }
50
SetGetBuffer(int32_t transfer_buffer_id)51 void CommandBufferDirect::SetGetBuffer(int32_t transfer_buffer_id) {
52 service_.SetGetBuffer(transfer_buffer_id);
53 }
54
CreateTransferBuffer(uint32_t size,int32_t * id,TransferBufferAllocationOption option)55 scoped_refptr<Buffer> CommandBufferDirect::CreateTransferBuffer(
56 uint32_t size,
57 int32_t* id,
58 TransferBufferAllocationOption option) {
59 return service_.CreateTransferBuffer(size, id);
60 }
61
DestroyTransferBuffer(int32_t id)62 void CommandBufferDirect::DestroyTransferBuffer(int32_t id) {
63 service_.DestroyTransferBuffer(id);
64 }
65
66 CommandBufferServiceClient::CommandBatchProcessedResult
OnCommandBatchProcessed()67 CommandBufferDirect::OnCommandBatchProcessed() {
68 return kContinueExecution;
69 }
70
OnParseError()71 void CommandBufferDirect::OnParseError() {}
72
OnConsoleMessage(int32_t id,const std::string & message)73 void CommandBufferDirect::OnConsoleMessage(int32_t id,
74 const std::string& message) {}
75
CacheShader(const std::string & key,const std::string & shader)76 void CommandBufferDirect::CacheShader(const std::string& key,
77 const std::string& shader) {}
78
OnFenceSyncRelease(uint64_t release)79 void CommandBufferDirect::OnFenceSyncRelease(uint64_t release) {
80 NOTIMPLEMENTED();
81 }
82
OnDescheduleUntilFinished()83 void CommandBufferDirect::OnDescheduleUntilFinished() {
84 service_.SetScheduled(false);
85 }
86
OnRescheduleAfterFinished()87 void CommandBufferDirect::OnRescheduleAfterFinished() {
88 service_.SetScheduled(true);
89 }
90
OnSwapBuffers(uint64_t swap_id,uint32_t flags)91 void CommandBufferDirect::OnSwapBuffers(uint64_t swap_id, uint32_t flags) {}
92
CreateTransferBufferWithId(uint32_t size,int32_t id)93 scoped_refptr<Buffer> CommandBufferDirect::CreateTransferBufferWithId(
94 uint32_t size,
95 int32_t id) {
96 return service_.CreateTransferBufferWithId(size, id);
97 }
98
HandleReturnData(base::span<const uint8_t> data)99 void CommandBufferDirect::HandleReturnData(base::span<const uint8_t> data) {
100 NOTIMPLEMENTED();
101 }
102
103 } // namespace gpu
104