summaryrefslogtreecommitdiffstats
path: root/chromium/mojo/gles2/command_buffer_client_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/mojo/gles2/command_buffer_client_impl.h')
-rw-r--r--chromium/mojo/gles2/command_buffer_client_impl.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/chromium/mojo/gles2/command_buffer_client_impl.h b/chromium/mojo/gles2/command_buffer_client_impl.h
new file mode 100644
index 00000000000..68312e08537
--- /dev/null
+++ b/chromium/mojo/gles2/command_buffer_client_impl.h
@@ -0,0 +1,114 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MOJO_GLES2_COMMAND_BUFFER_CLIENT_IMPL_H_
+#define MOJO_GLES2_COMMAND_BUFFER_CLIENT_IMPL_H_
+
+#include <map>
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "gpu/command_buffer/client/gpu_control.h"
+#include "gpu/command_buffer/common/command_buffer.h"
+#include "gpu/command_buffer/common/command_buffer_shared.h"
+#include "mojo/public/cpp/bindings/error_handler.h"
+#include "mojo/services/gles2/command_buffer.mojom.h"
+
+namespace base {
+class RunLoop;
+}
+
+namespace mojo {
+template <typename S>
+class SyncDispatcher;
+
+namespace gles2 {
+class CommandBufferClientImpl;
+
+class CommandBufferDelegate {
+ public:
+ virtual ~CommandBufferDelegate();
+ virtual void ContextLost();
+ virtual void DrawAnimationFrame();
+};
+
+class CommandBufferClientImpl : public CommandBufferClient,
+ public CommandBufferSyncClient,
+ public ErrorHandler,
+ public gpu::CommandBuffer,
+ public gpu::GpuControl {
+ public:
+ explicit CommandBufferClientImpl(
+ CommandBufferDelegate* delegate,
+ const MojoAsyncWaiter* async_waiter,
+ ScopedMessagePipeHandle command_buffer_handle);
+ virtual ~CommandBufferClientImpl();
+
+ // CommandBuffer implementation:
+ virtual bool Initialize() OVERRIDE;
+ virtual State GetLastState() OVERRIDE;
+ virtual int32 GetLastToken() OVERRIDE;
+ virtual void Flush(int32 put_offset) OVERRIDE;
+ virtual void WaitForTokenInRange(int32 start, int32 end) OVERRIDE;
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) OVERRIDE;
+ virtual void SetGetBuffer(int32 shm_id) OVERRIDE;
+ virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+ int32* id) OVERRIDE;
+ virtual void DestroyTransferBuffer(int32 id) OVERRIDE;
+
+ // gpu::GpuControl implementation:
+ virtual gpu::Capabilities GetCapabilities() OVERRIDE;
+ virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(size_t width,
+ size_t height,
+ unsigned internalformat,
+ unsigned usage,
+ int32* id) OVERRIDE;
+ virtual void DestroyGpuMemoryBuffer(int32 id) OVERRIDE;
+ virtual uint32 InsertSyncPoint() OVERRIDE;
+ virtual void SignalSyncPoint(uint32 sync_point,
+ const base::Closure& callback) OVERRIDE;
+ virtual void SignalQuery(uint32 query,
+ const base::Closure& callback) OVERRIDE;
+ virtual void SetSurfaceVisible(bool visible) OVERRIDE;
+ virtual void Echo(const base::Closure& callback) OVERRIDE;
+ virtual uint32 CreateStreamTexture(uint32 texture_id) OVERRIDE;
+
+ void RequestAnimationFrames();
+ void CancelAnimationFrames();
+
+ private:
+ // CommandBufferClient implementation:
+ virtual void DidInitialize(bool success) OVERRIDE;
+ virtual void DidMakeProgress(CommandBufferStatePtr state) OVERRIDE;
+ virtual void DidDestroy() OVERRIDE;
+ virtual void LostContext(int32_t lost_reason) OVERRIDE;
+
+ // ErrorHandler implementation:
+ virtual void OnConnectionError() OVERRIDE;
+
+ virtual void DrawAnimationFrame() OVERRIDE;
+
+ void TryUpdateState();
+ void MakeProgressAndUpdateState();
+
+ gpu::CommandBufferSharedState* shared_state() const { return shared_state_; }
+
+ CommandBufferDelegate* delegate_;
+ CommandBufferPtr command_buffer_;
+ scoped_ptr<SyncDispatcher<CommandBufferSyncClient> > sync_dispatcher_;
+
+ State last_state_;
+ mojo::ScopedSharedBufferHandle shared_state_handle_;
+ gpu::CommandBufferSharedState* shared_state_;
+ int32 last_put_offset_;
+ int32 next_transfer_buffer_id_;
+
+ bool initialize_result_;
+ const MojoAsyncWaiter* async_waiter_;
+};
+
+} // gles2
+} // mojo
+
+#endif // MOJO_GLES2_COMMAND_BUFFER_CLIENT_IMPL_H_