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