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