Home | History | Annotate | Download | only in gpu
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
      6 #define WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
      7 
      8 #if defined(ENABLE_GPU)
      9 
     10 #include <vector>
     11 
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
     15 #include "third_party/WebKit/public/platform/WebString.h"
     16 #include "ui/gfx/native_widget_types.h"
     17 #include "webkit/common/gpu/webkit_gpu_export.h"
     18 
     19 namespace gpu {
     20 namespace gles2 {
     21 class GLES2Implementation;
     22 }
     23 }
     24 
     25 using WebKit::WebGLId;
     26 
     27 using WebKit::WGC3Dbyte;
     28 using WebKit::WGC3Dchar;
     29 using WebKit::WGC3Denum;
     30 using WebKit::WGC3Dboolean;
     31 using WebKit::WGC3Dbitfield;
     32 using WebKit::WGC3Dint;
     33 using WebKit::WGC3Dsizei;
     34 using WebKit::WGC3Duint;
     35 using WebKit::WGC3Dfloat;
     36 using WebKit::WGC3Dclampf;
     37 using WebKit::WGC3Dintptr;
     38 using WebKit::WGC3Dsizeiptr;
     39 
     40 namespace gpu {
     41 class GLInProcessContext;
     42 struct GLInProcessContextAttribs;
     43 }
     44 
     45 namespace webkit {
     46 namespace gpu {
     47 
     48 class WEBKIT_GPU_EXPORT WebGraphicsContext3DInProcessCommandBufferImpl
     49     : public NON_EXPORTED_BASE(WebKit::WebGraphicsContext3D) {
     50  public:
     51   static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
     52       CreateViewContext(
     53           const WebKit::WebGraphicsContext3D::Attributes& attributes,
     54           gfx::AcceleratedWidget window);
     55 
     56   static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
     57       CreateOffscreenContext(
     58           const WebKit::WebGraphicsContext3D::Attributes& attributes);
     59 
     60   static scoped_ptr<WebGraphicsContext3DInProcessCommandBufferImpl>
     61       WrapContext(
     62           scoped_ptr< ::gpu::GLInProcessContext> context,
     63           const WebKit::WebGraphicsContext3D::Attributes& attributes);
     64 
     65   virtual ~WebGraphicsContext3DInProcessCommandBufferImpl();
     66 
     67   // Convert WebGL context creation attributes into GLInProcessContext / EGL
     68   // size requests.
     69   static void ConvertAttributes(
     70       const WebKit::WebGraphicsContext3D::Attributes& attributes,
     71       ::gpu::GLInProcessContextAttribs* output_attribs);
     72 
     73   //----------------------------------------------------------------------
     74   // WebGraphicsContext3D methods
     75   virtual bool makeContextCurrent();
     76 
     77   virtual int width();
     78   virtual int height();
     79 
     80   virtual void reshape(int width, int height);
     81   virtual void reshapeWithScaleFactor(int width, int height, float scaleFactor);
     82 
     83   virtual void prepareTexture();
     84   virtual void postSubBufferCHROMIUM(int x, int y, int width, int height);
     85 
     86   virtual void activeTexture(WGC3Denum texture);
     87   virtual void attachShader(WebGLId program, WebGLId shader);
     88   virtual void bindAttribLocation(WebGLId program, WGC3Duint index,
     89                                   const WGC3Dchar* name);
     90   virtual void bindBuffer(WGC3Denum target, WebGLId buffer);
     91   virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer);
     92   virtual void bindRenderbuffer(WGC3Denum target, WebGLId renderbuffer);
     93   virtual void bindTexture(WGC3Denum target, WebGLId texture);
     94   virtual void blendColor(WGC3Dclampf red, WGC3Dclampf green,
     95                           WGC3Dclampf blue, WGC3Dclampf alpha);
     96   virtual void blendEquation(WGC3Denum mode);
     97   virtual void blendEquationSeparate(WGC3Denum modeRGB,
     98                                      WGC3Denum modeAlpha);
     99   virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor);
    100   virtual void blendFuncSeparate(WGC3Denum srcRGB,
    101                                  WGC3Denum dstRGB,
    102                                  WGC3Denum srcAlpha,
    103                                  WGC3Denum dstAlpha);
    104 
    105   virtual void bufferData(WGC3Denum target, WGC3Dsizeiptr size,
    106                           const void* data, WGC3Denum usage);
    107   virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset,
    108                              WGC3Dsizeiptr size, const void* data);
    109 
    110   virtual WGC3Denum checkFramebufferStatus(WGC3Denum target);
    111   virtual void clear(WGC3Dbitfield mask);
    112   virtual void clearColor(WGC3Dclampf red, WGC3Dclampf green,
    113                           WGC3Dclampf blue, WGC3Dclampf alpha);
    114   virtual void clearDepth(WGC3Dclampf depth);
    115   virtual void clearStencil(WGC3Dint s);
    116   virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green,
    117                          WGC3Dboolean blue, WGC3Dboolean alpha);
    118   virtual void compileShader(WebGLId shader);
    119 
    120   virtual void compressedTexImage2D(WGC3Denum target,
    121                                     WGC3Dint level,
    122                                     WGC3Denum internalformat,
    123                                     WGC3Dsizei width,
    124                                     WGC3Dsizei height,
    125                                     WGC3Dint border,
    126                                     WGC3Dsizei imageSize,
    127                                     const void* data);
    128   virtual void compressedTexSubImage2D(WGC3Denum target,
    129                                        WGC3Dint level,
    130                                        WGC3Dint xoffset,
    131                                        WGC3Dint yoffset,
    132                                        WGC3Dsizei width,
    133                                        WGC3Dsizei height,
    134                                        WGC3Denum format,
    135                                        WGC3Dsizei imageSize,
    136                                        const void* data);
    137   virtual void copyTexImage2D(WGC3Denum target,
    138                               WGC3Dint level,
    139                               WGC3Denum internalformat,
    140                               WGC3Dint x,
    141                               WGC3Dint y,
    142                               WGC3Dsizei width,
    143                               WGC3Dsizei height,
    144                               WGC3Dint border);
    145   virtual void copyTexSubImage2D(WGC3Denum target,
    146                                  WGC3Dint level,
    147                                  WGC3Dint xoffset,
    148                                  WGC3Dint yoffset,
    149                                  WGC3Dint x,
    150                                  WGC3Dint y,
    151                                  WGC3Dsizei width,
    152                                  WGC3Dsizei height);
    153   virtual void cullFace(WGC3Denum mode);
    154   virtual void depthFunc(WGC3Denum func);
    155   virtual void depthMask(WGC3Dboolean flag);
    156   virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar);
    157   virtual void detachShader(WebGLId program, WebGLId shader);
    158   virtual void disable(WGC3Denum cap);
    159   virtual void disableVertexAttribArray(WGC3Duint index);
    160   virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count);
    161   virtual void drawElements(WGC3Denum mode,
    162                             WGC3Dsizei count,
    163                             WGC3Denum type,
    164                             WGC3Dintptr offset);
    165 
    166   virtual void enable(WGC3Denum cap);
    167   virtual void enableVertexAttribArray(WGC3Duint index);
    168   virtual void finish();
    169   virtual void flush();
    170   virtual void framebufferRenderbuffer(WGC3Denum target,
    171                                        WGC3Denum attachment,
    172                                        WGC3Denum renderbuffertarget,
    173                                        WebGLId renderbuffer);
    174   virtual void framebufferTexture2D(WGC3Denum target,
    175                                     WGC3Denum attachment,
    176                                     WGC3Denum textarget,
    177                                     WebGLId texture,
    178                                     WGC3Dint level);
    179   virtual void frontFace(WGC3Denum mode);
    180   virtual void generateMipmap(WGC3Denum target);
    181 
    182   virtual bool getActiveAttrib(WebGLId program,
    183                                WGC3Duint index,
    184                                ActiveInfo&);
    185   virtual bool getActiveUniform(WebGLId program,
    186                                 WGC3Duint index,
    187                                 ActiveInfo&);
    188 
    189   virtual void getAttachedShaders(WebGLId program,
    190                                   WGC3Dsizei maxCount,
    191                                   WGC3Dsizei* count,
    192                                   WebGLId* shaders);
    193 
    194   virtual WGC3Dint  getAttribLocation(WebGLId program, const WGC3Dchar* name);
    195 
    196   virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value);
    197 
    198   virtual void getBufferParameteriv(WGC3Denum target,
    199                                     WGC3Denum pname,
    200                                     WGC3Dint* value);
    201 
    202   virtual Attributes getContextAttributes();
    203 
    204   virtual WGC3Denum getError();
    205 
    206   virtual bool isContextLost();
    207 
    208   virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value);
    209 
    210   virtual void getFramebufferAttachmentParameteriv(WGC3Denum target,
    211                                                    WGC3Denum attachment,
    212                                                    WGC3Denum pname,
    213                                                    WGC3Dint* value);
    214 
    215   virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value);
    216 
    217   virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value);
    218 
    219   virtual WebKit::WebString getProgramInfoLog(WebGLId program);
    220 
    221   virtual void getRenderbufferParameteriv(WGC3Denum target,
    222                                           WGC3Denum pname,
    223                                           WGC3Dint* value);
    224 
    225   virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value);
    226 
    227   virtual WebKit::WebString getShaderInfoLog(WebGLId shader);
    228 
    229   virtual void getShaderPrecisionFormat(WGC3Denum shadertype,
    230                                         WGC3Denum precisiontype,
    231                                         WGC3Dint* range,
    232                                         WGC3Dint* precision);
    233 
    234   virtual WebKit::WebString getShaderSource(WebGLId shader);
    235   virtual WebKit::WebString getString(WGC3Denum name);
    236 
    237   virtual void getTexParameterfv(WGC3Denum target,
    238                                  WGC3Denum pname,
    239                                  WGC3Dfloat* value);
    240   virtual void getTexParameteriv(WGC3Denum target,
    241                                  WGC3Denum pname,
    242                                  WGC3Dint* value);
    243 
    244   virtual void getUniformfv(WebGLId program,
    245                             WGC3Dint location,
    246                             WGC3Dfloat* value);
    247   virtual void getUniformiv(WebGLId program,
    248                             WGC3Dint location,
    249                             WGC3Dint* value);
    250 
    251   virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name);
    252 
    253   virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname,
    254                                  WGC3Dfloat* value);
    255   virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname,
    256                                  WGC3Dint* value);
    257 
    258   virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname);
    259 
    260   virtual void hint(WGC3Denum target, WGC3Denum mode);
    261   virtual WGC3Dboolean isBuffer(WebGLId buffer);
    262   virtual WGC3Dboolean isEnabled(WGC3Denum cap);
    263   virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer);
    264   virtual WGC3Dboolean isProgram(WebGLId program);
    265   virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer);
    266   virtual WGC3Dboolean isShader(WebGLId shader);
    267   virtual WGC3Dboolean isTexture(WebGLId texture);
    268   virtual void lineWidth(WGC3Dfloat);
    269   virtual void linkProgram(WebGLId program);
    270   virtual void pixelStorei(WGC3Denum pname, WGC3Dint param);
    271   virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units);
    272 
    273   virtual void readPixels(WGC3Dint x,
    274                           WGC3Dint y,
    275                           WGC3Dsizei width,
    276                           WGC3Dsizei height,
    277                           WGC3Denum format,
    278                           WGC3Denum type,
    279                           void* pixels);
    280 
    281   virtual void releaseShaderCompiler();
    282   virtual void renderbufferStorage(WGC3Denum target,
    283                                    WGC3Denum internalformat,
    284                                    WGC3Dsizei width,
    285                                    WGC3Dsizei height);
    286   virtual void sampleCoverage(WGC3Dfloat value, WGC3Dboolean invert);
    287   virtual void scissor(WGC3Dint x, WGC3Dint y,
    288                        WGC3Dsizei width, WGC3Dsizei height);
    289   virtual void shaderSource(WebGLId shader, const WGC3Dchar* string);
    290   virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
    291   virtual void stencilFuncSeparate(WGC3Denum face,
    292                                    WGC3Denum func,
    293                                    WGC3Dint ref,
    294                                    WGC3Duint mask);
    295   virtual void stencilMask(WGC3Duint mask);
    296   virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask);
    297   virtual void stencilOp(WGC3Denum fail,
    298                          WGC3Denum zfail,
    299                          WGC3Denum zpass);
    300   virtual void stencilOpSeparate(WGC3Denum face,
    301                                  WGC3Denum fail,
    302                                  WGC3Denum zfail,
    303                                  WGC3Denum zpass);
    304 
    305   virtual void texImage2D(WGC3Denum target,
    306                           WGC3Dint level,
    307                           WGC3Denum internalformat,
    308                           WGC3Dsizei width,
    309                           WGC3Dsizei height,
    310                           WGC3Dint border,
    311                           WGC3Denum format,
    312                           WGC3Denum type,
    313                           const void* pixels);
    314 
    315   virtual void texParameterf(WGC3Denum target,
    316                              WGC3Denum pname,
    317                              WGC3Dfloat param);
    318   virtual void texParameteri(WGC3Denum target,
    319                              WGC3Denum pname,
    320                              WGC3Dint param);
    321 
    322   virtual void texSubImage2D(WGC3Denum target,
    323                              WGC3Dint level,
    324                              WGC3Dint xoffset,
    325                              WGC3Dint yoffset,
    326                              WGC3Dsizei width,
    327                              WGC3Dsizei height,
    328                              WGC3Denum format,
    329                              WGC3Denum type,
    330                              const void* pixels);
    331 
    332   virtual void uniform1f(WGC3Dint location, WGC3Dfloat x);
    333   virtual void uniform1fv(WGC3Dint location,
    334                           WGC3Dsizei count, const WGC3Dfloat* v);
    335   virtual void uniform1i(WGC3Dint location, WGC3Dint x);
    336   virtual void uniform1iv(WGC3Dint location,
    337                           WGC3Dsizei count, const WGC3Dint* v);
    338   virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y);
    339   virtual void uniform2fv(WGC3Dint location,
    340                           WGC3Dsizei count, const WGC3Dfloat* v);
    341   virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y);
    342   virtual void uniform2iv(WGC3Dint location,
    343                           WGC3Dsizei count, const WGC3Dint* v);
    344   virtual void uniform3f(WGC3Dint location,
    345                          WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
    346   virtual void uniform3fv(WGC3Dint location,
    347                           WGC3Dsizei count, const WGC3Dfloat* v);
    348   virtual void uniform3i(WGC3Dint location,
    349                          WGC3Dint x, WGC3Dint y, WGC3Dint z);
    350   virtual void uniform3iv(WGC3Dint location,
    351                           WGC3Dsizei count, const WGC3Dint* v);
    352   virtual void uniform4f(WGC3Dint location,
    353                          WGC3Dfloat x, WGC3Dfloat y,
    354                          WGC3Dfloat z, WGC3Dfloat w);
    355   virtual void uniform4fv(WGC3Dint location,
    356                           WGC3Dsizei count, const WGC3Dfloat* v);
    357   virtual void uniform4i(WGC3Dint location,
    358                          WGC3Dint x, WGC3Dint y, WGC3Dint z, WGC3Dint w);
    359   virtual void uniform4iv(WGC3Dint location,
    360                           WGC3Dsizei count, const WGC3Dint* v);
    361   virtual void uniformMatrix2fv(WGC3Dint location,
    362                                 WGC3Dsizei count,
    363                                 WGC3Dboolean transpose,
    364                                 const WGC3Dfloat* value);
    365   virtual void uniformMatrix3fv(WGC3Dint location,
    366                                 WGC3Dsizei count,
    367                                 WGC3Dboolean transpose,
    368                                 const WGC3Dfloat* value);
    369   virtual void uniformMatrix4fv(WGC3Dint location,
    370                                 WGC3Dsizei count,
    371                                 WGC3Dboolean transpose,
    372                                 const WGC3Dfloat* value);
    373 
    374   virtual void useProgram(WebGLId program);
    375   virtual void validateProgram(WebGLId program);
    376 
    377   virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x);
    378   virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values);
    379   virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y);
    380   virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values);
    381   virtual void vertexAttrib3f(WGC3Duint index,
    382                               WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
    383   virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values);
    384   virtual void vertexAttrib4f(WGC3Duint index,
    385                               WGC3Dfloat x, WGC3Dfloat y,
    386                               WGC3Dfloat z, WGC3Dfloat w);
    387   virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values);
    388   virtual void vertexAttribPointer(WGC3Duint index,
    389                                    WGC3Dint size,
    390                                    WGC3Denum type,
    391                                    WGC3Dboolean normalized,
    392                                    WGC3Dsizei stride,
    393                                    WGC3Dintptr offset);
    394 
    395   virtual void viewport(WGC3Dint x, WGC3Dint y,
    396                         WGC3Dsizei width, WGC3Dsizei height);
    397 
    398   // Support for buffer creation and deletion
    399   virtual WebGLId createBuffer();
    400   virtual WebGLId createFramebuffer();
    401   virtual WebGLId createProgram();
    402   virtual WebGLId createRenderbuffer();
    403   virtual WebGLId createShader(WGC3Denum);
    404   virtual WebGLId createTexture();
    405 
    406   virtual void deleteBuffer(WebGLId);
    407   virtual void deleteFramebuffer(WebGLId);
    408   virtual void deleteProgram(WebGLId);
    409   virtual void deleteRenderbuffer(WebGLId);
    410   virtual void deleteShader(WebGLId);
    411   virtual void deleteTexture(WebGLId);
    412 
    413   virtual void synthesizeGLError(WGC3Denum);
    414 
    415   virtual void* mapBufferSubDataCHROMIUM(
    416       WGC3Denum target, WGC3Dintptr offset,
    417       WGC3Dsizeiptr size, WGC3Denum access);
    418   virtual void unmapBufferSubDataCHROMIUM(const void*);
    419   virtual void* mapTexSubImage2DCHROMIUM(
    420       WGC3Denum target,
    421       WGC3Dint level,
    422       WGC3Dint xoffset,
    423       WGC3Dint yoffset,
    424       WGC3Dsizei width,
    425       WGC3Dsizei height,
    426       WGC3Denum format,
    427       WGC3Denum type,
    428       WGC3Denum access);
    429   virtual void unmapTexSubImage2DCHROMIUM(const void*);
    430 
    431   virtual void setVisibilityCHROMIUM(bool visible);
    432 
    433   virtual void setMemoryAllocationChangedCallbackCHROMIUM(
    434       WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback);
    435 
    436   virtual void discardFramebufferEXT(WGC3Denum target,
    437                                      WGC3Dsizei numAttachments,
    438                                      const WGC3Denum* attachments);
    439   virtual void discardBackbufferCHROMIUM();
    440   virtual void ensureBackbufferCHROMIUM();
    441 
    442   virtual void copyTextureToParentTextureCHROMIUM(
    443       WebGLId texture, WebGLId parentTexture);
    444 
    445   virtual void rateLimitOffscreenContextCHROMIUM();
    446 
    447   virtual WebKit::WebString getRequestableExtensionsCHROMIUM();
    448   virtual void requestExtensionCHROMIUM(const char*);
    449 
    450   virtual void blitFramebufferCHROMIUM(
    451       WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
    452       WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
    453       WGC3Dbitfield mask, WGC3Denum filter);
    454   virtual void renderbufferStorageMultisampleCHROMIUM(
    455       WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
    456       WGC3Dsizei width, WGC3Dsizei height);
    457 
    458   virtual WebKit::WebString getTranslatedShaderSourceANGLE(WebGLId shader);
    459 
    460   virtual void setContextLostCallback(
    461       WebGraphicsContext3D::WebGraphicsContextLostCallback* callback);
    462   virtual WGC3Denum getGraphicsResetStatusARB();
    463 
    464   virtual void texImageIOSurface2DCHROMIUM(
    465       WGC3Denum target, WGC3Dint width, WGC3Dint height,
    466       WGC3Duint ioSurfaceId, WGC3Duint plane);
    467 
    468   virtual void bindTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint imageId);
    469   virtual void releaseTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint imageId);
    470 
    471   virtual WebGLId createStreamTextureCHROMIUM(WebGLId texture);
    472   virtual void destroyStreamTextureCHROMIUM(WebGLId texture);
    473 
    474   virtual void texStorage2DEXT(
    475       WGC3Denum target, WGC3Dint levels, WGC3Duint internalformat,
    476       WGC3Dint width, WGC3Dint height);
    477   virtual WGC3Duint createImageCHROMIUM(
    478       WGC3Dsizei width, WGC3Dsizei height, WGC3Denum internalformat);
    479   virtual void destroyImageCHROMIUM(WGC3Duint image_id);
    480   virtual void getImageParameterivCHROMIUM(
    481       WGC3Duint image_id, WGC3Denum pname, WGC3Dint* params);
    482   virtual void* mapImageCHROMIUM(WGC3Duint image_id, WGC3Denum access);
    483   virtual void unmapImageCHROMIUM(WGC3Duint image_id);
    484   virtual WebGLId createQueryEXT();
    485   virtual void deleteQueryEXT(WebGLId query);
    486   virtual WGC3Dboolean isQueryEXT(WebGLId query);
    487   virtual void beginQueryEXT(WGC3Denum target, WebGLId query);
    488   virtual void endQueryEXT(WGC3Denum target);
    489   virtual void getQueryivEXT(
    490       WGC3Denum target, WGC3Denum pname, WGC3Dint* params);
    491   virtual void getQueryObjectuivEXT(
    492       WebGLId query, WGC3Denum pname, WGC3Duint* params);
    493 
    494   virtual void copyTextureCHROMIUM(WGC3Denum target, WGC3Duint source_id,
    495                                    WGC3Duint dest_id, WGC3Dint level,
    496                                    WGC3Denum internal_format,
    497                                    WGC3Denum dest_type);
    498 
    499   virtual void bindUniformLocationCHROMIUM(WebGLId program, WGC3Dint location,
    500                                            const WGC3Dchar* uniform);
    501 
    502   virtual void shallowFlushCHROMIUM();
    503   virtual void shallowFinishCHROMIUM();
    504 
    505   virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox);
    506   virtual void produceTextureCHROMIUM(WGC3Denum target,
    507                                       const WGC3Dbyte* mailbox);
    508   virtual void consumeTextureCHROMIUM(WGC3Denum target,
    509                                       const WGC3Dbyte* mailbox);
    510 
    511   virtual void insertEventMarkerEXT(const WGC3Dchar* marker);
    512   virtual void pushGroupMarkerEXT(const WGC3Dchar* marker);
    513   virtual void popGroupMarkerEXT();
    514 
    515   virtual void* mapBufferCHROMIUM(WGC3Denum target, WGC3Denum access);
    516   virtual WGC3Dboolean unmapBufferCHROMIUM(WGC3Denum target);
    517 
    518   // Async pixel transfer functions.
    519   virtual void asyncTexImage2DCHROMIUM(
    520       WGC3Denum target,
    521       WGC3Dint level,
    522       WGC3Denum internalformat,
    523       WGC3Dsizei width,
    524       WGC3Dsizei height,
    525       WGC3Dint border,
    526       WGC3Denum format,
    527       WGC3Denum type,
    528       const void* pixels);
    529   virtual void asyncTexSubImage2DCHROMIUM(
    530       WGC3Denum target,
    531       WGC3Dint level,
    532       WGC3Dint xoffset,
    533       WGC3Dint yoffset,
    534       WGC3Dsizei width,
    535       WGC3Dsizei height,
    536       WGC3Denum format,
    537       WGC3Denum type,
    538       const void* pixels);
    539   virtual void waitAsyncTexImage2DCHROMIUM(WGC3Denum target);
    540 
    541   virtual void drawBuffersEXT(WGC3Dsizei n, const WGC3Denum* bufs);
    542 
    543   virtual unsigned insertSyncPoint();
    544   virtual void signalSyncPoint(unsigned sync_point,
    545                                WebGraphicsSyncPointCallback* callback);
    546   virtual void signalQuery(unsigned query,
    547                            WebGraphicsSyncPointCallback* callback);
    548 
    549   virtual void loseContextCHROMIUM(WGC3Denum current, WGC3Denum other);
    550 
    551  protected:
    552   virtual GrGLInterface* onCreateGrGLInterface();
    553 
    554  private:
    555   WebGraphicsContext3DInProcessCommandBufferImpl(
    556       scoped_ptr< ::gpu::GLInProcessContext> context,
    557       const WebKit::WebGraphicsContext3D::Attributes& attributes,
    558       bool is_offscreen,
    559       gfx::AcceleratedWidget window);
    560 
    561   // SwapBuffers callback.
    562   void OnSwapBuffersComplete();
    563   virtual void OnContextLost();
    564 
    565   bool MaybeInitializeGL();
    566 
    567   // Used to try to find bugs in code that calls gl directly through the gl api
    568   // instead of going through WebGraphicsContext3D.
    569   void ClearContext();
    570 
    571 
    572   bool is_offscreen_;
    573   // Only used when not offscreen.
    574   gfx::AcceleratedWidget window_;
    575 
    576   bool initialized_;
    577   bool initialize_failed_;
    578 
    579   // The context we use for OpenGL rendering.
    580   scoped_ptr< ::gpu::GLInProcessContext> context_;
    581   // The GLES2Implementation we use for OpenGL rendering.
    582   ::gpu::gles2::GLES2Implementation* gl_;
    583 
    584   WebGraphicsContext3D::WebGraphicsContextLostCallback* context_lost_callback_;
    585   WGC3Denum context_lost_reason_;
    586 
    587   WebKit::WebGraphicsContext3D::Attributes attributes_;
    588   int cached_width_, cached_height_;
    589 
    590   // Errors raised by synthesizeGLError().
    591   std::vector<WGC3Denum> synthetic_errors_;
    592 };
    593 
    594 }  // namespace gpu
    595 }  // namespace webkit
    596 
    597 #endif  // defined(ENABLE_GPU)
    598 #endif  // WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_COMMAND_BUFFER_IMPL_H_
    599