0

Revert 35509 - linux: implement gpu plugin

Review URL: http://codereview.chromium.org/500132

TBR=piman@chromium.org
Review URL: http://codereview.chromium.org/525022

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35511 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
piman@chromium.org
2010-01-05 04:11:13 +00:00
parent 9561ea774c
commit 7706e5e359
15 changed files with 49 additions and 126 deletions

@ -148,6 +148,9 @@
# Whether to add the experimental build define.
'chrome_frame_define%': 0,
# Whether GPU plugin build is enabled.
'enable_gpu%': 0,
# Whether usage of OpenMAX is enabled.
'enable_openmax%': 0,
@ -346,7 +349,7 @@
}],
],
}],
['OS=="win" or (OS=="linux" and target_arch!="arm")', {
['OS=="win"', {
'defines': [
'ENABLE_GPU=1',
],

@ -450,6 +450,9 @@
# end up using this module as well.
'conditions': [
['OS=="win"', {
'dependencies': [
'../gpu/gpu.gyp:command_buffer_service',
],
'defines': [
'__STD_C',
'_CRT_SECURE_NO_DEPRECATE',
@ -458,11 +461,6 @@
'include_dirs': [
'third_party/wtl/include',
],
}],
['OS=="win" or (OS=="linux" and target_arch!="arm")', {
'dependencies': [
'../gpu/gpu.gyp:command_buffer_service',
],
'sources': [
'plugin/command_buffer_stub.cc',
'plugin/command_buffer_stub.h',

@ -165,6 +165,10 @@
'include_dirs': [
'third_party/wtl/include',
],
'sources': [
'renderer/command_buffer_proxy.cc',
'renderer/command_buffer_proxy.h',
],
'conditions': [
['win_use_allocator_shim==1', {
'dependencies': [
@ -176,12 +180,6 @@
}],
],
}],
['OS=="win" or (OS=="linux" and target_arch!="arm")', {
'sources': [
'renderer/command_buffer_proxy.cc',
'renderer/command_buffer_proxy.h',
],
}],
],
},
],

@ -11,9 +11,9 @@
using gpu::Buffer;
CommandBufferStub::CommandBufferStub(PluginChannel* channel,
gfx::PluginWindowHandle window)
gfx::NativeView view)
: channel_(channel),
window_(window) {
view_(view) {
route_id_ = channel->GenerateRouteID();
channel->AddRoute(route_id_, this, false);
}
@ -54,7 +54,7 @@ void CommandBufferStub::OnInitialize(int32 size,
Buffer buffer = command_buffer_->GetRingBuffer();
if (buffer.shared_memory) {
processor_ = new gpu::GPUProcessor(command_buffer_.get());
if (processor_->Initialize(window_)) {
if (processor_->Initialize(view_)) {
command_buffer_->SetPutOffsetChangeCallback(
NewCallback(processor_.get(),
&gpu::GPUProcessor::ProcessCommands));
@ -93,7 +93,7 @@ void CommandBufferStub::OnGetTransferBuffer(
int32 id,
base::SharedMemoryHandle* transfer_buffer,
size_t* size) {
*transfer_buffer = base::SharedMemoryHandle();
*transfer_buffer = 0;
*size = 0;
// Assume service is responsible for duplicating the handle to the calling

@ -21,7 +21,7 @@ class CommandBufferService;
class CommandBufferStub : public IPC::Channel::Listener,
public IPC::Message::Sender {
public:
CommandBufferStub(PluginChannel* channel, gfx::PluginWindowHandle window);
CommandBufferStub(PluginChannel* channel, gfx::NativeView view);
virtual ~CommandBufferStub();
@ -50,7 +50,7 @@ class CommandBufferStub : public IPC::Channel::Listener,
void OnGetErrorStatus(bool* error_status);
scoped_refptr<PluginChannel> channel_;
gfx::PluginWindowHandle window_;
gfx::NativeView view_;
int route_id_;
scoped_ptr<gpu::CommandBufferService> command_buffer_;
scoped_refptr<gpu::GPUProcessor> processor_;

@ -153,20 +153,12 @@ Buffer CommandBufferProxy::GetTransferBuffer(int32 id) {
}
// Cache the transfer buffer shared memory object client side.
#if defined(OS_WIN)
// TODO(piman): Does Windows needs this version of the constructor ? It
// duplicates the handle, but I'm not sure why it is necessary - it was
// already duped by the CommandBufferStub.
base::SharedMemory* shared_memory =
new base::SharedMemory(handle, false, base::GetCurrentProcessHandle());
#else
base::SharedMemory* shared_memory =
new base::SharedMemory(handle, false);
#endif
// Map the shared memory on demand.
if (!shared_memory->memory()) {
if (!shared_memory->Map(size)) {
if (!shared_memory->Map(shared_memory->max_size())) {
delete shared_memory;
return Buffer();
}

@ -14,9 +14,6 @@
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/command_buffer/service/gles2_cmd_validation.h"
#if defined(OS_LINUX)
#include "gpu/command_buffer/service/x_utils.h"
#endif
namespace gpu {
namespace gles2 {
@ -985,6 +982,7 @@ parse_error::ParseError GLES2DecoderImpl::DoCommand(
parse_error::ParseError result = parse_error::kParseNoError;
if (debug()) {
// TODO(gman): Change output to something useful for NaCl.
const char* f = GetCommandName(command);
printf("cmd: %s\n", GetCommandName(command));
}
unsigned int command_index = command - kStartPoint - 1;
@ -1219,7 +1217,7 @@ void GLES2DecoderImpl::UpdateProgramInfo(GLuint program) {
program, ii, max_len + 1, &length, &size, &type, name_buffer.get());
// TODO(gman): Should we check for error?
GLint location = glGetAttribLocation(program, name_buffer.get());
info->SetAttributeLocation(ii, location);
info->SetAttributeLocation(ii, num_attribs);
}
}
@ -1759,3 +1757,4 @@ parse_error::ParseError GLES2DecoderImpl::HandleGetActiveAttrib(
} // namespace gles2
} // namespace gpu

@ -8,16 +8,14 @@
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_H_
#include <build/build_config.h>
#if defined(OS_WIN)
#if defined(OS_LINUX)
#include "gpu/command_buffer/service/x_utils.h"
#elif defined(OS_WIN)
#include <windows.h>
#endif
#include "gpu/command_buffer/service/common_decoder.h"
namespace gpu {
// Forward-declared instead of including x_utils.h, because including glx.h
// causes havok.
class XWindowWrapper;
namespace gles2 {
// This class implements the AsyncAPIInterface interface, decoding GLES2

@ -9,25 +9,6 @@ using ::base::SharedMemory;
namespace gpu {
GPUProcessor::GPUProcessor(CommandBuffer* command_buffer)
: command_buffer_(command_buffer),
commands_per_update_(100) {
DCHECK(command_buffer);
decoder_.reset(gles2::GLES2Decoder::Create());
decoder_->set_engine(this);
}
GPUProcessor::GPUProcessor(CommandBuffer* command_buffer,
gles2::GLES2Decoder* decoder,
CommandParser* parser,
int commands_per_update)
: command_buffer_(command_buffer),
commands_per_update_(commands_per_update) {
DCHECK(command_buffer);
decoder_.reset(decoder);
parser_.reset(parser);
}
GPUProcessor::~GPUProcessor() {
}
@ -51,8 +32,6 @@ void GPUProcessor::ProcessCommands() {
command_buffer_->SetParseError(parse_error);
command_buffer_->RaiseErrorStatus();
return;
case gpu::parse_error::kParseNoError:
break;
}
++commands_processed;

@ -1,50 +0,0 @@
// 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 <gdk/gdkx.h>
#include "gpu/command_buffer/service/gpu_processor.h"
#include "gpu/command_buffer/service/x_utils.h"
using ::base::SharedMemory;
namespace gpu {
bool GPUProcessor::Initialize(gfx::PluginWindowHandle handle) {
DCHECK(handle);
// Cannot reinitialize.
if (decoder_->window() != NULL)
return false;
// Map the ring buffer and create the parser.
Buffer ring_buffer = command_buffer_->GetRingBuffer();
if (ring_buffer.ptr) {
parser_.reset(new CommandParser(ring_buffer.ptr,
ring_buffer.size,
0,
ring_buffer.size,
0,
decoder_.get()));
} else {
parser_.reset(new CommandParser(NULL, 0, 0, 0, 0,
decoder_.get()));
}
// Initialize GAPI immediately if the window handle is valid.
XWindowWrapper *window = new XWindowWrapper(GDK_DISPLAY(), handle);
decoder_->set_window_wrapper(window);
return decoder_->Initialize();
}
void GPUProcessor::Destroy() {
// Destroy GAPI if window handle has not already become invalid.
XWindowWrapper *window = decoder_->window();
if (window) {
decoder_->Destroy();
decoder_->set_window_wrapper(NULL);
delete window;
}
}
} // namespace gpu

@ -10,6 +10,25 @@ using ::base::SharedMemory;
namespace gpu {
GPUProcessor::GPUProcessor(CommandBuffer* command_buffer)
: command_buffer_(command_buffer),
commands_per_update_(100) {
DCHECK(command_buffer);
decoder_.reset(gles2::GLES2Decoder::Create());
decoder_->set_engine(this);
}
GPUProcessor::GPUProcessor(CommandBuffer* command_buffer,
gles2::GLES2Decoder* decoder,
CommandParser* parser,
int commands_per_update)
: command_buffer_(command_buffer),
commands_per_update_(commands_per_update) {
DCHECK(command_buffer);
decoder_.reset(decoder);
parser_.reset(parser);
}
bool GPUProcessor::Initialize(gfx::PluginWindowHandle handle) {
DCHECK(handle);

@ -250,13 +250,9 @@
['OS == "linux"',
{
'sources': [
'command_buffer/service/gpu_processor_linux.cc',
'command_buffer/service/x_utils.cc',
'command_buffer/service/x_utils.h',
],
'dependencies': [
'../build/linux/system.gyp:gtk',
]
},
],
['OS == "win"',

@ -38,13 +38,8 @@ int16 NPP_HandleEvent(NPP instance, void* event) {
NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value) {
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
switch (variable) {
case NPPVpluginNeedsXEmbed:
*static_cast<NPBool *>(value) = 1;
return NPERR_NO_ERROR;
default:
return NPERR_INVALID_PARAM;
}
return NPERR_GENERIC_ERROR;
}
NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value) {

@ -9557,7 +9557,7 @@ GLboolean glxewGetExtension (const char* name)
/* if (glXQueryExtensionsString == NULL || glXGetCurrentDisplay == NULL) return GL_FALSE; */
/* p = (GLubyte*)glXQueryExtensionsString(glXGetCurrentDisplay(), DefaultScreen(glXGetCurrentDisplay())); */
if (__glewXGetClientString == NULL) {
__glewXGetClientString = (PFNGLXGETCLIENTSTRINGPROC) glewGetProcAddress((const GLubyte *)"glXGetClientString");
__glewXGetClientString = (PFNGLXGETCLIENTSTRINGPROC) glewGetProcAddress("glXGetClientString");
}
if (__glewXGetClientString == NULL) return GL_FALSE;
if (glXGetCurrentDisplay == NULL) return GL_FALSE;
@ -9580,7 +9580,7 @@ GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST)
int major, minor;
static PFNGLXQUERYVERSIONPROC __glewXQueryVersion = NULL;
if (__glewXQueryVersion == NULL) {
__glewXQueryVersion = (PFNGLXQUERYVERSIONPROC) glewGetProcAddress((const GLubyte *)"glXQueryVersion");
__glewXQueryVersion = (PFNGLXQUERYVERSIONPROC) glewGetProcAddress("glXQueryVersion");
}
if (__glewXQueryVersion == NULL) return GL_FALSE;
/* initialize core GLX 1.2 */

@ -428,12 +428,7 @@
['exclude', r'/gtk_']],
}],
['OS!="mac"', {
'sources/': [['exclude', '_mac\\.(cc|mm)$']],
}],
['OS=="win" or (OS=="linux" and target_arch!="arm")', {
'dependencies': [
'../gpu/gpu.gyp:gpu_plugin',
],
'sources/': [['exclude', '_mac\\.(cc|mm)$']]
}],
['OS!="win"', {
'sources/': [['exclude', '_win\\.cc$']],
@ -451,6 +446,7 @@
],
'dependencies': [
'../build/win/system.gyp:cygwin',
'../gpu/gpu.gyp:gpu_plugin',
'default_plugin/default_plugin.gyp:default_plugin',
],
'sources!': [