webgraphicscontext3d_in_process_command_buffer_impl.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/gpu/webgraphicscontext3d_in_process_command_buffer_impl.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <GLES2/gl2.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GL_GLEXT_PROTOTYPES
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GL_GLEXT_PROTOTYPES 1
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <GLES2/gl2ext.h>
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <GLES2/gl2extchromium.h>
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/atomicops.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "gpu/command_buffer/client/gl_in_process_context.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/client/gles2_implementation.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/client/gles2_lib.h"
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h"
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/size.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_surface.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using gpu::gles2::GLES2Implementation;
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochusing gpu::GLInProcessContext;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webkit {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int32 kCommandBufferSize = 1024 * 1024;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(kbr): make the transfer buffer size configurable via context
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// creation attributes.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kStartTransferBufferSize = 4 * 1024 * 1024;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kMinTransferBufferSize = 1 * 256 * 1024;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kMaxTransferBufferSize = 16 * 1024 * 1024;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)uint32_t GenFlushID() {
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  static base::subtle::Atomic32 flush_id = 0;
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::subtle::Atomic32 my_id = base::subtle::Barrier_AtomicIncrement(
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      &flush_id, 1);
49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return static_cast<uint32_t>(my_id);
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Singleton used to initialize and terminate the gles2 library.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2Initializer {
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLES2Initializer() {
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ::gles2::Initialize();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~GLES2Initializer() {
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ::gles2::Terminate();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GLES2Initializer);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static base::LazyInstance<GLES2Initializer> g_gles2_initializer =
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LAZY_INSTANCE_INITIALIZER;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace anonymous
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::CreateViewContext(
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const blink::WebGraphicsContext3D::Attributes& attributes,
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    gfx::AcceleratedWidget window) {
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl> context;
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (gfx::GLSurface::InitializeOneOff()) {
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    context.reset(new WebGraphicsContext3DInProcessCommandBufferImpl(
80bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      scoped_ptr< ::gpu::GLInProcessContext>(), attributes, false, window));
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return context.Pass();
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static
863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::CreateOffscreenContext(
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const blink::WebGraphicsContext3D::Attributes& attributes) {
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return make_scoped_ptr(new WebGraphicsContext3DInProcessCommandBufferImpl(
90bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                             scoped_ptr< ::gpu::GLInProcessContext>(),
91bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                             attributes,
92bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                             true,
93bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                             gfx::kNullAcceleratedWidget))
943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      .Pass();
95bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
96bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
98bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochWebGraphicsContext3DInProcessCommandBufferImpl::WrapContext(
99bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    scoped_ptr< ::gpu::GLInProcessContext> context,
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const blink::WebGraphicsContext3D::Attributes& attributes) {
101bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  return make_scoped_ptr(
102bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      new WebGraphicsContext3DInProcessCommandBufferImpl(
103bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch          context.Pass(),
104bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch          attributes,
105bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch          true /* is_offscreen. Not used. */,
106bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch          gfx::kNullAcceleratedWidget /* window. Not used. */))
1073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      .Pass();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    WebGraphicsContext3DInProcessCommandBufferImpl(
112bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        scoped_ptr< ::gpu::GLInProcessContext> context,
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        const blink::WebGraphicsContext3D::Attributes& attributes,
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        bool is_offscreen,
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        gfx::AcceleratedWidget window)
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : is_offscreen_(is_offscreen),
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      window_(window),
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      initialized_(false),
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      initialize_failed_(false),
120bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      context_(context.Pass()),
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gl_(NULL),
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      context_lost_callback_(NULL),
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      context_lost_reason_(GL_NO_ERROR),
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      attributes_(attributes),
125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      flush_id_(0) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~WebGraphicsContext3DInProcessCommandBufferImpl() {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// static
133bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid WebGraphicsContext3DInProcessCommandBufferImpl::ConvertAttributes(
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const blink::WebGraphicsContext3D::Attributes& attributes,
135bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    ::gpu::GLInProcessContextAttribs* output_attribs) {
136bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  output_attribs->alpha_size = attributes.alpha ? 8 : 0;
137bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  output_attribs->depth_size = attributes.depth ? 24 : 0;
138bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  output_attribs->stencil_size = attributes.stencil ? 8 : 0;
139bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  output_attribs->samples = attributes.antialias ? 4 : 0;
140bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  output_attribs->sample_buffers = attributes.antialias ? 1 : 0;
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  output_attribs->fail_if_major_perf_caveat =
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      attributes.failIfMajorPerformanceCaveat ? 1 : 0;
143bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
144bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() {
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (initialized_)
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (initialize_failed_)
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return false;
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Ensure the gles2 library is initialized first in a thread safe way.
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  g_gles2_initializer.Get();
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!context_) {
156bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    // TODO(kbr): More work will be needed in this implementation to
157bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    // properly support GPU switching. Like in the out-of-process
158bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    // command buffer implementation, all previously created contexts
159bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    // will need to be lost either when the first context requesting the
160bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    // discrete GPU is created, or the last one is destroyed.
161bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
162bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
163bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    ::gpu::GLInProcessContextAttribs attrib_struct;
164bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    ConvertAttributes(attributes_, &attrib_struct),
165bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
166bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    context_.reset(GLInProcessContext::CreateContext(
167bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        is_offscreen_,
168bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        window_,
169bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        gfx::Size(1, 1),
170bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        attributes_.shareResources,
171bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        attrib_struct,
172bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        gpu_preference));
173bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  }
174bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
175bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  if (context_) {
176bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    base::Closure context_lost_callback = base::Bind(
177bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
178bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        base::Unretained(this));
179bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    context_->SetContextLostCallback(context_lost_callback);
180bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  } else {
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    initialize_failed_ = true;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_ = context_->GetImplementation();
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (gl_ && attributes_.noExtensions)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gl_->EnableFeatureCHROMIUM("webgl_enable_glsl_webgl_validation");
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set attributes_ from created offscreen context.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GLint alpha_bits = 0;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getIntegerv(GL_ALPHA_BITS, &alpha_bits);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    attributes_.alpha = alpha_bits > 0;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GLint depth_bits = 0;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getIntegerv(GL_DEPTH_BITS, &depth_bits);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    attributes_.depth = depth_bits > 0;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GLint stencil_bits = 0;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getIntegerv(GL_STENCIL_BITS, &stencil_bits);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    attributes_.stencil = stencil_bits > 0;
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    GLint sample_buffers = 0;
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    getIntegerv(GL_SAMPLE_BUFFERS, &sample_buffers);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    attributes_.antialias = sample_buffers > 0;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  initialized_ = true;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebGraphicsContext3DInProcessCommandBufferImpl::makeContextCurrent() {
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (!MaybeInitializeGL())
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return false;
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ::gles2::SetGLContext(gl_);
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return context_ && !isContextLost();
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)uint32_t WebGraphicsContext3DInProcessCommandBufferImpl::lastFlushID() {
218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return flush_id_;
219d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::ClearContext() {
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NOTE: Comment in the line below to check for code that is not calling
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // eglMakeCurrent where appropriate. The issue is code using
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebGraphicsContext3D does not need to call makeContextCurrent. Code using
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // direct OpenGL bindings needs to call the appropriate form of
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // eglMakeCurrent. If it doesn't it will be issuing commands on the wrong
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // context. Uncommenting the line below clears the current context so that
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // any code not calling eglMakeCurrent in the appropriate place should crash.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is not a perfect test but generally code that used the direct OpenGL
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bindings should not be mixed with code that uses WebGraphicsContext3D.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GLInProcessContext::MakeCurrent(NULL);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Helper macros to reduce the amount of code.
2364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL(name, glname)                                    \
2384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name() {           \
2394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname();                                                        \
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define DELEGATE_TO_GL_R(name, glname, rt)                              \
2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)rt WebGraphicsContext3DInProcessCommandBufferImpl::name() {             \
2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ClearContext();                                                       \
2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return gl_->glname();                                                 \
2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_1(name, glname, t1)                              \
2504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(t1 a1) {      \
2514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1);                                                      \
2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_1R(name, glname, t1, rt)                         \
2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)rt WebGraphicsContext3DInProcessCommandBufferImpl::name(t1 a1) {        \
2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return gl_->glname(a1);                                               \
2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_1RB(name, glname, t1, rt)                        \
2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)rt WebGraphicsContext3DInProcessCommandBufferImpl::name(t1 a1) {        \
2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return gl_->glname(a1) ? true : false;                                \
2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_2(name, glname, t1, t2)                          \
2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2) {                                                     \
2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2);                                                  \
2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_2R(name, glname, t1, t2, rt)                     \
2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)rt WebGraphicsContext3DInProcessCommandBufferImpl::name(t1 a1, t2 a2) { \
2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return gl_->glname(a1, a2);                                           \
2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_3(name, glname, t1, t2, t3)                      \
2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3) {                                              \
2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3);                                              \
2854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_3R(name, glname, t1, t2, t3, rt)                 \
2884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)rt WebGraphicsContext3DInProcessCommandBufferImpl::name(                \
2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3) {                                              \
2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return gl_->glname(a1, a2, a3);                                       \
2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_4(name, glname, t1, t2, t3, t4)                  \
2954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4) {                                       \
2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4);                                          \
2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_5(name, glname, t1, t2, t3, t4, t5)              \
3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) {                                \
3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4, a5);                                      \
3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_6(name, glname, t1, t2, t3, t4, t5, t6)          \
3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6) {                         \
3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
3124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4, a5, a6);                                  \
3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_7(name, glname, t1, t2, t3, t4, t5, t6, t7)      \
3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7) {                  \
3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4, a5, a6, a7);                              \
3204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_8(name, glname, t1, t2, t3, t4, t5, t6, t7, t8)  \
3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
3244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7, t8 a8) {           \
3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8);                          \
3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
3294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define DELEGATE_TO_GL_9(name, glname, t1, t2, t3, t4, t5, t6, t7, t8, t9) \
3304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::name(              \
3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7, t8 a8, t9 a9) {    \
3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ClearContext();                                                       \
3334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  gl_->glname(a1, a2, a3, a4, a5, a6, a7, a8, a9);                      \
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::prepareTexture() {
337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  NOTREACHED();
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::postSubBufferCHROMIUM(
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int x, int y, int width, int height) {
342a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  NOTREACHED();
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)DELEGATE_TO_GL_3(reshapeWithScaleFactor, ResizeCHROMIUM, int, int, float)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::synthesizeGLError(
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum error) {
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (std::find(synthetic_errors_.begin(), synthetic_errors_.end(), error) ==
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      synthetic_errors_.end()) {
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synthetic_errors_.push_back(error);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* WebGraphicsContext3DInProcessCommandBufferImpl::mapBufferSubDataCHROMIUM(
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum target,
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dintptr offset,
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dsizeiptr size,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum access) {
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gl_->MapBufferSubDataCHROMIUM(target, offset, size, access);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::unmapBufferSubDataCHROMIUM(
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const void* mem) {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gl_->UnmapBufferSubDataCHROMIUM(mem);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void* WebGraphicsContext3DInProcessCommandBufferImpl::mapTexSubImage2DCHROMIUM(
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum target,
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dint level,
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dint xoffset,
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dint yoffset,
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dsizei width,
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dsizei height,
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum format,
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum type,
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum access) {
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gl_->MapTexSubImage2DCHROMIUM(
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      target, level, xoffset, yoffset, width, height, format, type, access);
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::unmapTexSubImage2DCHROMIUM(
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const void* mem) {
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->UnmapTexSubImage2DCHROMIUM(mem);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::setVisibilityCHROMIUM(
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool visible) {
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::discardFramebufferEXT(
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum target, WGC3Dsizei numAttachments, const WGC3Denum* attachments) {
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gl_->DiscardFramebufferEXT(target, numAttachments, attachments);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    discardBackbufferCHROMIUM() {
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ensureBackbufferCHROMIUM() {
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    copyTextureToParentTextureCHROMIUM(WebGLId texture, WebGLId parentTexture) {
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rateLimitOffscreenContextCHROMIUM() {
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(gmam): See if we can comment this in.
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ClearContext();
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->RateLimitOffscreenContextCHROMIUM();
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getRequestableExtensionsCHROMIUM() {
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(gmam): See if we can comment this in.
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ClearContext();
424f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return blink::WebString::fromUTF8(
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gl_->GetRequestableExtensionsCHROMIUM());
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::requestExtensionCHROMIUM(
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* extension) {
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(gmam): See if we can comment this in.
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ClearContext();
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->RequestExtensionCHROMIUM(extension);
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::blitFramebufferCHROMIUM(
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dbitfield mask, WGC3Denum filter) {
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
440f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  gl_->BlitFramebufferCHROMIUM(
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      srcX0, srcY0, srcX1, srcY1,
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dstX0, dstY0, dstX1, dstY1,
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mask, filter);
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    renderbufferStorageMultisampleCHROMIUM(
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WGC3Dsizei width, WGC3Dsizei height) {
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  gl_->RenderbufferStorageMultisampleCHROMIUM(
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      target, samples, internalformat, width, height);
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(activeTexture, ActiveTexture, WGC3Denum)
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(attachShader, AttachShader, WebGLId, WebGLId)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(bindAttribLocation, BindAttribLocation, WebGLId,
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Duint, const WGC3Dchar*)
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(bindBuffer, BindBuffer, WGC3Denum, WebGLId)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::bindFramebuffer(
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum target,
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId framebuffer) {
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->BindFramebuffer(target, framebuffer);
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(bindRenderbuffer, BindRenderbuffer, WGC3Denum, WebGLId)
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(bindTexture, BindTexture, WGC3Denum, WebGLId)
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(blendColor, BlendColor,
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf)
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(blendEquation, BlendEquation, WGC3Denum)
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(blendEquationSeparate, BlendEquationSeparate,
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum)
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(blendFunc, BlendFunc, WGC3Denum, WGC3Denum)
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(blendFuncSeparate, BlendFuncSeparate,
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Denum)
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(bufferData, BufferData,
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dsizeiptr, const void*, WGC3Denum)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(bufferSubData, BufferSubData,
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dintptr, WGC3Dsizeiptr, const void*)
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1R(checkFramebufferStatus, CheckFramebufferStatus,
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WGC3Denum, WGC3Denum)
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(clear, Clear, WGC3Dbitfield)
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(clearColor, ClearColor,
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dclampf, WGC3Dclampf, WGC3Dclampf, WGC3Dclampf)
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(clearDepth, ClearDepthf, WGC3Dclampf)
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(clearStencil, ClearStencil, WGC3Dint)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(colorMask, ColorMask,
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dboolean, WGC3Dboolean, WGC3Dboolean, WGC3Dboolean)
5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(compileShader, CompileShader, WebGLId)
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_8(compressedTexImage2D, CompressedTexImage2D,
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dint, WGC3Dint,
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dsizei, WGC3Dsizei, const void*)
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_9(compressedTexSubImage2D, CompressedTexSubImage2D,
5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint,
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dsizei, const void*)
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_8(copyTexImage2D, CopyTexImage2D,
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dint, WGC3Dint,
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dsizei, WGC3Dsizei, WGC3Dint)
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_8(copyTexSubImage2D, CopyTexSubImage2D,
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint,
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dsizei, WGC3Dsizei)
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(cullFace, CullFace, WGC3Denum)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(depthFunc, DepthFunc, WGC3Denum)
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(depthMask, DepthMask, WGC3Dboolean)
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(depthRange, DepthRangef, WGC3Dclampf, WGC3Dclampf)
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(detachShader, DetachShader, WebGLId, WebGLId)
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(disable, Disable, WGC3Denum)
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(disableVertexAttribArray, DisableVertexAttribArray,
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Duint)
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(drawArrays, DrawArrays, WGC3Denum, WGC3Dint, WGC3Dsizei)
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::drawElements(
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum mode,
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dsizei count,
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum type,
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dintptr offset) {
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DrawElements(
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      mode, count, type,
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(enable, Enable, WGC3Denum)
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(enableVertexAttribArray, EnableVertexAttribArray,
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Duint)
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
560d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::finish() {
561d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  flush_id_ = GenFlushID();
562d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gl_->Finish();
563d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::flush() {
566d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  flush_id_ = GenFlushID();
567d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gl_->Flush();
568d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(framebufferRenderbuffer, FramebufferRenderbuffer,
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId)
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(framebufferTexture2D, FramebufferTexture2D,
5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum, WebGLId, WGC3Dint)
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(frontFace, FrontFace, WGC3Denum)
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(generateMipmap, GenerateMipmap, WGC3Denum)
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebGraphicsContext3DInProcessCommandBufferImpl::getActiveAttrib(
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId program, WGC3Duint index, ActiveInfo& info) {
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!program) {
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synthesizeGLError(GL_INVALID_VALUE);
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint max_name_length = -1;
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetProgramiv(
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      program, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &max_name_length);
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (max_name_length < 0)
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> name(new GLchar[max_name_length]);
593b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!name) {
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synthesizeGLError(GL_OUT_OF_MEMORY);
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei length = 0;
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint size = -1;
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLenum type = 0;
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetActiveAttrib(
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      program, index, max_name_length, &length, &size, &type, name.get());
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (size < 0) {
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  info.name = blink::WebString::fromUTF8(name.get(), length);
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.type = type;
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.size = size;
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebGraphicsContext3DInProcessCommandBufferImpl::getActiveUniform(
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId program, WGC3Duint index, ActiveInfo& info) {
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint max_name_length = -1;
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetProgramiv(
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      program, GL_ACTIVE_UNIFORM_MAX_LENGTH, &max_name_length);
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (max_name_length < 0)
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> name(new GLchar[max_name_length]);
620b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!name) {
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synthesizeGLError(GL_OUT_OF_MEMORY);
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei length = 0;
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint size = -1;
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLenum type = 0;
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetActiveUniform(
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      program, index, max_name_length, &length, &size, &type, name.get());
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (size < 0) {
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  info.name = blink::WebString::fromUTF8(name.get(), length);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.type = type;
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  info.size = size;
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(getAttachedShaders, GetAttachedShaders,
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WebGLId, WGC3Dsizei, WGC3Dsizei*, WebGLId*)
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2R(getAttribLocation, GetAttribLocation,
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebGLId, const WGC3Dchar*, WGC3Dint)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(getBooleanv, GetBooleanv, WGC3Denum, WGC3Dboolean*)
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getBufferParameteriv, GetBufferParameteriv,
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dint*)
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebGraphicsContext3D::Attributes
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::getContextAttributes() {
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return attributes_;
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WGC3Denum WebGraphicsContext3DInProcessCommandBufferImpl::getError() {
6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!synthetic_errors_.empty()) {
6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::vector<WGC3Denum>::iterator iter = synthetic_errors_.begin();
6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum err = *iter;
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    synthetic_errors_.erase(iter);
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return err;
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gl_->GetError();
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool WebGraphicsContext3DInProcessCommandBufferImpl::isContextLost() {
667eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return context_lost_reason_ != GL_NO_ERROR;
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(getFloatv, GetFloatv, WGC3Denum, WGC3Dfloat*)
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(getFramebufferAttachmentParameteriv,
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 GetFramebufferAttachmentParameteriv,
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Dint*)
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(getIntegerv, GetIntegerv, WGC3Denum, WGC3Dint*)
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getProgramiv, GetProgramiv, WebGLId, WGC3Denum, WGC3Dint*)
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getProgramInfoLog(WebGLId program) {
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint logLength = 0;
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!logLength)
686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> log(new GLchar[logLength]);
688b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!log)
689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei returnedLogLength = 0;
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetProgramInfoLog(
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      program, logLength, &returnedLogLength, log.get());
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(logLength, returnedLogLength + 1);
694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebString res =
695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebString::fromUTF8(log.get(), returnedLogLength);
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return res;
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getRenderbufferParameteriv, GetRenderbufferParameteriv,
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dint*)
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getShaderiv, GetShaderiv, WebGLId, WGC3Denum, WGC3Dint*)
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getShaderInfoLog(WebGLId shader) {
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint logLength = 0;
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!logLength)
710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
711c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> log(new GLchar[logLength]);
712b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!log)
713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei returnedLogLength = 0;
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetShaderInfoLog(
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shader, logLength, &returnedLogLength, log.get());
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(logLength, returnedLogLength + 1);
718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebString res =
719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebString::fromUTF8(log.get(), returnedLogLength);
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return res;
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(getShaderPrecisionFormat, GetShaderPrecisionFormat,
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dint*, WGC3Dint*)
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getShaderSource(WebGLId shader) {
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint logLength = 0;
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &logLength);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!logLength)
732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> log(new GLchar[logLength]);
734b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!log)
735f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei returnedLogLength = 0;
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetShaderSource(
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shader, logLength, &returnedLogLength, log.get());
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!returnedLogLength)
740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(logLength, returnedLogLength + 1);
742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebString res =
743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebString::fromUTF8(log.get(), returnedLogLength);
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return res;
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getTranslatedShaderSourceANGLE(WebGLId shader) {
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint logLength = 0;
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetShaderiv(
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shader, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, &logLength);
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!logLength)
754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<GLchar[]> log(new GLchar[logLength]);
756b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!log)
757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLsizei returnedLogLength = 0;
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetTranslatedShaderSourceANGLE(
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      shader, logLength, &returnedLogLength, log.get());
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!returnedLogLength)
762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return blink::WebString();
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK_EQ(logLength, returnedLogLength + 1);
764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebString res =
765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      blink::WebString::fromUTF8(log.get(), returnedLogLength);
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return res;
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebGraphicsContext3DInProcessCommandBufferImpl::getString(
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum name) {
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return blink::WebString::fromUTF8(
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reinterpret_cast<const char*>(gl_->GetString(name)));
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getTexParameterfv, GetTexParameterfv,
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dfloat*)
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getTexParameteriv, GetTexParameteriv,
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dint*)
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getUniformfv, GetUniformfv, WebGLId, WGC3Dint, WGC3Dfloat*)
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getUniformiv, GetUniformiv, WebGLId, WGC3Dint, WGC3Dint*)
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2R(getUniformLocation, GetUniformLocation,
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebGLId, const WGC3Dchar*, WGC3Dint)
7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getVertexAttribfv, GetVertexAttribfv,
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Duint, WGC3Denum, WGC3Dfloat*)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getVertexAttribiv, GetVertexAttribiv,
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Duint, WGC3Denum, WGC3Dint*)
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WGC3Dsizeiptr WebGraphicsContext3DInProcessCommandBufferImpl::
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getVertexAttribOffset(WGC3Duint index, WGC3Denum pname) {
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLvoid* value = NULL;
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NOTE: If pname is ever a value that returns more then 1 element
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this will corrupt memory.
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GetVertexAttribPointerv(index, pname, &value);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<WGC3Dsizeiptr>(reinterpret_cast<intptr_t>(value));
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(hint, Hint, WGC3Denum, WGC3Denum)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isBuffer, IsBuffer, WebGLId, WGC3Dboolean)
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isEnabled, IsEnabled, WGC3Denum, WGC3Dboolean)
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isFramebuffer, IsFramebuffer, WebGLId, WGC3Dboolean)
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isProgram, IsProgram, WebGLId, WGC3Dboolean)
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isRenderbuffer, IsRenderbuffer, WebGLId, WGC3Dboolean)
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isShader, IsShader, WebGLId, WGC3Dboolean)
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1RB(isTexture, IsTexture, WebGLId, WGC3Dboolean)
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(lineWidth, LineWidth, WGC3Dfloat)
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(linkProgram, LinkProgram, WebGLId)
8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(pixelStorei, PixelStorei, WGC3Denum, WGC3Dint)
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(polygonOffset, PolygonOffset, WGC3Dfloat, WGC3Dfloat)
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_7(readPixels, ReadPixels,
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei, WGC3Denum,
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, void*)
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::releaseShaderCompiler() {
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(renderbufferStorage, RenderbufferStorage,
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dsizei, WGC3Dsizei)
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(sampleCoverage, SampleCoverage, WGC3Dfloat, WGC3Dboolean)
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(scissor, Scissor, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::shaderSource(
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId shader, const WGC3Dchar* string) {
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLint length = strlen(string);
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->ShaderSource(shader, 1, &string, &length);
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(stencilFunc, StencilFunc, WGC3Denum, WGC3Dint, WGC3Duint)
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(stencilFuncSeparate, StencilFuncSeparate,
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dint, WGC3Duint)
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(stencilMask, StencilMask, WGC3Duint)
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(stencilMaskSeparate, StencilMaskSeparate,
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Duint)
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(stencilOp, StencilOp,
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum)
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(stencilOpSeparate, StencilOpSeparate,
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Denum, WGC3Denum)
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_9(texImage2D, TexImage2D,
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei,
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Denum, WGC3Denum, const void*)
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(texParameterf, TexParameterf,
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Denum, WGC3Dfloat);
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const unsigned int kTextureWrapR = 0x8072;
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::texParameteri(
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Denum target, WGC3Denum pname, WGC3Dint param) {
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(kbr): figure out whether the setting of TEXTURE_WRAP_R in
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // GraphicsContext3D.cpp is strictly necessary to avoid seams at the
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // edge of cube maps, and, if it is, push it into the GLES2 service
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // side code.
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (pname == kTextureWrapR) {
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->TexParameteri(target, pname, param);
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_9(texSubImage2D, TexSubImage2D,
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei,
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dsizei, WGC3Denum, WGC3Denum, const void*)
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(uniform1f, Uniform1f, WGC3Dint, WGC3Dfloat)
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform1fv, Uniform1fv, WGC3Dint, WGC3Dsizei,
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(uniform1i, Uniform1i, WGC3Dint, WGC3Dint)
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform1iv, Uniform1iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform2f, Uniform2f, WGC3Dint, WGC3Dfloat, WGC3Dfloat)
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform2fv, Uniform2fv, WGC3Dint, WGC3Dsizei,
9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform2i, Uniform2i, WGC3Dint, WGC3Dint, WGC3Dint)
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform2iv, Uniform2iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(uniform3f, Uniform3f, WGC3Dint,
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform3fv, Uniform3fv, WGC3Dint, WGC3Dsizei,
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(uniform3i, Uniform3i, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint)
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform3iv, Uniform3iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(uniform4f, Uniform4f, WGC3Dint,
9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform4fv, Uniform4fv, WGC3Dint, WGC3Dsizei,
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(uniform4i, Uniform4i, WGC3Dint,
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dint)
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(uniform4iv, Uniform4iv, WGC3Dint, WGC3Dsizei, const WGC3Dint*)
9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(uniformMatrix2fv, UniformMatrix2fv,
9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(uniformMatrix3fv, UniformMatrix3fv,
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(uniformMatrix4fv, UniformMatrix4fv,
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dsizei, WGC3Dboolean, const WGC3Dfloat*)
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(useProgram, UseProgram, WebGLId)
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(validateProgram, ValidateProgram, WebGLId)
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(vertexAttrib1f, VertexAttrib1f, WGC3Duint, WGC3Dfloat)
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(vertexAttrib1fv, VertexAttrib1fv, WGC3Duint,
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(vertexAttrib2f, VertexAttrib2f, WGC3Duint,
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dfloat, WGC3Dfloat)
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(vertexAttrib2fv, VertexAttrib2fv, WGC3Duint,
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(vertexAttrib3f, VertexAttrib3f, WGC3Duint,
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(vertexAttrib3fv, VertexAttrib3fv, WGC3Duint,
9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(vertexAttrib4f, VertexAttrib4f, WGC3Duint,
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dfloat, WGC3Dfloat, WGC3Dfloat, WGC3Dfloat)
9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(vertexAttrib4fv, VertexAttrib4fv, WGC3Duint,
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const WGC3Dfloat*)
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::vertexAttribPointer(
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Duint index, WGC3Dint size, WGC3Denum type, WGC3Dboolean normalized,
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WGC3Dsizei stride, WGC3Dintptr offset) {
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->VertexAttribPointer(
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      index, size, type, normalized, stride,
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      reinterpret_cast<void*>(static_cast<intptr_t>(offset)));
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_4(viewport, Viewport,
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei)
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(genBuffers, GenBuffers, WGC3Dsizei, WebGLId*);
9811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(genFramebuffers, GenFramebuffers, WGC3Dsizei, WebGLId*);
9831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(genRenderbuffers, GenRenderbuffers, WGC3Dsizei, WebGLId*);
9851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(genTextures, GenTextures, WGC3Dsizei, WebGLId*);
9871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(deleteBuffers, DeleteBuffers, WGC3Dsizei, WebGLId*);
9891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(deleteFramebuffers, DeleteFramebuffers, WGC3Dsizei, WebGLId*);
9911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(deleteRenderbuffers, DeleteRenderbuffers, WGC3Dsizei,
9931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                 WebGLId*);
9941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_2(deleteTextures, DeleteTextures, WGC3Dsizei, WebGLId*);
9961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGLId WebGraphicsContext3DInProcessCommandBufferImpl::createBuffer() {
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint o;
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GenBuffers(1, &o);
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return o;
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGLId WebGraphicsContext3DInProcessCommandBufferImpl::createFramebuffer() {
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint o = 0;
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GenFramebuffers(1, &o);
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return o;
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGLId WebGraphicsContext3DInProcessCommandBufferImpl::createRenderbuffer() {
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint o;
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GenRenderbuffers(1, &o);
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return o;
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGLId WebGraphicsContext3DInProcessCommandBufferImpl::createTexture() {
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint o;
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GenTextures(1, &o);
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return o;
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::deleteBuffer(
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId buffer) {
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DeleteBuffers(1, &buffer);
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::deleteFramebuffer(
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId framebuffer) {
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DeleteFramebuffers(1, &framebuffer);
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::deleteRenderbuffer(
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId renderbuffer) {
10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DeleteRenderbuffers(1, &renderbuffer);
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::deleteTexture(
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGLId texture) {
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ClearContext();
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DeleteTextures(1, &texture);
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_R(createProgram, CreateProgram, WebGLId);
10501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_1R(createShader, CreateShader, WGC3Denum, WebGLId);
10521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_1(deleteProgram, DeleteProgram, WebGLId);
10541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DELEGATE_TO_GL_1(deleteShader, DeleteShader, WebGLId);
10561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::setContextLostCallback(
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebGraphicsContext3D::WebGraphicsContextLostCallback* cb) {
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  context_lost_callback_ = cb;
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WGC3Denum WebGraphicsContext3DInProcessCommandBufferImpl::
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    getGraphicsResetStatusARB() {
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return context_lost_reason_;
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(texImageIOSurface2DCHROMIUM, TexImageIOSurface2DCHROMIUM,
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Dint, WGC3Duint, WGC3Duint)
10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_5(texStorage2DEXT, TexStorage2DEXT,
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint, WGC3Duint, WGC3Dint, WGC3Dint)
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebGLId WebGraphicsContext3DInProcessCommandBufferImpl::createQueryEXT() {
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint o;
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->GenQueriesEXT(1, &o);
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return o;
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    deleteQueryEXT(WebGLId query) {
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->DeleteQueriesEXT(1, &query);
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1R(isQueryEXT, IsQueryEXT, WebGLId, WGC3Dboolean)
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(beginQueryEXT, BeginQueryEXT, WGC3Denum, WebGLId)
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(endQueryEXT, EndQueryEXT, WGC3Denum)
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getQueryivEXT, GetQueryivEXT, WGC3Denum, WGC3Denum, WGC3Dint*)
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(getQueryObjectuivEXT, GetQueryObjectuivEXT,
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WebGLId, WGC3Denum, WGC3Duint*)
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)DELEGATE_TO_GL_6(copyTextureCHROMIUM, CopyTextureCHROMIUM, WGC3Denum, WGC3Duint,
1092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                 WGC3Duint, WGC3Dint, WGC3Denum, WGC3Denum)
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::insertEventMarkerEXT(
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WGC3Dchar* marker) {
10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->InsertEventMarkerEXT(0, marker);
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::pushGroupMarkerEXT(
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const WGC3Dchar* marker) {
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gl_->PushGroupMarkerEXT(0, marker);
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL(popGroupMarkerEXT, PopGroupMarkerEXT);
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(bindTexImage2DCHROMIUM, BindTexImage2DCHROMIUM,
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint)
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(releaseTexImage2DCHROMIUM, ReleaseTexImage2DCHROMIUM,
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, WGC3Dint)
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)DELEGATE_TO_GL_1R(createStreamTextureCHROMIUM, CreateStreamTextureCHROMIUM,
11123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  WebGLId, WebGLId)
11133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)DELEGATE_TO_GL_1(destroyStreamTextureCHROMIUM, DestroyStreamTextureCHROMIUM,
11143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                 WebGLId)
11153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void* WebGraphicsContext3DInProcessCommandBufferImpl::mapBufferCHROMIUM(
11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum target, WGC3Denum access) {
11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ClearContext();
11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return gl_->MapBufferCHROMIUM(target, access);
11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WGC3Dboolean WebGraphicsContext3DInProcessCommandBufferImpl::
11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    unmapBufferCHROMIUM(WGC3Denum target) {
11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ClearContext();
11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return gl_->UnmapBufferCHROMIUM(target);
11262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GrGLInterface* WebGraphicsContext3DInProcessCommandBufferImpl::
112968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    createGrGLInterface() {
1130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return skia_bindings::CreateCommandBufferSkiaGLBinding();
1131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)::gpu::gles2::GLES2Interface*
1134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::GetGLInterface() {
1135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return gl_;
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)::gpu::ContextSupport*
11398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)WebGraphicsContext3DInProcessCommandBufferImpl::GetContextSupport() {
11408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  return gl_;
11418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
11428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() {
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(kbr): improve the precision here.
11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  context_lost_reason_ = GL_UNKNOWN_CONTEXT_RESET_ARB;
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (context_lost_callback_) {
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    context_lost_callback_->onContextLost();
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DELEGATE_TO_GL_3R(createImageCHROMIUM, CreateImageCHROMIUM,
115290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  WGC3Dsizei, WGC3Dsizei, WGC3Denum, WGC3Duint);
115390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
115490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DELEGATE_TO_GL_1(destroyImageCHROMIUM, DestroyImageCHROMIUM, WGC3Duint);
115590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
115690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DELEGATE_TO_GL_3(getImageParameterivCHROMIUM, GetImageParameterivCHROMIUM,
115790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                 WGC3Duint, WGC3Denum, GLint*);
115890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
115990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DELEGATE_TO_GL_2R(mapImageCHROMIUM, MapImageCHROMIUM,
116090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                  WGC3Duint, WGC3Denum, void*);
116190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
116290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)DELEGATE_TO_GL_1(unmapImageCHROMIUM, UnmapImageCHROMIUM, WGC3Duint);
116390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_3(bindUniformLocationCHROMIUM, BindUniformLocationCHROMIUM,
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WebGLId, WGC3Dint, const WGC3Dchar*)
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::shallowFlushCHROMIUM() {
1168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  flush_id_ = GenFlushID();
1169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gl_->ShallowFlushCHROMIUM();
1170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
1171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::shallowFinishCHROMIUM() {
1173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  flush_id_ = GenFlushID();
1174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gl_->ShallowFinishCHROMIUM();
1175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_1(genMailboxCHROMIUM, GenMailboxCHROMIUM, WGC3Dbyte*)
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(produceTextureCHROMIUM, ProduceTextureCHROMIUM,
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, const WGC3Dbyte*)
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DELEGATE_TO_GL_2(consumeTextureCHROMIUM, ConsumeTextureCHROMIUM,
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 WGC3Denum, const WGC3Dbyte*)
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DELEGATE_TO_GL_2(drawBuffersEXT, DrawBuffersEXT,
11842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 WGC3Dsizei, const WGC3Denum*)
11852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)DELEGATE_TO_GL_R(insertSyncPoint, InsertSyncPointCHROMIUM, unsigned)
1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void WebGraphicsContext3DInProcessCommandBufferImpl::loseContextCHROMIUM(
1189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    WGC3Denum current, WGC3Denum other) {
1190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  gl_->LoseContextCHROMIUM(current, other);
11917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  gl_->ShallowFlushCHROMIUM();
1192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
1193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DELEGATE_TO_GL_9(asyncTexImage2DCHROMIUM, AsyncTexImage2DCHROMIUM,
11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum, WGC3Dint, WGC3Denum, WGC3Dsizei, WGC3Dsizei, WGC3Dint,
11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum, WGC3Denum, const void*)
11972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DELEGATE_TO_GL_9(asyncTexSubImage2DCHROMIUM, AsyncTexSubImage2DCHROMIUM,
11992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum, WGC3Dint, WGC3Dint, WGC3Dint, WGC3Dsizei, WGC3Dsizei,
12002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum, WGC3Denum, const void*)
12012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DELEGATE_TO_GL_1(waitAsyncTexImage2DCHROMIUM, WaitAsyncTexImage2DCHROMIUM,
12032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    WGC3Denum)
12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace webkit
1207