blob: 472c2a7c16b26f9a45f021a93c16dd44bd38e002 [file] [log] [blame]
[email protected]eeb4e4a2011-07-19 16:22:061// Copyright (c) 2011 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 PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
6#define PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
7
8#include <vector>
9
10#include "base/shared_memory.h"
11#include "gpu/command_buffer/common/command_buffer.h"
[email protected]fae0e942011-09-07 17:10:4612#include "ppapi/c/pp_graphics_3d.h"
[email protected]eeb4e4a2011-07-19 16:22:0613#include "ppapi/c/pp_instance.h"
14#include "ppapi/cpp/completion_callback.h"
15#include "ppapi/proxy/interface_proxy.h"
[email protected]eeb4e4a2011-07-19 16:22:0616#include "ppapi/proxy/proxy_non_thread_safe_ref_count.h"
17#include "ppapi/shared_impl/graphics_3d_impl.h"
[email protected]7f8b26b2011-08-18 15:41:0118#include "ppapi/shared_impl/resource.h"
[email protected]eeb4e4a2011-07-19 16:22:0619
[email protected]be0a84b2011-08-13 04:18:4420namespace ppapi {
[email protected]be0a84b2011-08-13 04:18:4421
[email protected]4d2efd22011-08-18 21:58:0222class HostResource;
23
[email protected]eeb4e4a2011-07-19 16:22:0624namespace proxy {
25
[email protected]4d2efd22011-08-18 21:58:0226class Graphics3D : public Resource, public Graphics3DImpl {
[email protected]eeb4e4a2011-07-19 16:22:0627 public:
[email protected]4d2efd22011-08-18 21:58:0228 explicit Graphics3D(const HostResource& resource);
[email protected]eeb4e4a2011-07-19 16:22:0629 virtual ~Graphics3D();
30
31 bool Init();
32
[email protected]7f8b26b2011-08-18 15:41:0133 // Resource overrides.
[email protected]4d2efd22011-08-18 21:58:0234 virtual thunk::PPB_Graphics3D_API* AsPPB_Graphics3D_API() OVERRIDE {
[email protected]eeb4e4a2011-07-19 16:22:0635 return this;
36 }
37
38 // Graphics3DTrusted API. These are not implemented in the proxy.
39 virtual PP_Bool InitCommandBuffer(int32_t size) OVERRIDE;
40 virtual PP_Bool GetRingBuffer(int* shm_handle, uint32_t* shm_size) OVERRIDE;
41 virtual PP_Graphics3DTrustedState GetState() OVERRIDE;
42 virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
43 virtual PP_Graphics3DTrustedState FlushSync(int32_t put_offset) OVERRIDE;
44 virtual int32_t CreateTransferBuffer(uint32_t size) OVERRIDE;
45 virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
46 virtual PP_Bool GetTransferBuffer(int32_t id,
47 int* shm_handle,
48 uint32_t* shm_size) OVERRIDE;
49 virtual PP_Graphics3DTrustedState FlushSyncFast(
50 int32_t put_offset,
51 int32_t last_known_get) OVERRIDE;
52
53 protected:
[email protected]4d2efd22011-08-18 21:58:0254 // Graphics3DImpl overrides.
[email protected]eeb4e4a2011-07-19 16:22:0655 virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
56 virtual int32 DoSwapBuffers() OVERRIDE;
57
58 private:
59 scoped_ptr<gpu::CommandBuffer> command_buffer_;
60
61 DISALLOW_COPY_AND_ASSIGN(Graphics3D);
62};
63
64class PPB_Graphics3D_Proxy : public InterfaceProxy {
65 public:
[email protected]5c966022011-09-13 18:09:3766 PPB_Graphics3D_Proxy(Dispatcher* dispatcher);
[email protected]eeb4e4a2011-07-19 16:22:0667 virtual ~PPB_Graphics3D_Proxy();
68
[email protected]eeb4e4a2011-07-19 16:22:0669 static PP_Resource CreateProxyResource(PP_Instance instance,
[email protected]eeb4e4a2011-07-19 16:22:0670 PP_Resource share_context,
71 const int32_t* attrib_list);
72
[email protected]eeb4e4a2011-07-19 16:22:0673 // InterfaceProxy implementation.
74 virtual bool OnMessageReceived(const IPC::Message& msg);
75
[email protected]ac4b54d2011-10-20 23:09:2876 static const ApiID kApiID = API_ID_PPB_GRAPHICS_3D;
[email protected]5c966022011-09-13 18:09:3777
[email protected]eeb4e4a2011-07-19 16:22:0678 private:
79 void OnMsgCreate(PP_Instance instance,
[email protected]eeb4e4a2011-07-19 16:22:0680 const std::vector<int32_t>& attribs,
[email protected]4d2efd22011-08-18 21:58:0281 HostResource* result);
82 void OnMsgInitCommandBuffer(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0683 int32 size,
84 base::SharedMemoryHandle* ring_buffer);
[email protected]4d2efd22011-08-18 21:58:0285 void OnMsgGetState(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0686 gpu::CommandBuffer::State* state);
[email protected]4d2efd22011-08-18 21:58:0287 void OnMsgFlush(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0688 int32 put_offset,
89 int32 last_known_get,
90 gpu::CommandBuffer::State* state);
[email protected]4d2efd22011-08-18 21:58:0291 void OnMsgAsyncFlush(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0692 int32 put_offset);
[email protected]4d2efd22011-08-18 21:58:0293 void OnMsgCreateTransferBuffer(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0694 int32 size,
95 int32* id);
[email protected]4d2efd22011-08-18 21:58:0296 void OnMsgDestroyTransferBuffer(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0697 int32 id);
[email protected]4d2efd22011-08-18 21:58:0298 void OnMsgGetTransferBuffer(const HostResource& context,
[email protected]eeb4e4a2011-07-19 16:22:0699 int32 id,
100 base::SharedMemoryHandle* transfer_buffer,
101 uint32* size);
[email protected]4d2efd22011-08-18 21:58:02102 void OnMsgSwapBuffers(const HostResource& context);
[email protected]eeb4e4a2011-07-19 16:22:06103 // Renderer->plugin message handlers.
[email protected]4d2efd22011-08-18 21:58:02104 void OnMsgSwapBuffersACK(const HostResource& context,
[email protected]be0a84b2011-08-13 04:18:44105 int32_t pp_error);
[email protected]eeb4e4a2011-07-19 16:22:06106
107 void SendSwapBuffersACKToPlugin(int32_t result,
[email protected]4d2efd22011-08-18 21:58:02108 const HostResource& context);
[email protected]eeb4e4a2011-07-19 16:22:06109
[email protected]4d2efd22011-08-18 21:58:02110 pp::CompletionCallbackFactory<PPB_Graphics3D_Proxy,
111 ProxyNonThreadSafeRefCount> callback_factory_;
[email protected]eeb4e4a2011-07-19 16:22:06112
113 DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Proxy);
114};
115
116} // namespace proxy
[email protected]4d2efd22011-08-18 21:58:02117} // namespace ppapi
[email protected]eeb4e4a2011-07-19 16:22:06118
119#endif // PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
120