diff options
-rw-r--r-- | gpu/gpu.gyp | 24 | ||||
-rw-r--r-- | gpu/pgl/pgl.cc | 161 | ||||
-rw-r--r-- | gpu/pgl/pgl.h | 23 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/DEPS | 1 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/command_buffer_pepper.cc (renamed from gpu/pgl/command_buffer_pepper.cc) | 68 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/command_buffer_pepper.h (renamed from gpu/pgl/command_buffer_pepper.h) | 18 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/pepper_test_plugin.gyp | 3 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/plugin_object.cc | 66 | ||||
-rw-r--r-- | webkit/tools/pepper_test_plugin/plugin_object.h | 12 |
9 files changed, 105 insertions, 271 deletions
diff --git a/gpu/gpu.gyp b/gpu/gpu.gyp index 3185f5b..8a51c05 100644 --- a/gpu/gpu.gyp +++ b/gpu/gpu.gyp @@ -361,30 +361,6 @@ 'command_buffer/client/gles2_demo_cc.cc', ], }, - { - 'target_name': 'pgl', - 'type': 'static_library', - 'dependencies': [ - 'command_buffer_client', - 'gles2_c_lib', - '../third_party/npapi/npapi.gyp:npapi', - ], - 'include_dirs': [ - '..', - '../third_party/npapi/bindings', - ], - 'all_dependent_settings': { - 'include_dirs': [ - '../third_party/npapi/bindings', - ], - }, - 'sources': [ - 'pgl/command_buffer_pepper.cc', - 'pgl/command_buffer_pepper.h', - 'pgl/pgl.cc', - 'pgl/pgl.h', - ], - }, ], 'conditions': [ ['OS == "win"', diff --git a/gpu/pgl/pgl.cc b/gpu/pgl/pgl.cc deleted file mode 100644 index 320dfff..0000000 --- a/gpu/pgl/pgl.cc +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) 2010 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. - -#include "gpu/command_buffer/client/gles2_cmd_helper.h" -#include "gpu/command_buffer/client/gles2_implementation.h" -#include "gpu/command_buffer/client/gles2_lib.h" -#include "gpu/pgl/command_buffer_pepper.h" -#include "gpu/pgl/pgl.h" - -#if defined(_MSC_VER) -#define THREAD_LOCAL __declspec(thread) -#else -#define THREAD_LOCAL __thread -#endif - -namespace { -const int32 kTransferBufferSize = 512 * 1024; - -class PGLContextImpl { - public: - PGLContextImpl(NPP npp, - NPDevice* device, - NPDeviceContext3D* device_context); - ~PGLContextImpl(); - - // Initlaize a PGL context with a transfer buffer of a particular size. - bool Initialize(int32 transfer_buffer_size); - - // Destroy all resources associated with the PGL context. - void Destroy(); - - // Make a PGL context current for the calling thread. - static bool MakeCurrent(PGLContextImpl* pgl_context); - - // Display all content rendered since last call to SwapBuffers. - bool SwapBuffers(); - - private: - PGLContextImpl(const PGLContextImpl&); - void operator=(const PGLContextImpl&); - - NPP npp_; - NPDevice* device_; - NPDeviceContext3D* device_context_; - CommandBufferPepper* command_buffer_; - gpu::gles2::GLES2CmdHelper* gles2_helper_; - int32 transfer_buffer_id_; - gpu::gles2::GLES2Implementation* gles2_implementation_; -}; - -THREAD_LOCAL PGLContextImpl* g_current_pgl_context; - -PGLContextImpl::PGLContextImpl(NPP npp, - NPDevice* device, - NPDeviceContext3D* device_context) - : npp_(npp), - device_(device), - device_context_(device_context), - command_buffer_(NULL), - gles2_helper_(NULL), - transfer_buffer_id_(0), - gles2_implementation_(NULL) { -} - -PGLContextImpl::~PGLContextImpl() { - Destroy(); -} - -bool PGLContextImpl::Initialize(int32 transfer_buffer_size) { - // Create and initialize the objects required to issue GLES2 calls. - command_buffer_ = new CommandBufferPepper( - npp_, device_, device_context_); - gles2_helper_ = new gpu::gles2::GLES2CmdHelper(command_buffer_); - if (gles2_helper_->Initialize()) { - transfer_buffer_id_ = - command_buffer_->CreateTransferBuffer(kTransferBufferSize); - gpu::Buffer transfer_buffer = - command_buffer_->GetTransferBuffer(transfer_buffer_id_); - if (transfer_buffer.ptr) { - gles2_implementation_ = new gpu::gles2::GLES2Implementation( - gles2_helper_, - transfer_buffer.size, - transfer_buffer.ptr, - transfer_buffer_id_); - return true; - } - } - - // Tear everything down if initialization failed. - Destroy(); - return false; -} - -void PGLContextImpl::Destroy() { - delete gles2_implementation_; - gles2_implementation_ = NULL; - - if (command_buffer_ && transfer_buffer_id_ != 0) { - command_buffer_->DestroyTransferBuffer(transfer_buffer_id_); - transfer_buffer_id_ = 0; - } - - delete gles2_helper_; - gles2_helper_ = NULL; - - delete command_buffer_; - command_buffer_ = NULL; -} - -bool PGLContextImpl::MakeCurrent(PGLContextImpl* pgl_context) { - g_current_pgl_context = pgl_context; - if (pgl_context) - gles2::g_gl_impl = pgl_context->gles2_implementation_; - else - gles2::g_gl_impl = NULL; - - return true; -} - -bool PGLContextImpl::SwapBuffers() { - gles2_implementation_->SwapBuffers(); - return true; -} -} // namespace anonymous - -extern "C" { - -PGLContext pglCreateContext(NPP npp, - NPDevice* device, - NPDeviceContext3D* device_context) { - PGLContextImpl* pgl_context = new PGLContextImpl( - npp, device, device_context); - if (pgl_context->Initialize(kTransferBufferSize)) { - return pgl_context; - } - - delete pgl_context; - return NULL; -} - -PGLBoolean pglMakeCurrent(PGLContext pgl_context) { - return PGLContextImpl::MakeCurrent(static_cast<PGLContextImpl*>(pgl_context)); -} - -PGLBoolean pglSwapBuffers() { - if (!g_current_pgl_context) - return false; - - return g_current_pgl_context->SwapBuffers(); -} - -PGLBoolean pglDestroyContext(PGLContext pgl_context) { - if (!pgl_context) - return false; - - delete pgl_context; - return true; -} - -} // extern "C" diff --git a/gpu/pgl/pgl.h b/gpu/pgl/pgl.h deleted file mode 100644 index 0cbc97d..0000000 --- a/gpu/pgl/pgl.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright (c) 2010 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 GPU_PGL_PGL_H -#define GPU_PGL_PGL_H - -#include "npapi.h" -#include "npapi_extensions.h" - -extern "C" { -typedef void* PGLContext; -typedef bool PGLBoolean; - -PGLContext pglCreateContext(NPP npp, - NPDevice* device, - NPDeviceContext3D* device_context); -PGLBoolean pglMakeCurrent(PGLContext pgl_context); -PGLBoolean pglSwapBuffers(); -PGLBoolean pglDestroyContext(PGLContext pgl_context); -} // extern "C" - -#endif // GPU_PGL_PGL_H
\ No newline at end of file diff --git a/webkit/tools/pepper_test_plugin/DEPS b/webkit/tools/pepper_test_plugin/DEPS index fcae681..03c7a2d 100644 --- a/webkit/tools/pepper_test_plugin/DEPS +++ b/webkit/tools/pepper_test_plugin/DEPS @@ -1,4 +1,3 @@ include_rules = [ "+gpu/command_buffer", - "+gpu/pgl", ] diff --git a/gpu/pgl/command_buffer_pepper.cc b/webkit/tools/pepper_test_plugin/command_buffer_pepper.cc index 3ee5406..148d342 100644 --- a/gpu/pgl/command_buffer_pepper.cc +++ b/webkit/tools/pepper_test_plugin/command_buffer_pepper.cc @@ -1,54 +1,76 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 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. -#include "gpu/pgl/command_buffer_pepper.h" +#include "webkit/tools/pepper_test_plugin/command_buffer_pepper.h" #include "base/logging.h" using base::SharedMemory; using gpu::Buffer; -CommandBufferPepper::CommandBufferPepper(NPP npp, - NPDevice* device, - NPDeviceContext3D* context) +CommandBufferPepper::CommandBufferPepper(NPP npp, NPNetscapeFuncs* browser) : npp_(npp), - device_(device), - context_(context) { + browser_(browser), + extensions_(NULL), + device_(NULL) { } CommandBufferPepper::~CommandBufferPepper() { + if (device_) { + device_->destroyContext(npp_, &context_); + device_ = NULL; + } } -// Not implemented in CommandBufferPepper. bool CommandBufferPepper::Initialize(int32 size) { - NOTREACHED(); + if (device_) + return false; + + // Get the pepper extensions. + browser_->getvalue(npp_, + NPNVPepperExtensions, + reinterpret_cast<void*>(&extensions_)); + CHECK(extensions_); + + // Acquire a 3D device. + device_ = extensions_->acquireDevice(npp_, NPPepper3DDevice); + if (device_) { + NPDeviceContext3DConfig config; + config.commandBufferEntries = size; + if (NPERR_NO_ERROR == device_->initializeContext(npp_, + &config, + &context_)) { + return true; + } + } + return false; } Buffer CommandBufferPepper::GetRingBuffer() { Buffer buffer; - buffer.ptr = context_->commandBuffer; - buffer.size = context_->commandBufferEntries * sizeof(int32); + buffer.ptr = context_.commandBuffer; + buffer.size = context_.commandBufferEntries * sizeof(int32); return buffer; } int32 CommandBufferPepper::GetSize() { - return context_->commandBufferEntries; + return context_.commandBufferEntries; } int32 CommandBufferPepper::SyncOffsets(int32 put_offset) { - context_->putOffset = put_offset; - if (NPERR_NO_ERROR != device_->flushContext(npp_, context_, NULL, NULL)) + context_.putOffset = put_offset; + if (NPERR_NO_ERROR != device_->flushContext(npp_, &context_, NULL, NULL)) return -1; - return context_->getOffset; + return context_.getOffset; } int32 CommandBufferPepper::GetGetOffset() { int32 value; if (NPERR_NO_ERROR != device_->getStateContext( npp_, - context_, + &context_, NPDeviceContext3DState_GetOffset, &value)) { return -1; @@ -66,7 +88,7 @@ int32 CommandBufferPepper::GetPutOffset() { int32 value; if (NPERR_NO_ERROR != device_->getStateContext( npp_, - context_, + &context_, NPDeviceContext3DState_PutOffset, &value)) { return -1; @@ -77,19 +99,19 @@ int32 CommandBufferPepper::GetPutOffset() { int32 CommandBufferPepper::CreateTransferBuffer(size_t size) { int32 id; - if (NPERR_NO_ERROR != device_->createBuffer(npp_, context_, size, &id)) + if (NPERR_NO_ERROR != device_->createBuffer(npp_, &context_, size, &id)) return -1; return id; } void CommandBufferPepper::DestroyTransferBuffer(int32 id) { - device_->destroyBuffer(npp_, context_, id); + device_->destroyBuffer(npp_, &context_, id); } Buffer CommandBufferPepper::GetTransferBuffer(int32 id) { NPDeviceBuffer np_buffer; - if (NPERR_NO_ERROR != device_->mapBuffer(npp_, context_, id, &np_buffer)) + if (NPERR_NO_ERROR != device_->mapBuffer(npp_, &context_, id, &np_buffer)) return Buffer(); Buffer buffer; @@ -102,7 +124,7 @@ int32 CommandBufferPepper::GetToken() { int32 value; if (NPERR_NO_ERROR != device_->getStateContext( npp_, - context_, + &context_, NPDeviceContext3DState_Token, &value)) { return -1; @@ -120,7 +142,7 @@ int32 CommandBufferPepper::ResetParseError() { int32 value; if (NPERR_NO_ERROR != device_->getStateContext( npp_, - context_, + &context_, NPDeviceContext3DState_ParseError, &value)) { return -1; @@ -138,7 +160,7 @@ bool CommandBufferPepper::GetErrorStatus() { int32 value; if (NPERR_NO_ERROR != device_->getStateContext( npp_, - context_, + &context_, NPDeviceContext3DState_ErrorStatus, &value)) { return value != 0; diff --git a/gpu/pgl/command_buffer_pepper.h b/webkit/tools/pepper_test_plugin/command_buffer_pepper.h index ab114e3..017e4bc 100644 --- a/gpu/pgl/command_buffer_pepper.h +++ b/webkit/tools/pepper_test_plugin/command_buffer_pepper.h @@ -1,9 +1,9 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2009 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 GPU_PGL_COMMAND_BUFFER_PEPPER_H -#define GPU_PGL_COMMAND_BUFFER_PEPPER_H +#ifndef WEBKIT_TOOLS_PEPPER_TEST_PLUGIN_COMMAND_BUFFER_PEPPER_H_ +#define WEBKIT_TOOLS_PEPPER_TEST_PLUGIN_COMMAND_BUFFER_PEPPER_H_ #include "gpu/command_buffer/common/command_buffer.h" #include "third_party/npapi/bindings/npapi.h" @@ -12,12 +12,12 @@ // A CommandBuffer proxy implementation that uses the Pepper API to access // the command buffer. +// TODO(apatrick): move this into a library that can be used by any pepper +// plugin. class CommandBufferPepper : public gpu::CommandBuffer { public: - CommandBufferPepper(NPP npp, - NPDevice* device, - NPDeviceContext3D* device_context); + CommandBufferPepper(NPP npp, NPNetscapeFuncs* browser); virtual ~CommandBufferPepper(); // CommandBuffer implementation. @@ -40,10 +40,12 @@ class CommandBufferPepper : public gpu::CommandBuffer { private: NPP npp_; + NPNetscapeFuncs* browser_; + NPExtensions* extensions_; NPDevice* device_; - NPDeviceContext3D* context_; + NPDeviceContext3D context_; }; -#endif // GPU_PGL_COMMAND_BUFFER_PEPPER_H +#endif // WEBKIT_TOOLS_PEPPER_TEST_PLUGIN_COMMAND_BUFFER_PEPPER_H_ diff --git a/webkit/tools/pepper_test_plugin/pepper_test_plugin.gyp b/webkit/tools/pepper_test_plugin/pepper_test_plugin.gyp index b1c339e..7a8320a 100644 --- a/webkit/tools/pepper_test_plugin/pepper_test_plugin.gyp +++ b/webkit/tools/pepper_test_plugin/pepper_test_plugin.gyp @@ -8,7 +8,6 @@ { 'target_name': 'pepper_test_plugin', 'dependencies': [ - '../../../gpu/gpu.gyp:pgl', '../../../third_party/npapi/npapi.gyp:npapi', ], 'include_dirs': [ @@ -18,6 +17,8 @@ 'INFOPLIST_FILE': 'Info.plist', }, 'sources': [ + 'command_buffer_pepper.cc', + 'command_buffer_pepper.h', 'main.cc', 'plugin_object.cc', 'plugin_object.h', diff --git a/webkit/tools/pepper_test_plugin/plugin_object.cc b/webkit/tools/pepper_test_plugin/plugin_object.cc index 7f109ac..af199a7 100644 --- a/webkit/tools/pepper_test_plugin/plugin_object.cc +++ b/webkit/tools/pepper_test_plugin/plugin_object.cc @@ -34,8 +34,8 @@ #define CHECK(x) #else #include "base/logging.h" +#include "gpu/command_buffer/client/gles2_lib.h" #include "gpu/command_buffer/client/gles2_demo_cc.h" -#include "gpu/command_buffer/common/gles2/gl2.h" #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkCanvas.h" #include "third_party/skia/include/effects/SkGradientShader.h" @@ -288,8 +288,6 @@ template <int F, typename T> void SineWaveCallback( context->config.userData = reinterpret_cast<void *>(t); } -const int32 kCommandBufferSize = 1024 * 1024; - } // namespace @@ -298,10 +296,7 @@ const int32 kCommandBufferSize = 1024 * 1024; PluginObject::PluginObject(NPP npp) : npp_(npp), test_object_(browser->createobject(npp, GetTestClass())), - device2d_(NULL), - device3d_(NULL), - deviceaudio_(NULL), - pgl_context_(NULL) { + device2d_(NULL) { memset(&context_audio_, 0, sizeof(context_audio_)); } @@ -342,9 +337,6 @@ void PluginObject::New(NPMIMEType pluginType, device2d_ = extensions->acquireDevice(npp_, NPPepper2DDevice); CHECK(device2d_); - device3d_ = extensions->acquireDevice(npp_, NPPepper3DDevice); - CHECK(device3d_); - deviceaudio_ = extensions->acquireDevice(npp_, NPPepperAudioDevice); CHECK(deviceaudio_); } @@ -367,20 +359,12 @@ void PluginObject::SetWindow(const NPWindow& window) { device2d_->flushContext(npp_, &context, callback, NULL); } else { #if !defined(INDEPENDENT_PLUGIN) - if (!pgl_context_) { - // Initialize a 3D context. - NPDeviceContext3DConfig config; - config.commandBufferEntries = kCommandBufferSize; - device3d_->initializeContext(npp_, &config, &context3d_); - - // Create a PGL context. - pgl_context_ = pglCreateContext(npp_, device3d_, &context3d_); + if (!command_buffer_.get()) { + if (!InitializeCommandBuffer()) + return; } - // Reset the viewport to new window size. - pglMakeCurrent(pgl_context_); - glViewport(0, 0, window.width, window.height); - pglMakeCurrent(NULL); + gles2_implementation_->Viewport(0, 0, window.width, window.height); // Schedule the first call to Draw. browser->pluginthreadasynccall(npp_, Draw3DCallback, this); @@ -404,12 +388,44 @@ void PluginObject::SetWindow(const NPWindow& window) { void PluginObject::Draw3D() { #if !defined(INDEPENDENT_PLUGIN) // Render some stuff. - pglMakeCurrent(pgl_context_); + gles2::g_gl_impl = gles2_implementation_.get(); GLFromCPPTestFunction(); - pglSwapBuffers(); - pglMakeCurrent(NULL); + gles2::GetGLContext()->SwapBuffers(); + helper_->Flush(); + gles2::g_gl_impl = NULL; // Schedule another call to Draw. browser->pluginthreadasynccall(npp_, Draw3DCallback, this); #endif } + +bool PluginObject::InitializeCommandBuffer() { +#if !defined(INDEPENDENT_PLUGIN) + static const int32 kCommandBufferSize = 512 * 1024; + command_buffer_.reset(new CommandBufferPepper(npp_, browser)); + if (command_buffer_->Initialize(kCommandBufferSize)) { + helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer_.get())); + if (helper_->Initialize()) { + const int32 kTransferBufferSize = 512 * 1024; + int32 transfer_buffer_id = + command_buffer_->CreateTransferBuffer(kTransferBufferSize); + gpu::Buffer transfer_buffer = + command_buffer_->GetTransferBuffer(transfer_buffer_id); + if (transfer_buffer.ptr) { + gles2_implementation_.reset(new gpu::gles2::GLES2Implementation( + helper_.get(), + transfer_buffer.size, + transfer_buffer.ptr, + transfer_buffer_id)); + return true; + } + } + + helper_.reset(); + } + + command_buffer_.reset(); +#endif + + return false; +} diff --git a/webkit/tools/pepper_test_plugin/plugin_object.h b/webkit/tools/pepper_test_plugin/plugin_object.h index 0da3722b..0850f54 100644 --- a/webkit/tools/pepper_test_plugin/plugin_object.h +++ b/webkit/tools/pepper_test_plugin/plugin_object.h @@ -30,7 +30,8 @@ #include "base/scoped_ptr.h" #include "webkit/glue/plugins/nphostapi.h" #if !defined(INDEPENDENT_PLUGIN) -#include "gpu/pgl/pgl.h" +#include "gpu/command_buffer/client/gles2_implementation.h" +#include "webkit/tools/pepper_test_plugin/command_buffer_pepper.h" #endif extern NPNetscapeFuncs* browser; @@ -50,21 +51,22 @@ class PluginObject { void Draw3D(); private: + bool InitializeCommandBuffer(); + NPObject header_; NPP npp_; NPObject* test_object_; int dimensions_; NPDevice* device2d_; - NPDevice* device3d_; NPDevice* deviceaudio_; - NPDeviceContext3D context3d_; NPDeviceContextAudio context_audio_; - #if !defined(INDEPENDENT_PLUGIN) - PGLContext pgl_context_; + scoped_ptr<CommandBufferPepper> command_buffer_; + scoped_ptr<gpu::gles2::GLES2CmdHelper> helper_; + scoped_ptr<gpu::gles2::GLES2Implementation> gles2_implementation_; #endif int width_; |