| Index: webkit/tools/pepper_test_plugin/command_buffer_pepper.cc
|
| ===================================================================
|
| --- webkit/tools/pepper_test_plugin/command_buffer_pepper.cc (revision 0)
|
| +++ webkit/tools/pepper_test_plugin/command_buffer_pepper.cc (revision 0)
|
| @@ -0,0 +1,180 @@
|
| +// 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 "webkit/tools/pepper_test_plugin/command_buffer_pepper.h"
|
| +
|
| +using base::SharedMemory;
|
| +using gpu::Buffer;
|
| +
|
| +CommandBufferPepper::CommandBufferPepper(NPP npp, NPNetscapeFuncs* browser)
|
| + : npp_(npp),
|
| + browser_(browser),
|
| + extensions_(NULL),
|
| + device_(NULL) {
|
| +}
|
| +
|
| +CommandBufferPepper::~CommandBufferPepper() {
|
| + if (device_) {
|
| + device_->destroyContext(npp_, &context_);
|
| + device_ = NULL;
|
| + }
|
| +}
|
| +
|
| +bool CommandBufferPepper::Initialize(int32 size) {
|
| + 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);
|
| + return buffer;
|
| +}
|
| +
|
| +int32 CommandBufferPepper::GetSize() {
|
| + return context_.commandBufferEntries;
|
| +}
|
| +
|
| +int32 CommandBufferPepper::SyncOffsets(int32 put_offset) {
|
| + context_.putOffset = put_offset;
|
| + if (NPERR_NO_ERROR != device_->flushContext(npp_, &context_, NULL, NULL))
|
| + return -1;
|
| +
|
| + return context_.getOffset;
|
| +}
|
| +
|
| +int32 CommandBufferPepper::GetGetOffset() {
|
| + int32 value;
|
| + if (NPERR_NO_ERROR != device_->getStateContext(
|
| + npp_,
|
| + &context_,
|
| + NPDeviceContext3DState_GetOffset,
|
| + &value)) {
|
| + return -1;
|
| + }
|
| +
|
| + return value;
|
| +}
|
| +
|
| +void CommandBufferPepper::SetGetOffset(int32 get_offset) {
|
| + // Not implemented by proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferPepper::GetPutOffset() {
|
| + int32 value;
|
| + if (NPERR_NO_ERROR != device_->getStateContext(
|
| + npp_,
|
| + &context_,
|
| + NPDeviceContext3DState_PutOffset,
|
| + &value)) {
|
| + return -1;
|
| + }
|
| +
|
| + return value;
|
| +}
|
| +
|
| +void CommandBufferPepper::SetPutOffsetChangeCallback(
|
| + Callback0::Type* callback) {
|
| + // Not implemented by proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferPepper::CreateTransferBuffer(size_t size) {
|
| + int32 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);
|
| +}
|
| +
|
| +Buffer CommandBufferPepper::GetTransferBuffer(int32 id) {
|
| + NPDeviceBuffer np_buffer;
|
| + if (NPERR_NO_ERROR != device_->mapBuffer(npp_, &context_, id, &np_buffer))
|
| + return Buffer();
|
| +
|
| + Buffer buffer;
|
| + buffer.ptr = np_buffer.ptr;
|
| + buffer.size = np_buffer.size;
|
| + return buffer;
|
| +}
|
| +
|
| +int32 CommandBufferPepper::GetToken() {
|
| + int32 value;
|
| + if (NPERR_NO_ERROR != device_->getStateContext(
|
| + npp_,
|
| + &context_,
|
| + NPDeviceContext3DState_Token,
|
| + &value)) {
|
| + return -1;
|
| + }
|
| +
|
| + return value;
|
| +}
|
| +
|
| +void CommandBufferPepper::SetToken(int32 token) {
|
| + // Not implemented by proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +int32 CommandBufferPepper::ResetParseError() {
|
| + int32 value;
|
| + if (NPERR_NO_ERROR != device_->getStateContext(
|
| + npp_,
|
| + &context_,
|
| + NPDeviceContext3DState_ParseError,
|
| + &value)) {
|
| + return -1;
|
| + }
|
| +
|
| + return value;
|
| +}
|
| +
|
| +void CommandBufferPepper::SetParseError(int32 parse_error) {
|
| + // Not implemented by proxy.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +bool CommandBufferPepper::GetErrorStatus() {
|
| + int32 value;
|
| + if (NPERR_NO_ERROR != device_->getStateContext(
|
| + npp_,
|
| + &context_,
|
| + NPDeviceContext3DState_ErrorStatus,
|
| + &value)) {
|
| + return value != 0;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void CommandBufferPepper::RaiseErrorStatus() {
|
| + // Not implemented by proxy.
|
| + NOTREACHED();
|
| +}
|
|
|
| Property changes on: webkit\tools\pepper_test_plugin\command_buffer_pepper.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|