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 |