| Index: gpu/gles2_conform_support/egl/display.cc
|
| ===================================================================
|
| --- gpu/gles2_conform_support/egl/display.cc (revision 86314)
|
| +++ gpu/gles2_conform_support/egl/display.cc (working copy)
|
| @@ -1,187 +0,0 @@
|
| -// Copyright (c) 2011 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/gles2_conform_support/egl/display.h"
|
| -
|
| -#include <vector>
|
| -#include "gpu/command_buffer/client/gles2_lib.h"
|
| -#include "gpu/command_buffer/service/command_buffer_service.h"
|
| -#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
|
| -#include "gpu/command_buffer/service/gpu_scheduler.h"
|
| -#include "gpu/GLES2/gles2_command_buffer.h"
|
| -#include "gpu/gles2_conform_support/egl/config.h"
|
| -#include "gpu/gles2_conform_support/egl/surface.h"
|
| -
|
| -namespace {
|
| -const int32 kCommandBufferSize = 1024 * 1024;
|
| -const int32 kTransferBufferSize = 512 * 1024;
|
| -}
|
| -
|
| -namespace egl {
|
| -
|
| -Display::Display(EGLNativeDisplayType display_id)
|
| - : display_id_(display_id),
|
| - is_initialized_(false),
|
| - transfer_buffer_id_(-1) {
|
| -}
|
| -
|
| -Display::~Display() {
|
| - gles2::Terminate();
|
| -}
|
| -
|
| -bool Display::Initialize() {
|
| - using gpu::CommandBufferService;
|
| - scoped_ptr<CommandBufferService> command_buffer(new CommandBufferService);
|
| - if (!command_buffer->Initialize(kCommandBufferSize))
|
| - return false;
|
| -
|
| - using gpu::Buffer;
|
| - int32 transfer_buffer_id =
|
| - command_buffer->CreateTransferBuffer(kTransferBufferSize, -1);
|
| - Buffer transfer_buffer =
|
| - command_buffer->GetTransferBuffer(transfer_buffer_id);
|
| - if (transfer_buffer.ptr == NULL)
|
| - return false;
|
| -
|
| - using gpu::gles2::GLES2CmdHelper;
|
| - scoped_ptr<GLES2CmdHelper> cmd_helper(
|
| - new GLES2CmdHelper(command_buffer.get()));
|
| - if (!cmd_helper->Initialize(kCommandBufferSize))
|
| - return false;
|
| -
|
| - gles2::Initialize();
|
| -
|
| - is_initialized_ = true;
|
| - command_buffer_.reset(command_buffer.release());
|
| - transfer_buffer_id_ = transfer_buffer_id;
|
| - gles2_cmd_helper_.reset(cmd_helper.release());
|
| - return true;
|
| -}
|
| -
|
| -bool Display::IsValidConfig(EGLConfig config) {
|
| - return (config != NULL) && (config == config_.get());
|
| -}
|
| -
|
| -bool Display::GetConfigs(EGLConfig* configs,
|
| - EGLint config_size,
|
| - EGLint* num_config) {
|
| - // TODO(alokp): Find out a way to find all configs. CommandBuffer currently
|
| - // does not support finding or choosing configs.
|
| - *num_config = 1;
|
| - if (configs != NULL) {
|
| - if (config_ == NULL) {
|
| - config_.reset(new Config);
|
| - }
|
| - configs[0] = config_.get();
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool Display::GetConfigAttrib(EGLConfig config,
|
| - EGLint attribute,
|
| - EGLint* value) {
|
| - const egl::Config* cfg = static_cast<egl::Config*>(config);
|
| - return cfg->GetAttrib(attribute, value);
|
| -}
|
| -
|
| -bool Display::IsValidNativeWindow(EGLNativeWindowType win) {
|
| -#if defined OS_WIN
|
| - return ::IsWindow(win) != FALSE;
|
| -#else
|
| - // TODO(alokp): Validate window handle.
|
| - return true;
|
| -#endif // OS_WIN
|
| -}
|
| -
|
| -bool Display::IsValidSurface(EGLSurface surface) {
|
| - return (surface != NULL) && (surface == surface_.get());
|
| -}
|
| -
|
| -EGLSurface Display::CreateWindowSurface(EGLConfig config,
|
| - EGLNativeWindowType win,
|
| - const EGLint* attrib_list) {
|
| - if (surface_ != NULL) {
|
| - // We do not support more than one window surface.
|
| - return EGL_NO_SURFACE;
|
| - }
|
| -
|
| - using gpu::GpuScheduler;
|
| - std::vector<int32> attribs;
|
| - scoped_ptr<GpuScheduler> gpu_scheduler(
|
| - new GpuScheduler(command_buffer_.get(), NULL));
|
| - if (!gpu_scheduler->Initialize(
|
| - win, gfx::Size(), gpu::gles2::DisallowedExtensions(), NULL,
|
| - attribs, NULL, 0))
|
| - return EGL_NO_SURFACE;
|
| -
|
| - command_buffer_->SetPutOffsetChangeCallback(
|
| - NewCallback(gpu_scheduler.get(), &GpuScheduler::PutChanged));
|
| - gpu_scheduler_.reset(gpu_scheduler.release());
|
| - surface_.reset(new Surface(win));
|
| -
|
| - return surface_.get();
|
| -}
|
| -
|
| -void Display::DestroySurface(EGLSurface surface) {
|
| - DCHECK(IsValidSurface(surface));
|
| - gpu_scheduler_.reset();
|
| - surface_.reset();
|
| -}
|
| -
|
| -void Display::SwapBuffers(EGLSurface surface) {
|
| - DCHECK(IsValidSurface(surface));
|
| - context_->SwapBuffers();
|
| -}
|
| -
|
| -bool Display::IsValidContext(EGLContext ctx) {
|
| - return (ctx != NULL) && (ctx == context_.get());
|
| -}
|
| -
|
| -EGLContext Display::CreateContext(EGLConfig config,
|
| - EGLContext share_ctx,
|
| - const EGLint* attrib_list) {
|
| - DCHECK(IsValidConfig(config));
|
| - // TODO(alokp): Command buffer does not support shared contexts.
|
| - if (share_ctx != NULL)
|
| - return EGL_NO_CONTEXT;
|
| -
|
| - DCHECK(command_buffer_ != NULL);
|
| - DCHECK(transfer_buffer_id_ != -1);
|
| - gpu::Buffer buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id_);
|
| - DCHECK(buffer.ptr != NULL);
|
| - bool share_resources = share_ctx != NULL;
|
| - using gpu::gles2::GLES2Implementation;
|
| - context_.reset(new GLES2Implementation(
|
| - gles2_cmd_helper_.get(),
|
| - buffer.size,
|
| - buffer.ptr,
|
| - transfer_buffer_id_,
|
| - share_resources));
|
| -
|
| - context_->CommandBufferEnableCHROMIUM(
|
| - PEPPER3D_ALLOW_BUFFERS_ON_MULTIPLE_TARGETS);
|
| - context_->CommandBufferEnableCHROMIUM(
|
| - PEPPER3D_SUPPORT_FIXED_ATTRIBS);
|
| -
|
| - return context_.get();
|
| -}
|
| -
|
| -void Display::DestroyContext(EGLContext ctx) {
|
| - DCHECK(IsValidContext(ctx));
|
| - context_.reset();
|
| -}
|
| -
|
| -bool Display::MakeCurrent(EGLSurface draw, EGLSurface read, EGLContext ctx) {
|
| - if (ctx == EGL_NO_CONTEXT) {
|
| - gles2::SetGLContext(NULL);
|
| - } else {
|
| - DCHECK(IsValidSurface(draw));
|
| - DCHECK(IsValidSurface(read));
|
| - DCHECK(IsValidContext(ctx));
|
| - gles2::SetGLContext(context_.get());
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace egl
|
|
|