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 #ifndef GPU_COMMAND_BUFFER_SERVICE_COMMAND_BUFFER_DIRECT_H_
6 #define GPU_COMMAND_BUFFER_SERVICE_COMMAND_BUFFER_DIRECT_H_
7 
8 #include "base/callback.h"
9 #include "gpu/command_buffer/common/constants.h"
10 #include "gpu/command_buffer/service/command_buffer_service.h"
11 #include "gpu/command_buffer/service/decoder_client.h"
12 #include "gpu/gpu_export.h"
13 
14 namespace gpu {
15 
16 class AsyncAPIInterface;
17 
18 class GPU_EXPORT CommandBufferDirect : public CommandBuffer,
19                                        public CommandBufferServiceClient,
20                                        public DecoderClient {
21  public:
22   CommandBufferDirect();
23   ~CommandBufferDirect() override;
24 
set_handler(AsyncAPIInterface * handler)25   void set_handler(AsyncAPIInterface* handler) { handler_ = handler; }
service()26   CommandBufferService* service() { return &service_; }
27 
28   // CommandBuffer implementation:
29   CommandBuffer::State GetLastState() override;
30   void Flush(int32_t put_offset) override;
31   void OrderingBarrier(int32_t put_offset) override;
32   CommandBuffer::State WaitForTokenInRange(int32_t start, int32_t end) override;
33   CommandBuffer::State WaitForGetOffsetInRange(uint32_t set_get_buffer_count,
34                                                int32_t start,
35                                                int32_t end) override;
36   void SetGetBuffer(int32_t transfer_buffer_id) override;
37   scoped_refptr<Buffer> CreateTransferBuffer(uint32_t size,
38                                              int32_t* id) override;
39   void DestroyTransferBuffer(int32_t id) override;
40 
41   // CommandBufferServiceClient implementation:
42   CommandBatchProcessedResult OnCommandBatchProcessed() override;
43   void OnParseError() override;
44 
45   // DecoderClient implementation
46   void OnConsoleMessage(int32_t id, const std::string& message) override;
47   void CacheShader(const std::string& key, const std::string& shader) override;
48   void OnFenceSyncRelease(uint64_t release) override;
49   void OnDescheduleUntilFinished() override;
50   void OnRescheduleAfterFinished() override;
51   void OnSwapBuffers(uint64_t swap_id, uint32_t flags) override;
ScheduleGrContextCleanup()52   void ScheduleGrContextCleanup() override {}
53   void HandleReturnData(base::span<const uint8_t> data) override;
54 
55   scoped_refptr<Buffer> CreateTransferBufferWithId(uint32_t size, int32_t id);
56 
SetGetOffsetForTest(int32_t get_offset)57   void SetGetOffsetForTest(int32_t get_offset) {
58     service_.SetGetOffsetForTest(get_offset);
59   }
60 
61  private:
62   CommandBufferService service_;
63   AsyncAPIInterface* handler_ = nullptr;
64 };
65 
66 }  // namespace gpu
67 
68 #endif  // GPU_COMMAND_BUFFER_SERVICE_COMMAND_BUFFER_DIRECT_H
69