• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  // Copyright (c) 2012 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/memory/shared_memory.h"
11  #include "gpu/command_buffer/common/command_buffer.h"
12  #include "ppapi/c/pp_graphics_3d.h"
13  #include "ppapi/c/pp_instance.h"
14  #include "ppapi/proxy/interface_proxy.h"
15  #include "ppapi/proxy/ppapi_proxy_export.h"
16  #include "ppapi/proxy/proxy_completion_callback_factory.h"
17  #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
18  #include "ppapi/shared_impl/resource.h"
19  #include "ppapi/utility/completion_callback_factory.h"
20  
21  namespace ppapi {
22  
23  class HostResource;
24  
25  namespace proxy {
26  
27  class SerializedHandle;
28  class PpapiCommandBufferProxy;
29  
30  class PPAPI_PROXY_EXPORT Graphics3D : public PPB_Graphics3D_Shared {
31   public:
32    explicit Graphics3D(const HostResource& resource);
33    virtual ~Graphics3D();
34  
35    bool Init(gpu::gles2::GLES2Implementation* share_gles2,
36              const SerializedHandle& shared_state);
37  
38    // Graphics3DTrusted API. These are not implemented in the proxy.
39    virtual PP_Bool SetGetBuffer(int32_t shm_id) OVERRIDE;
40    virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
41    virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(uint32_t size,
42                                                            int32* id) OVERRIDE;
43    virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
44    virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start,
45                                                          int32_t end) OVERRIDE;
46    virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(int32_t start,
47                                                              int32_t end)
48        OVERRIDE;
49    virtual uint32_t InsertSyncPoint() OVERRIDE;
50    virtual uint32_t InsertFutureSyncPoint() OVERRIDE;
51    virtual void RetireSyncPoint(uint32_t sync_point) OVERRIDE;
52  
53   private:
54    // PPB_Graphics3D_Shared overrides.
55    virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
56    virtual gpu::GpuControl* GetGpuControl() OVERRIDE;
57    virtual int32 DoSwapBuffers() OVERRIDE;
58  
59    scoped_ptr<PpapiCommandBufferProxy> command_buffer_;
60  
61    DISALLOW_COPY_AND_ASSIGN(Graphics3D);
62  };
63  
64  class PPB_Graphics3D_Proxy : public InterfaceProxy {
65   public:
66    PPB_Graphics3D_Proxy(Dispatcher* dispatcher);
67    virtual ~PPB_Graphics3D_Proxy();
68  
69    static PP_Resource CreateProxyResource(
70        PP_Instance instance,
71        PP_Resource share_context,
72        const int32_t* attrib_list);
73  
74    // InterfaceProxy implementation.
75    virtual bool OnMessageReceived(const IPC::Message& msg);
76  
77    static const ApiID kApiID = API_ID_PPB_GRAPHICS_3D;
78  
79   private:
80    void OnMsgCreate(PP_Instance instance,
81                     HostResource share_context,
82                     const std::vector<int32_t>& attribs,
83                     HostResource* result,
84                     SerializedHandle* handle);
85    void OnMsgSetGetBuffer(const HostResource& context,
86                           int32 id);
87    void OnMsgWaitForTokenInRange(const HostResource& context,
88                                  int32 start,
89                                  int32 end,
90                                  gpu::CommandBuffer::State* state,
91                                  bool* success);
92    void OnMsgWaitForGetOffsetInRange(const HostResource& context,
93                                      int32 start,
94                                      int32 end,
95                                      gpu::CommandBuffer::State* state,
96                                      bool* success);
97    void OnMsgAsyncFlush(const HostResource& context, int32 put_offset);
98    void OnMsgCreateTransferBuffer(
99        const HostResource& context,
100        uint32 size,
101        int32* id,
102        ppapi::proxy::SerializedHandle* transfer_buffer);
103    void OnMsgDestroyTransferBuffer(const HostResource& context,
104                                    int32 id);
105    void OnMsgSwapBuffers(const HostResource& context);
106    void OnMsgInsertSyncPoint(const HostResource& context, uint32* sync_point);
107    void OnMsgInsertFutureSyncPoint(const HostResource& context,
108                                    uint32* sync_point);
109    void OnMsgRetireSyncPoint(const HostResource& context, uint32 sync_point);
110    // Renderer->plugin message handlers.
111    void OnMsgSwapBuffersACK(const HostResource& context,
112                             int32_t pp_error);
113  
114    void SendSwapBuffersACKToPlugin(int32_t result,
115                                    const HostResource& context);
116  
117    ProxyCompletionCallbackFactory<PPB_Graphics3D_Proxy> callback_factory_;
118  
119    DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Proxy);
120  };
121  
122  }  // namespace proxy
123  }  // namespace ppapi
124  
125  #endif  // PPAPI_PROXY_PPB_GRAPHICS_3D_PROXY_H_
126  
127