15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#ifndef CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_ 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#define CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/shared_memory.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "gpu/command_buffer/common/mailbox.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppb_graphics_3d_shared.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/resource.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochnamespace content { 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class CommandBufferProxyImpl; 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class GpuChannelHost; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass PPB_Graphics3D_Impl : public ppapi::PPB_Graphics3D_Shared { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PP_Resource Create(PP_Instance instance, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource share_context, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int32_t* attrib_list); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static PP_Resource CreateRaw( 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Instance instance, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PP_Resource share_context, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const int32_t* attrib_list, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SharedMemoryHandle* shared_state_handle); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PPB_Graphics3D_API trusted implementation. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PP_Bool SetGetBuffer(int32_t transfer_buffer_id) OVERRIDE; 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(uint32_t size, 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch int32* id) OVERRIDE; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual PP_Bool Flush(int32_t put_offset) OVERRIDE; 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start, 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) int32_t end) OVERRIDE; 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(int32_t start, 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) int32_t end) 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) OVERRIDE; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual uint32_t InsertSyncPoint() OVERRIDE; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual uint32_t InsertFutureSyncPoint() OVERRIDE; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RetireSyncPoint(uint32_t) OVERRIDE; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Binds/unbinds the graphics of this context with the associated instance. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if binding/unbinding is successful. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool BindToInstance(bool bind); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the backing texture is always opaque. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsOpaque(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifications about the view's progress painting. See PluginInstance. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These messages are used to send Flush callbacks to the plugin. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ViewInitiatedPaint(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ViewFlushedPaint(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void GetBackingMailbox(gpu::Mailbox* mailbox, uint32* sync_point) { 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *mailbox = mailbox_; 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *sync_point = sync_point_; 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int GetCommandBufferRouteId(); 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GpuChannelHost* channel() { return channel_.get(); } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 66bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch virtual ~PPB_Graphics3D_Impl(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ppapi::PPB_Graphics3D_Shared overrides. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE; 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual gpu::GpuControl* GetGpuControl() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int32 DoSwapBuffers() OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit PPB_Graphics3D_Impl(PP_Instance instance); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch bool Init(PPB_Graphics3D_API* share_context, const int32_t* attrib_list); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool InitRaw(PPB_Graphics3D_API* share_context, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const int32_t* attrib_list, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::SharedMemoryHandle* shared_state_handle); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifications received from the GPU process. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSwapBuffers(); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnContextLost(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnConsoleMessage(const std::string& msg, int id); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifications sent to plugin. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendContextLost(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if context is bound to instance. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bound_to_instance_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True when waiting for compositor to commit our backing texture. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool commit_pending_; 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) gpu::Mailbox mailbox_; 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32 sync_point_; 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool has_alpha_; 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<GpuChannelHost> channel_; 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) CommandBufferProxyImpl* command_buffer_; 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<PPB_Graphics3D_Impl> weak_ptr_factory_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Impl); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch} // namespace content 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#endif // CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_ 106