Home | History | Annotate | Download | only in client
      1 // Copyright 2014 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 // This file is auto-generated from
      6 // gpu/command_buffer/build_gles2_cmd_buffer.py
      7 // It's formatted by clang-format using chromium coding style:
      8 //    clang-format -i -style=chromium filename
      9 // DO NOT EDIT!
     10 
     11 // This file is included by gles2_implementation.h to declare the
     12 // GL api functions.
     13 #ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
     14 #define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
     15 
     16 TEST_F(GLES2ImplementationTest, AttachShader) {
     17   struct Cmds {
     18     cmds::AttachShader cmd;
     19   };
     20   Cmds expected;
     21   expected.cmd.Init(1, 2);
     22 
     23   gl_->AttachShader(1, 2);
     24   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     25 }
     26 // TODO: Implement unit test for BindAttribLocation
     27 
     28 TEST_F(GLES2ImplementationTest, BindBuffer) {
     29   struct Cmds {
     30     cmds::BindBuffer cmd;
     31   };
     32   Cmds expected;
     33   expected.cmd.Init(GL_ARRAY_BUFFER, 2);
     34 
     35   gl_->BindBuffer(GL_ARRAY_BUFFER, 2);
     36   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     37   ClearCommands();
     38   gl_->BindBuffer(GL_ARRAY_BUFFER, 2);
     39   EXPECT_TRUE(NoCommandsWritten());
     40 }
     41 
     42 TEST_F(GLES2ImplementationTest, BindFramebuffer) {
     43   struct Cmds {
     44     cmds::BindFramebuffer cmd;
     45   };
     46   Cmds expected;
     47   expected.cmd.Init(GL_FRAMEBUFFER, 2);
     48 
     49   gl_->BindFramebuffer(GL_FRAMEBUFFER, 2);
     50   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     51   ClearCommands();
     52   gl_->BindFramebuffer(GL_FRAMEBUFFER, 2);
     53   EXPECT_TRUE(NoCommandsWritten());
     54 }
     55 
     56 TEST_F(GLES2ImplementationTest, BindRenderbuffer) {
     57   struct Cmds {
     58     cmds::BindRenderbuffer cmd;
     59   };
     60   Cmds expected;
     61   expected.cmd.Init(GL_RENDERBUFFER, 2);
     62 
     63   gl_->BindRenderbuffer(GL_RENDERBUFFER, 2);
     64   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     65   ClearCommands();
     66   gl_->BindRenderbuffer(GL_RENDERBUFFER, 2);
     67   EXPECT_TRUE(NoCommandsWritten());
     68 }
     69 
     70 TEST_F(GLES2ImplementationTest, BlendColor) {
     71   struct Cmds {
     72     cmds::BlendColor cmd;
     73   };
     74   Cmds expected;
     75   expected.cmd.Init(1, 2, 3, 4);
     76 
     77   gl_->BlendColor(1, 2, 3, 4);
     78   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     79 }
     80 
     81 TEST_F(GLES2ImplementationTest, BlendEquation) {
     82   struct Cmds {
     83     cmds::BlendEquation cmd;
     84   };
     85   Cmds expected;
     86   expected.cmd.Init(GL_FUNC_SUBTRACT);
     87 
     88   gl_->BlendEquation(GL_FUNC_SUBTRACT);
     89   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
     90 }
     91 
     92 TEST_F(GLES2ImplementationTest, BlendEquationSeparate) {
     93   struct Cmds {
     94     cmds::BlendEquationSeparate cmd;
     95   };
     96   Cmds expected;
     97   expected.cmd.Init(GL_FUNC_SUBTRACT, GL_FUNC_ADD);
     98 
     99   gl_->BlendEquationSeparate(GL_FUNC_SUBTRACT, GL_FUNC_ADD);
    100   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    101 }
    102 
    103 TEST_F(GLES2ImplementationTest, BlendFunc) {
    104   struct Cmds {
    105     cmds::BlendFunc cmd;
    106   };
    107   Cmds expected;
    108   expected.cmd.Init(GL_ZERO, GL_ZERO);
    109 
    110   gl_->BlendFunc(GL_ZERO, GL_ZERO);
    111   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    112 }
    113 
    114 TEST_F(GLES2ImplementationTest, BlendFuncSeparate) {
    115   struct Cmds {
    116     cmds::BlendFuncSeparate cmd;
    117   };
    118   Cmds expected;
    119   expected.cmd.Init(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO);
    120 
    121   gl_->BlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO);
    122   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    123 }
    124 
    125 TEST_F(GLES2ImplementationTest, CheckFramebufferStatus) {
    126   struct Cmds {
    127     cmds::CheckFramebufferStatus cmd;
    128   };
    129 
    130   Cmds expected;
    131   ExpectedMemoryInfo result1 =
    132       GetExpectedResultMemory(sizeof(cmds::CheckFramebufferStatus::Result));
    133   expected.cmd.Init(1, result1.id, result1.offset);
    134 
    135   EXPECT_CALL(*command_buffer(), OnFlush())
    136       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    137       .RetiresOnSaturation();
    138 
    139   GLboolean result = gl_->CheckFramebufferStatus(1);
    140   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    141   EXPECT_TRUE(result);
    142 }
    143 
    144 TEST_F(GLES2ImplementationTest, Clear) {
    145   struct Cmds {
    146     cmds::Clear cmd;
    147   };
    148   Cmds expected;
    149   expected.cmd.Init(1);
    150 
    151   gl_->Clear(1);
    152   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    153 }
    154 
    155 TEST_F(GLES2ImplementationTest, ClearColor) {
    156   struct Cmds {
    157     cmds::ClearColor cmd;
    158   };
    159   Cmds expected;
    160   expected.cmd.Init(1, 2, 3, 4);
    161 
    162   gl_->ClearColor(1, 2, 3, 4);
    163   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    164 }
    165 
    166 TEST_F(GLES2ImplementationTest, ClearDepthf) {
    167   struct Cmds {
    168     cmds::ClearDepthf cmd;
    169   };
    170   Cmds expected;
    171   expected.cmd.Init(0.5f);
    172 
    173   gl_->ClearDepthf(0.5f);
    174   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    175 }
    176 
    177 TEST_F(GLES2ImplementationTest, ClearStencil) {
    178   struct Cmds {
    179     cmds::ClearStencil cmd;
    180   };
    181   Cmds expected;
    182   expected.cmd.Init(1);
    183 
    184   gl_->ClearStencil(1);
    185   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    186 }
    187 
    188 TEST_F(GLES2ImplementationTest, ColorMask) {
    189   struct Cmds {
    190     cmds::ColorMask cmd;
    191   };
    192   Cmds expected;
    193   expected.cmd.Init(true, true, true, true);
    194 
    195   gl_->ColorMask(true, true, true, true);
    196   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    197 }
    198 
    199 TEST_F(GLES2ImplementationTest, CompileShader) {
    200   struct Cmds {
    201     cmds::CompileShader cmd;
    202   };
    203   Cmds expected;
    204   expected.cmd.Init(1);
    205 
    206   gl_->CompileShader(1);
    207   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    208 }
    209 // TODO: Implement unit test for CompressedTexImage2D
    210 // TODO: Implement unit test for CompressedTexSubImage2D
    211 
    212 TEST_F(GLES2ImplementationTest, CopyTexImage2D) {
    213   struct Cmds {
    214     cmds::CopyTexImage2D cmd;
    215   };
    216   Cmds expected;
    217   expected.cmd.Init(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7);
    218 
    219   gl_->CopyTexImage2D(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7, 0);
    220   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    221 }
    222 
    223 TEST_F(GLES2ImplementationTest, CopyTexImage2DInvalidConstantArg7) {
    224   gl_->CopyTexImage2D(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7, 1);
    225   EXPECT_TRUE(NoCommandsWritten());
    226   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
    227 }
    228 
    229 TEST_F(GLES2ImplementationTest, CopyTexSubImage2D) {
    230   struct Cmds {
    231     cmds::CopyTexSubImage2D cmd;
    232   };
    233   Cmds expected;
    234   expected.cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8);
    235 
    236   gl_->CopyTexSubImage2D(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8);
    237   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    238 }
    239 
    240 TEST_F(GLES2ImplementationTest, CullFace) {
    241   struct Cmds {
    242     cmds::CullFace cmd;
    243   };
    244   Cmds expected;
    245   expected.cmd.Init(GL_FRONT);
    246 
    247   gl_->CullFace(GL_FRONT);
    248   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    249 }
    250 
    251 TEST_F(GLES2ImplementationTest, DeleteBuffers) {
    252   GLuint ids[2] = {kBuffersStartId, kBuffersStartId + 1};
    253   struct Cmds {
    254     cmds::DeleteBuffersImmediate del;
    255     GLuint data[2];
    256   };
    257   Cmds expected;
    258   expected.del.Init(arraysize(ids), &ids[0]);
    259   expected.data[0] = kBuffersStartId;
    260   expected.data[1] = kBuffersStartId + 1;
    261   gl_->DeleteBuffers(arraysize(ids), &ids[0]);
    262   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    263 }
    264 
    265 TEST_F(GLES2ImplementationTest, DeleteFramebuffers) {
    266   GLuint ids[2] = {kFramebuffersStartId, kFramebuffersStartId + 1};
    267   struct Cmds {
    268     cmds::DeleteFramebuffersImmediate del;
    269     GLuint data[2];
    270   };
    271   Cmds expected;
    272   expected.del.Init(arraysize(ids), &ids[0]);
    273   expected.data[0] = kFramebuffersStartId;
    274   expected.data[1] = kFramebuffersStartId + 1;
    275   gl_->DeleteFramebuffers(arraysize(ids), &ids[0]);
    276   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    277 }
    278 
    279 TEST_F(GLES2ImplementationTest, DeleteProgram) {
    280   struct Cmds {
    281     cmds::DeleteProgram cmd;
    282   };
    283   Cmds expected;
    284   expected.cmd.Init(1);
    285 
    286   gl_->DeleteProgram(1);
    287   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    288 }
    289 
    290 TEST_F(GLES2ImplementationTest, DeleteRenderbuffers) {
    291   GLuint ids[2] = {kRenderbuffersStartId, kRenderbuffersStartId + 1};
    292   struct Cmds {
    293     cmds::DeleteRenderbuffersImmediate del;
    294     GLuint data[2];
    295   };
    296   Cmds expected;
    297   expected.del.Init(arraysize(ids), &ids[0]);
    298   expected.data[0] = kRenderbuffersStartId;
    299   expected.data[1] = kRenderbuffersStartId + 1;
    300   gl_->DeleteRenderbuffers(arraysize(ids), &ids[0]);
    301   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    302 }
    303 
    304 TEST_F(GLES2ImplementationTest, DeleteShader) {
    305   struct Cmds {
    306     cmds::DeleteShader cmd;
    307   };
    308   Cmds expected;
    309   expected.cmd.Init(1);
    310 
    311   gl_->DeleteShader(1);
    312   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    313 }
    314 
    315 TEST_F(GLES2ImplementationTest, DeleteTextures) {
    316   GLuint ids[2] = {kTexturesStartId, kTexturesStartId + 1};
    317   struct Cmds {
    318     cmds::DeleteTexturesImmediate del;
    319     GLuint data[2];
    320   };
    321   Cmds expected;
    322   expected.del.Init(arraysize(ids), &ids[0]);
    323   expected.data[0] = kTexturesStartId;
    324   expected.data[1] = kTexturesStartId + 1;
    325   gl_->DeleteTextures(arraysize(ids), &ids[0]);
    326   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    327 }
    328 
    329 TEST_F(GLES2ImplementationTest, DepthFunc) {
    330   struct Cmds {
    331     cmds::DepthFunc cmd;
    332   };
    333   Cmds expected;
    334   expected.cmd.Init(GL_NEVER);
    335 
    336   gl_->DepthFunc(GL_NEVER);
    337   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    338 }
    339 
    340 TEST_F(GLES2ImplementationTest, DepthMask) {
    341   struct Cmds {
    342     cmds::DepthMask cmd;
    343   };
    344   Cmds expected;
    345   expected.cmd.Init(true);
    346 
    347   gl_->DepthMask(true);
    348   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    349 }
    350 
    351 TEST_F(GLES2ImplementationTest, DepthRangef) {
    352   struct Cmds {
    353     cmds::DepthRangef cmd;
    354   };
    355   Cmds expected;
    356   expected.cmd.Init(1, 2);
    357 
    358   gl_->DepthRangef(1, 2);
    359   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    360 }
    361 
    362 TEST_F(GLES2ImplementationTest, DetachShader) {
    363   struct Cmds {
    364     cmds::DetachShader cmd;
    365   };
    366   Cmds expected;
    367   expected.cmd.Init(1, 2);
    368 
    369   gl_->DetachShader(1, 2);
    370   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    371 }
    372 
    373 TEST_F(GLES2ImplementationTest, DisableVertexAttribArray) {
    374   struct Cmds {
    375     cmds::DisableVertexAttribArray cmd;
    376   };
    377   Cmds expected;
    378   expected.cmd.Init(1);
    379 
    380   gl_->DisableVertexAttribArray(1);
    381   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    382 }
    383 
    384 TEST_F(GLES2ImplementationTest, DrawArrays) {
    385   struct Cmds {
    386     cmds::DrawArrays cmd;
    387   };
    388   Cmds expected;
    389   expected.cmd.Init(GL_POINTS, 2, 3);
    390 
    391   gl_->DrawArrays(GL_POINTS, 2, 3);
    392   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    393 }
    394 
    395 TEST_F(GLES2ImplementationTest, EnableVertexAttribArray) {
    396   struct Cmds {
    397     cmds::EnableVertexAttribArray cmd;
    398   };
    399   Cmds expected;
    400   expected.cmd.Init(1);
    401 
    402   gl_->EnableVertexAttribArray(1);
    403   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    404 }
    405 
    406 TEST_F(GLES2ImplementationTest, Flush) {
    407   struct Cmds {
    408     cmds::Flush cmd;
    409   };
    410   Cmds expected;
    411   expected.cmd.Init();
    412 
    413   gl_->Flush();
    414   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    415 }
    416 
    417 TEST_F(GLES2ImplementationTest, FramebufferRenderbuffer) {
    418   struct Cmds {
    419     cmds::FramebufferRenderbuffer cmd;
    420   };
    421   Cmds expected;
    422   expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 4);
    423 
    424   gl_->FramebufferRenderbuffer(
    425       GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 4);
    426   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    427 }
    428 
    429 TEST_F(GLES2ImplementationTest, FramebufferTexture2D) {
    430   struct Cmds {
    431     cmds::FramebufferTexture2D cmd;
    432   };
    433   Cmds expected;
    434   expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4);
    435 
    436   gl_->FramebufferTexture2D(
    437       GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0);
    438   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    439 }
    440 
    441 TEST_F(GLES2ImplementationTest, FramebufferTexture2DInvalidConstantArg4) {
    442   gl_->FramebufferTexture2D(
    443       GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 1);
    444   EXPECT_TRUE(NoCommandsWritten());
    445   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
    446 }
    447 
    448 TEST_F(GLES2ImplementationTest, FrontFace) {
    449   struct Cmds {
    450     cmds::FrontFace cmd;
    451   };
    452   Cmds expected;
    453   expected.cmd.Init(GL_CW);
    454 
    455   gl_->FrontFace(GL_CW);
    456   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    457 }
    458 
    459 TEST_F(GLES2ImplementationTest, GenBuffers) {
    460   GLuint ids[2] = {
    461       0,
    462   };
    463   struct Cmds {
    464     cmds::GenBuffersImmediate gen;
    465     GLuint data[2];
    466   };
    467   Cmds expected;
    468   expected.gen.Init(arraysize(ids), &ids[0]);
    469   expected.data[0] = kBuffersStartId;
    470   expected.data[1] = kBuffersStartId + 1;
    471   gl_->GenBuffers(arraysize(ids), &ids[0]);
    472   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    473   EXPECT_EQ(kBuffersStartId, ids[0]);
    474   EXPECT_EQ(kBuffersStartId + 1, ids[1]);
    475 }
    476 
    477 TEST_F(GLES2ImplementationTest, GenerateMipmap) {
    478   struct Cmds {
    479     cmds::GenerateMipmap cmd;
    480   };
    481   Cmds expected;
    482   expected.cmd.Init(GL_TEXTURE_2D);
    483 
    484   gl_->GenerateMipmap(GL_TEXTURE_2D);
    485   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    486 }
    487 
    488 TEST_F(GLES2ImplementationTest, GenFramebuffers) {
    489   GLuint ids[2] = {
    490       0,
    491   };
    492   struct Cmds {
    493     cmds::GenFramebuffersImmediate gen;
    494     GLuint data[2];
    495   };
    496   Cmds expected;
    497   expected.gen.Init(arraysize(ids), &ids[0]);
    498   expected.data[0] = kFramebuffersStartId;
    499   expected.data[1] = kFramebuffersStartId + 1;
    500   gl_->GenFramebuffers(arraysize(ids), &ids[0]);
    501   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    502   EXPECT_EQ(kFramebuffersStartId, ids[0]);
    503   EXPECT_EQ(kFramebuffersStartId + 1, ids[1]);
    504 }
    505 
    506 TEST_F(GLES2ImplementationTest, GenRenderbuffers) {
    507   GLuint ids[2] = {
    508       0,
    509   };
    510   struct Cmds {
    511     cmds::GenRenderbuffersImmediate gen;
    512     GLuint data[2];
    513   };
    514   Cmds expected;
    515   expected.gen.Init(arraysize(ids), &ids[0]);
    516   expected.data[0] = kRenderbuffersStartId;
    517   expected.data[1] = kRenderbuffersStartId + 1;
    518   gl_->GenRenderbuffers(arraysize(ids), &ids[0]);
    519   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    520   EXPECT_EQ(kRenderbuffersStartId, ids[0]);
    521   EXPECT_EQ(kRenderbuffersStartId + 1, ids[1]);
    522 }
    523 
    524 TEST_F(GLES2ImplementationTest, GenTextures) {
    525   GLuint ids[2] = {
    526       0,
    527   };
    528   struct Cmds {
    529     cmds::GenTexturesImmediate gen;
    530     GLuint data[2];
    531   };
    532   Cmds expected;
    533   expected.gen.Init(arraysize(ids), &ids[0]);
    534   expected.data[0] = kTexturesStartId;
    535   expected.data[1] = kTexturesStartId + 1;
    536   gl_->GenTextures(arraysize(ids), &ids[0]);
    537   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    538   EXPECT_EQ(kTexturesStartId, ids[0]);
    539   EXPECT_EQ(kTexturesStartId + 1, ids[1]);
    540 }
    541 // TODO: Implement unit test for GetActiveAttrib
    542 // TODO: Implement unit test for GetActiveUniform
    543 // TODO: Implement unit test for GetAttachedShaders
    544 // TODO: Implement unit test for GetAttribLocation
    545 
    546 TEST_F(GLES2ImplementationTest, GetBooleanv) {
    547   struct Cmds {
    548     cmds::GetBooleanv cmd;
    549   };
    550   typedef cmds::GetBooleanv::Result Result;
    551   Result::Type result = 0;
    552   Cmds expected;
    553   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    554   expected.cmd.Init(123, result1.id, result1.offset);
    555   EXPECT_CALL(*command_buffer(), OnFlush())
    556       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    557       .RetiresOnSaturation();
    558   gl_->GetBooleanv(123, &result);
    559   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    560   EXPECT_EQ(static_cast<Result::Type>(1), result);
    561 }
    562 
    563 TEST_F(GLES2ImplementationTest, GetBufferParameteriv) {
    564   struct Cmds {
    565     cmds::GetBufferParameteriv cmd;
    566   };
    567   typedef cmds::GetBufferParameteriv::Result Result;
    568   Result::Type result = 0;
    569   Cmds expected;
    570   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    571   expected.cmd.Init(123, GL_BUFFER_SIZE, result1.id, result1.offset);
    572   EXPECT_CALL(*command_buffer(), OnFlush())
    573       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    574       .RetiresOnSaturation();
    575   gl_->GetBufferParameteriv(123, GL_BUFFER_SIZE, &result);
    576   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    577   EXPECT_EQ(static_cast<Result::Type>(1), result);
    578 }
    579 
    580 TEST_F(GLES2ImplementationTest, GetFloatv) {
    581   struct Cmds {
    582     cmds::GetFloatv cmd;
    583   };
    584   typedef cmds::GetFloatv::Result Result;
    585   Result::Type result = 0;
    586   Cmds expected;
    587   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    588   expected.cmd.Init(123, result1.id, result1.offset);
    589   EXPECT_CALL(*command_buffer(), OnFlush())
    590       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    591       .RetiresOnSaturation();
    592   gl_->GetFloatv(123, &result);
    593   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    594   EXPECT_EQ(static_cast<Result::Type>(1), result);
    595 }
    596 
    597 TEST_F(GLES2ImplementationTest, GetFramebufferAttachmentParameteriv) {
    598   struct Cmds {
    599     cmds::GetFramebufferAttachmentParameteriv cmd;
    600   };
    601   typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
    602   Result::Type result = 0;
    603   Cmds expected;
    604   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    605   expected.cmd.Init(123,
    606                     GL_COLOR_ATTACHMENT0,
    607                     GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
    608                     result1.id,
    609                     result1.offset);
    610   EXPECT_CALL(*command_buffer(), OnFlush())
    611       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    612       .RetiresOnSaturation();
    613   gl_->GetFramebufferAttachmentParameteriv(
    614       123,
    615       GL_COLOR_ATTACHMENT0,
    616       GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
    617       &result);
    618   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    619   EXPECT_EQ(static_cast<Result::Type>(1), result);
    620 }
    621 
    622 TEST_F(GLES2ImplementationTest, GetIntegerv) {
    623   struct Cmds {
    624     cmds::GetIntegerv cmd;
    625   };
    626   typedef cmds::GetIntegerv::Result Result;
    627   Result::Type result = 0;
    628   Cmds expected;
    629   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    630   expected.cmd.Init(123, result1.id, result1.offset);
    631   EXPECT_CALL(*command_buffer(), OnFlush())
    632       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    633       .RetiresOnSaturation();
    634   gl_->GetIntegerv(123, &result);
    635   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    636   EXPECT_EQ(static_cast<Result::Type>(1), result);
    637 }
    638 
    639 TEST_F(GLES2ImplementationTest, GetProgramiv) {
    640   struct Cmds {
    641     cmds::GetProgramiv cmd;
    642   };
    643   typedef cmds::GetProgramiv::Result Result;
    644   Result::Type result = 0;
    645   Cmds expected;
    646   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    647   expected.cmd.Init(123, GL_DELETE_STATUS, result1.id, result1.offset);
    648   EXPECT_CALL(*command_buffer(), OnFlush())
    649       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    650       .RetiresOnSaturation();
    651   gl_->GetProgramiv(123, GL_DELETE_STATUS, &result);
    652   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    653   EXPECT_EQ(static_cast<Result::Type>(1), result);
    654 }
    655 // TODO: Implement unit test for GetProgramInfoLog
    656 
    657 TEST_F(GLES2ImplementationTest, GetRenderbufferParameteriv) {
    658   struct Cmds {
    659     cmds::GetRenderbufferParameteriv cmd;
    660   };
    661   typedef cmds::GetRenderbufferParameteriv::Result Result;
    662   Result::Type result = 0;
    663   Cmds expected;
    664   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    665   expected.cmd.Init(123, GL_RENDERBUFFER_RED_SIZE, result1.id, result1.offset);
    666   EXPECT_CALL(*command_buffer(), OnFlush())
    667       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    668       .RetiresOnSaturation();
    669   gl_->GetRenderbufferParameteriv(123, GL_RENDERBUFFER_RED_SIZE, &result);
    670   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    671   EXPECT_EQ(static_cast<Result::Type>(1), result);
    672 }
    673 
    674 TEST_F(GLES2ImplementationTest, GetShaderiv) {
    675   struct Cmds {
    676     cmds::GetShaderiv cmd;
    677   };
    678   typedef cmds::GetShaderiv::Result Result;
    679   Result::Type result = 0;
    680   Cmds expected;
    681   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    682   expected.cmd.Init(123, GL_SHADER_TYPE, result1.id, result1.offset);
    683   EXPECT_CALL(*command_buffer(), OnFlush())
    684       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    685       .RetiresOnSaturation();
    686   gl_->GetShaderiv(123, GL_SHADER_TYPE, &result);
    687   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    688   EXPECT_EQ(static_cast<Result::Type>(1), result);
    689 }
    690 // TODO: Implement unit test for GetShaderInfoLog
    691 // TODO: Implement unit test for GetShaderPrecisionFormat
    692 
    693 TEST_F(GLES2ImplementationTest, GetTexParameterfv) {
    694   struct Cmds {
    695     cmds::GetTexParameterfv cmd;
    696   };
    697   typedef cmds::GetTexParameterfv::Result Result;
    698   Result::Type result = 0;
    699   Cmds expected;
    700   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    701   expected.cmd.Init(123, GL_TEXTURE_MAG_FILTER, result1.id, result1.offset);
    702   EXPECT_CALL(*command_buffer(), OnFlush())
    703       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    704       .RetiresOnSaturation();
    705   gl_->GetTexParameterfv(123, GL_TEXTURE_MAG_FILTER, &result);
    706   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    707   EXPECT_EQ(static_cast<Result::Type>(1), result);
    708 }
    709 
    710 TEST_F(GLES2ImplementationTest, GetTexParameteriv) {
    711   struct Cmds {
    712     cmds::GetTexParameteriv cmd;
    713   };
    714   typedef cmds::GetTexParameteriv::Result Result;
    715   Result::Type result = 0;
    716   Cmds expected;
    717   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    718   expected.cmd.Init(123, GL_TEXTURE_MAG_FILTER, result1.id, result1.offset);
    719   EXPECT_CALL(*command_buffer(), OnFlush())
    720       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    721       .RetiresOnSaturation();
    722   gl_->GetTexParameteriv(123, GL_TEXTURE_MAG_FILTER, &result);
    723   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    724   EXPECT_EQ(static_cast<Result::Type>(1), result);
    725 }
    726 // TODO: Implement unit test for GetUniformfv
    727 // TODO: Implement unit test for GetUniformiv
    728 // TODO: Implement unit test for GetUniformLocation
    729 
    730 TEST_F(GLES2ImplementationTest, GetVertexAttribfv) {
    731   struct Cmds {
    732     cmds::GetVertexAttribfv cmd;
    733   };
    734   typedef cmds::GetVertexAttribfv::Result Result;
    735   Result::Type result = 0;
    736   Cmds expected;
    737   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    738   expected.cmd.Init(
    739       123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, result1.id, result1.offset);
    740   EXPECT_CALL(*command_buffer(), OnFlush())
    741       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    742       .RetiresOnSaturation();
    743   gl_->GetVertexAttribfv(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &result);
    744   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    745   EXPECT_EQ(static_cast<Result::Type>(1), result);
    746 }
    747 
    748 TEST_F(GLES2ImplementationTest, GetVertexAttribiv) {
    749   struct Cmds {
    750     cmds::GetVertexAttribiv cmd;
    751   };
    752   typedef cmds::GetVertexAttribiv::Result Result;
    753   Result::Type result = 0;
    754   Cmds expected;
    755   ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
    756   expected.cmd.Init(
    757       123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, result1.id, result1.offset);
    758   EXPECT_CALL(*command_buffer(), OnFlush())
    759       .WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
    760       .RetiresOnSaturation();
    761   gl_->GetVertexAttribiv(123, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, &result);
    762   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    763   EXPECT_EQ(static_cast<Result::Type>(1), result);
    764 }
    765 
    766 TEST_F(GLES2ImplementationTest, Hint) {
    767   struct Cmds {
    768     cmds::Hint cmd;
    769   };
    770   Cmds expected;
    771   expected.cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
    772 
    773   gl_->Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
    774   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    775 }
    776 
    777 TEST_F(GLES2ImplementationTest, IsBuffer) {
    778   struct Cmds {
    779     cmds::IsBuffer cmd;
    780   };
    781 
    782   Cmds expected;
    783   ExpectedMemoryInfo result1 =
    784       GetExpectedResultMemory(sizeof(cmds::IsBuffer::Result));
    785   expected.cmd.Init(1, result1.id, result1.offset);
    786 
    787   EXPECT_CALL(*command_buffer(), OnFlush())
    788       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    789       .RetiresOnSaturation();
    790 
    791   GLboolean result = gl_->IsBuffer(1);
    792   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    793   EXPECT_TRUE(result);
    794 }
    795 
    796 TEST_F(GLES2ImplementationTest, IsEnabled) {
    797   struct Cmds {
    798     cmds::IsEnabled cmd;
    799   };
    800 
    801   Cmds expected;
    802   ExpectedMemoryInfo result1 =
    803       GetExpectedResultMemory(sizeof(cmds::IsEnabled::Result));
    804   expected.cmd.Init(1, result1.id, result1.offset);
    805 
    806   EXPECT_CALL(*command_buffer(), OnFlush())
    807       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    808       .RetiresOnSaturation();
    809 
    810   GLboolean result = gl_->IsEnabled(1);
    811   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    812   EXPECT_TRUE(result);
    813 }
    814 
    815 TEST_F(GLES2ImplementationTest, IsFramebuffer) {
    816   struct Cmds {
    817     cmds::IsFramebuffer cmd;
    818   };
    819 
    820   Cmds expected;
    821   ExpectedMemoryInfo result1 =
    822       GetExpectedResultMemory(sizeof(cmds::IsFramebuffer::Result));
    823   expected.cmd.Init(1, result1.id, result1.offset);
    824 
    825   EXPECT_CALL(*command_buffer(), OnFlush())
    826       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    827       .RetiresOnSaturation();
    828 
    829   GLboolean result = gl_->IsFramebuffer(1);
    830   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    831   EXPECT_TRUE(result);
    832 }
    833 
    834 TEST_F(GLES2ImplementationTest, IsProgram) {
    835   struct Cmds {
    836     cmds::IsProgram cmd;
    837   };
    838 
    839   Cmds expected;
    840   ExpectedMemoryInfo result1 =
    841       GetExpectedResultMemory(sizeof(cmds::IsProgram::Result));
    842   expected.cmd.Init(1, result1.id, result1.offset);
    843 
    844   EXPECT_CALL(*command_buffer(), OnFlush())
    845       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    846       .RetiresOnSaturation();
    847 
    848   GLboolean result = gl_->IsProgram(1);
    849   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    850   EXPECT_TRUE(result);
    851 }
    852 
    853 TEST_F(GLES2ImplementationTest, IsRenderbuffer) {
    854   struct Cmds {
    855     cmds::IsRenderbuffer cmd;
    856   };
    857 
    858   Cmds expected;
    859   ExpectedMemoryInfo result1 =
    860       GetExpectedResultMemory(sizeof(cmds::IsRenderbuffer::Result));
    861   expected.cmd.Init(1, result1.id, result1.offset);
    862 
    863   EXPECT_CALL(*command_buffer(), OnFlush())
    864       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    865       .RetiresOnSaturation();
    866 
    867   GLboolean result = gl_->IsRenderbuffer(1);
    868   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    869   EXPECT_TRUE(result);
    870 }
    871 
    872 TEST_F(GLES2ImplementationTest, IsShader) {
    873   struct Cmds {
    874     cmds::IsShader cmd;
    875   };
    876 
    877   Cmds expected;
    878   ExpectedMemoryInfo result1 =
    879       GetExpectedResultMemory(sizeof(cmds::IsShader::Result));
    880   expected.cmd.Init(1, result1.id, result1.offset);
    881 
    882   EXPECT_CALL(*command_buffer(), OnFlush())
    883       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    884       .RetiresOnSaturation();
    885 
    886   GLboolean result = gl_->IsShader(1);
    887   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    888   EXPECT_TRUE(result);
    889 }
    890 
    891 TEST_F(GLES2ImplementationTest, IsTexture) {
    892   struct Cmds {
    893     cmds::IsTexture cmd;
    894   };
    895 
    896   Cmds expected;
    897   ExpectedMemoryInfo result1 =
    898       GetExpectedResultMemory(sizeof(cmds::IsTexture::Result));
    899   expected.cmd.Init(1, result1.id, result1.offset);
    900 
    901   EXPECT_CALL(*command_buffer(), OnFlush())
    902       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
    903       .RetiresOnSaturation();
    904 
    905   GLboolean result = gl_->IsTexture(1);
    906   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    907   EXPECT_TRUE(result);
    908 }
    909 
    910 TEST_F(GLES2ImplementationTest, LineWidth) {
    911   struct Cmds {
    912     cmds::LineWidth cmd;
    913   };
    914   Cmds expected;
    915   expected.cmd.Init(0.5f);
    916 
    917   gl_->LineWidth(0.5f);
    918   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    919 }
    920 
    921 TEST_F(GLES2ImplementationTest, LinkProgram) {
    922   struct Cmds {
    923     cmds::LinkProgram cmd;
    924   };
    925   Cmds expected;
    926   expected.cmd.Init(1);
    927 
    928   gl_->LinkProgram(1);
    929   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    930 }
    931 
    932 TEST_F(GLES2ImplementationTest, PixelStorei) {
    933   struct Cmds {
    934     cmds::PixelStorei cmd;
    935   };
    936   Cmds expected;
    937   expected.cmd.Init(GL_PACK_ALIGNMENT, 1);
    938 
    939   gl_->PixelStorei(GL_PACK_ALIGNMENT, 1);
    940   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    941 }
    942 
    943 TEST_F(GLES2ImplementationTest, PolygonOffset) {
    944   struct Cmds {
    945     cmds::PolygonOffset cmd;
    946   };
    947   Cmds expected;
    948   expected.cmd.Init(1, 2);
    949 
    950   gl_->PolygonOffset(1, 2);
    951   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    952 }
    953 
    954 TEST_F(GLES2ImplementationTest, ReleaseShaderCompiler) {
    955   struct Cmds {
    956     cmds::ReleaseShaderCompiler cmd;
    957   };
    958   Cmds expected;
    959   expected.cmd.Init();
    960 
    961   gl_->ReleaseShaderCompiler();
    962   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    963 }
    964 
    965 TEST_F(GLES2ImplementationTest, RenderbufferStorage) {
    966   struct Cmds {
    967     cmds::RenderbufferStorage cmd;
    968   };
    969   Cmds expected;
    970   expected.cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
    971 
    972   gl_->RenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
    973   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    974 }
    975 
    976 TEST_F(GLES2ImplementationTest, SampleCoverage) {
    977   struct Cmds {
    978     cmds::SampleCoverage cmd;
    979   };
    980   Cmds expected;
    981   expected.cmd.Init(1, true);
    982 
    983   gl_->SampleCoverage(1, true);
    984   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    985 }
    986 
    987 TEST_F(GLES2ImplementationTest, Scissor) {
    988   struct Cmds {
    989     cmds::Scissor cmd;
    990   };
    991   Cmds expected;
    992   expected.cmd.Init(1, 2, 3, 4);
    993 
    994   gl_->Scissor(1, 2, 3, 4);
    995   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
    996 }
    997 
    998 TEST_F(GLES2ImplementationTest, StencilFunc) {
    999   struct Cmds {
   1000     cmds::StencilFunc cmd;
   1001   };
   1002   Cmds expected;
   1003   expected.cmd.Init(GL_NEVER, 2, 3);
   1004 
   1005   gl_->StencilFunc(GL_NEVER, 2, 3);
   1006   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1007 }
   1008 
   1009 TEST_F(GLES2ImplementationTest, StencilFuncSeparate) {
   1010   struct Cmds {
   1011     cmds::StencilFuncSeparate cmd;
   1012   };
   1013   Cmds expected;
   1014   expected.cmd.Init(GL_FRONT, GL_NEVER, 3, 4);
   1015 
   1016   gl_->StencilFuncSeparate(GL_FRONT, GL_NEVER, 3, 4);
   1017   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1018 }
   1019 
   1020 TEST_F(GLES2ImplementationTest, StencilMask) {
   1021   struct Cmds {
   1022     cmds::StencilMask cmd;
   1023   };
   1024   Cmds expected;
   1025   expected.cmd.Init(1);
   1026 
   1027   gl_->StencilMask(1);
   1028   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1029 }
   1030 
   1031 TEST_F(GLES2ImplementationTest, StencilMaskSeparate) {
   1032   struct Cmds {
   1033     cmds::StencilMaskSeparate cmd;
   1034   };
   1035   Cmds expected;
   1036   expected.cmd.Init(GL_FRONT, 2);
   1037 
   1038   gl_->StencilMaskSeparate(GL_FRONT, 2);
   1039   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1040 }
   1041 
   1042 TEST_F(GLES2ImplementationTest, StencilOp) {
   1043   struct Cmds {
   1044     cmds::StencilOp cmd;
   1045   };
   1046   Cmds expected;
   1047   expected.cmd.Init(GL_KEEP, GL_INCR, GL_KEEP);
   1048 
   1049   gl_->StencilOp(GL_KEEP, GL_INCR, GL_KEEP);
   1050   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1051 }
   1052 
   1053 TEST_F(GLES2ImplementationTest, StencilOpSeparate) {
   1054   struct Cmds {
   1055     cmds::StencilOpSeparate cmd;
   1056   };
   1057   Cmds expected;
   1058   expected.cmd.Init(GL_FRONT, GL_INCR, GL_KEEP, GL_KEEP);
   1059 
   1060   gl_->StencilOpSeparate(GL_FRONT, GL_INCR, GL_KEEP, GL_KEEP);
   1061   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1062 }
   1063 
   1064 TEST_F(GLES2ImplementationTest, TexParameterf) {
   1065   struct Cmds {
   1066     cmds::TexParameterf cmd;
   1067   };
   1068   Cmds expected;
   1069   expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   1070 
   1071   gl_->TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   1072   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1073 }
   1074 
   1075 TEST_F(GLES2ImplementationTest, TexParameterfv) {
   1076   GLfloat data[1] = {0};
   1077   struct Cmds {
   1078     cmds::TexParameterfvImmediate cmd;
   1079     GLfloat data[1];
   1080   };
   1081 
   1082   for (int jj = 0; jj < 1; ++jj) {
   1083     data[jj] = static_cast<GLfloat>(jj);
   1084   }
   1085   Cmds expected;
   1086   expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &data[0]);
   1087   gl_->TexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &data[0]);
   1088   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1089 }
   1090 
   1091 TEST_F(GLES2ImplementationTest, TexParameteri) {
   1092   struct Cmds {
   1093     cmds::TexParameteri cmd;
   1094   };
   1095   Cmds expected;
   1096   expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   1097 
   1098   gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
   1099   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1100 }
   1101 
   1102 TEST_F(GLES2ImplementationTest, TexParameteriv) {
   1103   GLint data[1] = {0};
   1104   struct Cmds {
   1105     cmds::TexParameterivImmediate cmd;
   1106     GLint data[1];
   1107   };
   1108 
   1109   for (int jj = 0; jj < 1; ++jj) {
   1110     data[jj] = static_cast<GLint>(jj);
   1111   }
   1112   Cmds expected;
   1113   expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &data[0]);
   1114   gl_->TexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &data[0]);
   1115   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1116 }
   1117 
   1118 TEST_F(GLES2ImplementationTest, Uniform1f) {
   1119   struct Cmds {
   1120     cmds::Uniform1f cmd;
   1121   };
   1122   Cmds expected;
   1123   expected.cmd.Init(1, 2);
   1124 
   1125   gl_->Uniform1f(1, 2);
   1126   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1127 }
   1128 
   1129 TEST_F(GLES2ImplementationTest, Uniform1fv) {
   1130   GLfloat data[2][1] = {{0}};
   1131   struct Cmds {
   1132     cmds::Uniform1fvImmediate cmd;
   1133     GLfloat data[2][1];
   1134   };
   1135 
   1136   Cmds expected;
   1137   for (int ii = 0; ii < 2; ++ii) {
   1138     for (int jj = 0; jj < 1; ++jj) {
   1139       data[ii][jj] = static_cast<GLfloat>(ii * 1 + jj);
   1140     }
   1141   }
   1142   expected.cmd.Init(1, 2, &data[0][0]);
   1143   gl_->Uniform1fv(1, 2, &data[0][0]);
   1144   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1145 }
   1146 
   1147 TEST_F(GLES2ImplementationTest, Uniform1i) {
   1148   struct Cmds {
   1149     cmds::Uniform1i cmd;
   1150   };
   1151   Cmds expected;
   1152   expected.cmd.Init(1, 2);
   1153 
   1154   gl_->Uniform1i(1, 2);
   1155   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1156 }
   1157 
   1158 TEST_F(GLES2ImplementationTest, Uniform1iv) {
   1159   GLint data[2][1] = {{0}};
   1160   struct Cmds {
   1161     cmds::Uniform1ivImmediate cmd;
   1162     GLint data[2][1];
   1163   };
   1164 
   1165   Cmds expected;
   1166   for (int ii = 0; ii < 2; ++ii) {
   1167     for (int jj = 0; jj < 1; ++jj) {
   1168       data[ii][jj] = static_cast<GLint>(ii * 1 + jj);
   1169     }
   1170   }
   1171   expected.cmd.Init(1, 2, &data[0][0]);
   1172   gl_->Uniform1iv(1, 2, &data[0][0]);
   1173   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1174 }
   1175 
   1176 TEST_F(GLES2ImplementationTest, Uniform2f) {
   1177   struct Cmds {
   1178     cmds::Uniform2f cmd;
   1179   };
   1180   Cmds expected;
   1181   expected.cmd.Init(1, 2, 3);
   1182 
   1183   gl_->Uniform2f(1, 2, 3);
   1184   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1185 }
   1186 
   1187 TEST_F(GLES2ImplementationTest, Uniform2fv) {
   1188   GLfloat data[2][2] = {{0}};
   1189   struct Cmds {
   1190     cmds::Uniform2fvImmediate cmd;
   1191     GLfloat data[2][2];
   1192   };
   1193 
   1194   Cmds expected;
   1195   for (int ii = 0; ii < 2; ++ii) {
   1196     for (int jj = 0; jj < 2; ++jj) {
   1197       data[ii][jj] = static_cast<GLfloat>(ii * 2 + jj);
   1198     }
   1199   }
   1200   expected.cmd.Init(1, 2, &data[0][0]);
   1201   gl_->Uniform2fv(1, 2, &data[0][0]);
   1202   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1203 }
   1204 
   1205 TEST_F(GLES2ImplementationTest, Uniform2i) {
   1206   struct Cmds {
   1207     cmds::Uniform2i cmd;
   1208   };
   1209   Cmds expected;
   1210   expected.cmd.Init(1, 2, 3);
   1211 
   1212   gl_->Uniform2i(1, 2, 3);
   1213   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1214 }
   1215 
   1216 TEST_F(GLES2ImplementationTest, Uniform2iv) {
   1217   GLint data[2][2] = {{0}};
   1218   struct Cmds {
   1219     cmds::Uniform2ivImmediate cmd;
   1220     GLint data[2][2];
   1221   };
   1222 
   1223   Cmds expected;
   1224   for (int ii = 0; ii < 2; ++ii) {
   1225     for (int jj = 0; jj < 2; ++jj) {
   1226       data[ii][jj] = static_cast<GLint>(ii * 2 + jj);
   1227     }
   1228   }
   1229   expected.cmd.Init(1, 2, &data[0][0]);
   1230   gl_->Uniform2iv(1, 2, &data[0][0]);
   1231   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1232 }
   1233 
   1234 TEST_F(GLES2ImplementationTest, Uniform3f) {
   1235   struct Cmds {
   1236     cmds::Uniform3f cmd;
   1237   };
   1238   Cmds expected;
   1239   expected.cmd.Init(1, 2, 3, 4);
   1240 
   1241   gl_->Uniform3f(1, 2, 3, 4);
   1242   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1243 }
   1244 
   1245 TEST_F(GLES2ImplementationTest, Uniform3fv) {
   1246   GLfloat data[2][3] = {{0}};
   1247   struct Cmds {
   1248     cmds::Uniform3fvImmediate cmd;
   1249     GLfloat data[2][3];
   1250   };
   1251 
   1252   Cmds expected;
   1253   for (int ii = 0; ii < 2; ++ii) {
   1254     for (int jj = 0; jj < 3; ++jj) {
   1255       data[ii][jj] = static_cast<GLfloat>(ii * 3 + jj);
   1256     }
   1257   }
   1258   expected.cmd.Init(1, 2, &data[0][0]);
   1259   gl_->Uniform3fv(1, 2, &data[0][0]);
   1260   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1261 }
   1262 
   1263 TEST_F(GLES2ImplementationTest, Uniform3i) {
   1264   struct Cmds {
   1265     cmds::Uniform3i cmd;
   1266   };
   1267   Cmds expected;
   1268   expected.cmd.Init(1, 2, 3, 4);
   1269 
   1270   gl_->Uniform3i(1, 2, 3, 4);
   1271   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1272 }
   1273 
   1274 TEST_F(GLES2ImplementationTest, Uniform3iv) {
   1275   GLint data[2][3] = {{0}};
   1276   struct Cmds {
   1277     cmds::Uniform3ivImmediate cmd;
   1278     GLint data[2][3];
   1279   };
   1280 
   1281   Cmds expected;
   1282   for (int ii = 0; ii < 2; ++ii) {
   1283     for (int jj = 0; jj < 3; ++jj) {
   1284       data[ii][jj] = static_cast<GLint>(ii * 3 + jj);
   1285     }
   1286   }
   1287   expected.cmd.Init(1, 2, &data[0][0]);
   1288   gl_->Uniform3iv(1, 2, &data[0][0]);
   1289   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1290 }
   1291 
   1292 TEST_F(GLES2ImplementationTest, Uniform4f) {
   1293   struct Cmds {
   1294     cmds::Uniform4f cmd;
   1295   };
   1296   Cmds expected;
   1297   expected.cmd.Init(1, 2, 3, 4, 5);
   1298 
   1299   gl_->Uniform4f(1, 2, 3, 4, 5);
   1300   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1301 }
   1302 
   1303 TEST_F(GLES2ImplementationTest, Uniform4fv) {
   1304   GLfloat data[2][4] = {{0}};
   1305   struct Cmds {
   1306     cmds::Uniform4fvImmediate cmd;
   1307     GLfloat data[2][4];
   1308   };
   1309 
   1310   Cmds expected;
   1311   for (int ii = 0; ii < 2; ++ii) {
   1312     for (int jj = 0; jj < 4; ++jj) {
   1313       data[ii][jj] = static_cast<GLfloat>(ii * 4 + jj);
   1314     }
   1315   }
   1316   expected.cmd.Init(1, 2, &data[0][0]);
   1317   gl_->Uniform4fv(1, 2, &data[0][0]);
   1318   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1319 }
   1320 
   1321 TEST_F(GLES2ImplementationTest, Uniform4i) {
   1322   struct Cmds {
   1323     cmds::Uniform4i cmd;
   1324   };
   1325   Cmds expected;
   1326   expected.cmd.Init(1, 2, 3, 4, 5);
   1327 
   1328   gl_->Uniform4i(1, 2, 3, 4, 5);
   1329   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1330 }
   1331 
   1332 TEST_F(GLES2ImplementationTest, Uniform4iv) {
   1333   GLint data[2][4] = {{0}};
   1334   struct Cmds {
   1335     cmds::Uniform4ivImmediate cmd;
   1336     GLint data[2][4];
   1337   };
   1338 
   1339   Cmds expected;
   1340   for (int ii = 0; ii < 2; ++ii) {
   1341     for (int jj = 0; jj < 4; ++jj) {
   1342       data[ii][jj] = static_cast<GLint>(ii * 4 + jj);
   1343     }
   1344   }
   1345   expected.cmd.Init(1, 2, &data[0][0]);
   1346   gl_->Uniform4iv(1, 2, &data[0][0]);
   1347   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1348 }
   1349 
   1350 TEST_F(GLES2ImplementationTest, UniformMatrix2fv) {
   1351   GLfloat data[2][4] = {{0}};
   1352   struct Cmds {
   1353     cmds::UniformMatrix2fvImmediate cmd;
   1354     GLfloat data[2][4];
   1355   };
   1356 
   1357   Cmds expected;
   1358   for (int ii = 0; ii < 2; ++ii) {
   1359     for (int jj = 0; jj < 4; ++jj) {
   1360       data[ii][jj] = static_cast<GLfloat>(ii * 4 + jj);
   1361     }
   1362   }
   1363   expected.cmd.Init(1, 2, &data[0][0]);
   1364   gl_->UniformMatrix2fv(1, 2, false, &data[0][0]);
   1365   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1366 }
   1367 
   1368 TEST_F(GLES2ImplementationTest, UniformMatrix2fvInvalidConstantArg2) {
   1369   GLfloat data[2][4] = {{0}};
   1370   for (int ii = 0; ii < 2; ++ii) {
   1371     for (int jj = 0; jj < 4; ++jj) {
   1372       data[ii][jj] = static_cast<GLfloat>(ii * 4 + jj);
   1373     }
   1374   }
   1375   gl_->UniformMatrix2fv(1, 2, true, &data[0][0]);
   1376   EXPECT_TRUE(NoCommandsWritten());
   1377   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
   1378 }
   1379 
   1380 TEST_F(GLES2ImplementationTest, UniformMatrix3fv) {
   1381   GLfloat data[2][9] = {{0}};
   1382   struct Cmds {
   1383     cmds::UniformMatrix3fvImmediate cmd;
   1384     GLfloat data[2][9];
   1385   };
   1386 
   1387   Cmds expected;
   1388   for (int ii = 0; ii < 2; ++ii) {
   1389     for (int jj = 0; jj < 9; ++jj) {
   1390       data[ii][jj] = static_cast<GLfloat>(ii * 9 + jj);
   1391     }
   1392   }
   1393   expected.cmd.Init(1, 2, &data[0][0]);
   1394   gl_->UniformMatrix3fv(1, 2, false, &data[0][0]);
   1395   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1396 }
   1397 
   1398 TEST_F(GLES2ImplementationTest, UniformMatrix3fvInvalidConstantArg2) {
   1399   GLfloat data[2][9] = {{0}};
   1400   for (int ii = 0; ii < 2; ++ii) {
   1401     for (int jj = 0; jj < 9; ++jj) {
   1402       data[ii][jj] = static_cast<GLfloat>(ii * 9 + jj);
   1403     }
   1404   }
   1405   gl_->UniformMatrix3fv(1, 2, true, &data[0][0]);
   1406   EXPECT_TRUE(NoCommandsWritten());
   1407   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
   1408 }
   1409 
   1410 TEST_F(GLES2ImplementationTest, UniformMatrix4fv) {
   1411   GLfloat data[2][16] = {{0}};
   1412   struct Cmds {
   1413     cmds::UniformMatrix4fvImmediate cmd;
   1414     GLfloat data[2][16];
   1415   };
   1416 
   1417   Cmds expected;
   1418   for (int ii = 0; ii < 2; ++ii) {
   1419     for (int jj = 0; jj < 16; ++jj) {
   1420       data[ii][jj] = static_cast<GLfloat>(ii * 16 + jj);
   1421     }
   1422   }
   1423   expected.cmd.Init(1, 2, &data[0][0]);
   1424   gl_->UniformMatrix4fv(1, 2, false, &data[0][0]);
   1425   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1426 }
   1427 
   1428 TEST_F(GLES2ImplementationTest, UniformMatrix4fvInvalidConstantArg2) {
   1429   GLfloat data[2][16] = {{0}};
   1430   for (int ii = 0; ii < 2; ++ii) {
   1431     for (int jj = 0; jj < 16; ++jj) {
   1432       data[ii][jj] = static_cast<GLfloat>(ii * 16 + jj);
   1433     }
   1434   }
   1435   gl_->UniformMatrix4fv(1, 2, true, &data[0][0]);
   1436   EXPECT_TRUE(NoCommandsWritten());
   1437   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
   1438 }
   1439 
   1440 TEST_F(GLES2ImplementationTest, UseProgram) {
   1441   struct Cmds {
   1442     cmds::UseProgram cmd;
   1443   };
   1444   Cmds expected;
   1445   expected.cmd.Init(1);
   1446 
   1447   gl_->UseProgram(1);
   1448   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1449   ClearCommands();
   1450   gl_->UseProgram(1);
   1451   EXPECT_TRUE(NoCommandsWritten());
   1452 }
   1453 
   1454 TEST_F(GLES2ImplementationTest, ValidateProgram) {
   1455   struct Cmds {
   1456     cmds::ValidateProgram cmd;
   1457   };
   1458   Cmds expected;
   1459   expected.cmd.Init(1);
   1460 
   1461   gl_->ValidateProgram(1);
   1462   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1463 }
   1464 
   1465 TEST_F(GLES2ImplementationTest, VertexAttrib1f) {
   1466   struct Cmds {
   1467     cmds::VertexAttrib1f cmd;
   1468   };
   1469   Cmds expected;
   1470   expected.cmd.Init(1, 2);
   1471 
   1472   gl_->VertexAttrib1f(1, 2);
   1473   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1474 }
   1475 
   1476 TEST_F(GLES2ImplementationTest, VertexAttrib1fv) {
   1477   GLfloat data[1] = {0};
   1478   struct Cmds {
   1479     cmds::VertexAttrib1fvImmediate cmd;
   1480     GLfloat data[1];
   1481   };
   1482 
   1483   for (int jj = 0; jj < 1; ++jj) {
   1484     data[jj] = static_cast<GLfloat>(jj);
   1485   }
   1486   Cmds expected;
   1487   expected.cmd.Init(1, &data[0]);
   1488   gl_->VertexAttrib1fv(1, &data[0]);
   1489   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1490 }
   1491 
   1492 TEST_F(GLES2ImplementationTest, VertexAttrib2f) {
   1493   struct Cmds {
   1494     cmds::VertexAttrib2f cmd;
   1495   };
   1496   Cmds expected;
   1497   expected.cmd.Init(1, 2, 3);
   1498 
   1499   gl_->VertexAttrib2f(1, 2, 3);
   1500   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1501 }
   1502 
   1503 TEST_F(GLES2ImplementationTest, VertexAttrib2fv) {
   1504   GLfloat data[2] = {0};
   1505   struct Cmds {
   1506     cmds::VertexAttrib2fvImmediate cmd;
   1507     GLfloat data[2];
   1508   };
   1509 
   1510   for (int jj = 0; jj < 2; ++jj) {
   1511     data[jj] = static_cast<GLfloat>(jj);
   1512   }
   1513   Cmds expected;
   1514   expected.cmd.Init(1, &data[0]);
   1515   gl_->VertexAttrib2fv(1, &data[0]);
   1516   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1517 }
   1518 
   1519 TEST_F(GLES2ImplementationTest, VertexAttrib3f) {
   1520   struct Cmds {
   1521     cmds::VertexAttrib3f cmd;
   1522   };
   1523   Cmds expected;
   1524   expected.cmd.Init(1, 2, 3, 4);
   1525 
   1526   gl_->VertexAttrib3f(1, 2, 3, 4);
   1527   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1528 }
   1529 
   1530 TEST_F(GLES2ImplementationTest, VertexAttrib3fv) {
   1531   GLfloat data[3] = {0};
   1532   struct Cmds {
   1533     cmds::VertexAttrib3fvImmediate cmd;
   1534     GLfloat data[3];
   1535   };
   1536 
   1537   for (int jj = 0; jj < 3; ++jj) {
   1538     data[jj] = static_cast<GLfloat>(jj);
   1539   }
   1540   Cmds expected;
   1541   expected.cmd.Init(1, &data[0]);
   1542   gl_->VertexAttrib3fv(1, &data[0]);
   1543   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1544 }
   1545 
   1546 TEST_F(GLES2ImplementationTest, VertexAttrib4f) {
   1547   struct Cmds {
   1548     cmds::VertexAttrib4f cmd;
   1549   };
   1550   Cmds expected;
   1551   expected.cmd.Init(1, 2, 3, 4, 5);
   1552 
   1553   gl_->VertexAttrib4f(1, 2, 3, 4, 5);
   1554   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1555 }
   1556 
   1557 TEST_F(GLES2ImplementationTest, VertexAttrib4fv) {
   1558   GLfloat data[4] = {0};
   1559   struct Cmds {
   1560     cmds::VertexAttrib4fvImmediate cmd;
   1561     GLfloat data[4];
   1562   };
   1563 
   1564   for (int jj = 0; jj < 4; ++jj) {
   1565     data[jj] = static_cast<GLfloat>(jj);
   1566   }
   1567   Cmds expected;
   1568   expected.cmd.Init(1, &data[0]);
   1569   gl_->VertexAttrib4fv(1, &data[0]);
   1570   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1571 }
   1572 
   1573 TEST_F(GLES2ImplementationTest, Viewport) {
   1574   struct Cmds {
   1575     cmds::Viewport cmd;
   1576   };
   1577   Cmds expected;
   1578   expected.cmd.Init(1, 2, 3, 4);
   1579 
   1580   gl_->Viewport(1, 2, 3, 4);
   1581   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1582 }
   1583 
   1584 TEST_F(GLES2ImplementationTest, BlitFramebufferCHROMIUM) {
   1585   struct Cmds {
   1586     cmds::BlitFramebufferCHROMIUM cmd;
   1587   };
   1588   Cmds expected;
   1589   expected.cmd.Init(1, 2, 3, 4, 5, 6, 7, 8, 9, GL_NEAREST);
   1590 
   1591   gl_->BlitFramebufferCHROMIUM(1, 2, 3, 4, 5, 6, 7, 8, 9, GL_NEAREST);
   1592   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1593 }
   1594 
   1595 TEST_F(GLES2ImplementationTest, RenderbufferStorageMultisampleCHROMIUM) {
   1596   struct Cmds {
   1597     cmds::RenderbufferStorageMultisampleCHROMIUM cmd;
   1598   };
   1599   Cmds expected;
   1600   expected.cmd.Init(GL_RENDERBUFFER, 2, GL_RGBA4, 4, 5);
   1601 
   1602   gl_->RenderbufferStorageMultisampleCHROMIUM(
   1603       GL_RENDERBUFFER, 2, GL_RGBA4, 4, 5);
   1604   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1605 }
   1606 
   1607 TEST_F(GLES2ImplementationTest, RenderbufferStorageMultisampleEXT) {
   1608   struct Cmds {
   1609     cmds::RenderbufferStorageMultisampleEXT cmd;
   1610   };
   1611   Cmds expected;
   1612   expected.cmd.Init(GL_RENDERBUFFER, 2, GL_RGBA4, 4, 5);
   1613 
   1614   gl_->RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, 2, GL_RGBA4, 4, 5);
   1615   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1616 }
   1617 
   1618 TEST_F(GLES2ImplementationTest, FramebufferTexture2DMultisampleEXT) {
   1619   struct Cmds {
   1620     cmds::FramebufferTexture2DMultisampleEXT cmd;
   1621   };
   1622   Cmds expected;
   1623   expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 6);
   1624 
   1625   gl_->FramebufferTexture2DMultisampleEXT(
   1626       GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0, 6);
   1627   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1628 }
   1629 
   1630 TEST_F(GLES2ImplementationTest,
   1631        FramebufferTexture2DMultisampleEXTInvalidConstantArg4) {
   1632   gl_->FramebufferTexture2DMultisampleEXT(
   1633       GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 1, 6);
   1634   EXPECT_TRUE(NoCommandsWritten());
   1635   EXPECT_EQ(GL_INVALID_VALUE, CheckError());
   1636 }
   1637 
   1638 TEST_F(GLES2ImplementationTest, TexStorage2DEXT) {
   1639   struct Cmds {
   1640     cmds::TexStorage2DEXT cmd;
   1641   };
   1642   Cmds expected;
   1643   expected.cmd.Init(GL_TEXTURE_2D, 2, GL_RGB565, 4, 5);
   1644 
   1645   gl_->TexStorage2DEXT(GL_TEXTURE_2D, 2, GL_RGB565, 4, 5);
   1646   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1647 }
   1648 
   1649 TEST_F(GLES2ImplementationTest, GenQueriesEXT) {
   1650   GLuint ids[2] = {
   1651       0,
   1652   };
   1653   struct Cmds {
   1654     cmds::GenQueriesEXTImmediate gen;
   1655     GLuint data[2];
   1656   };
   1657   Cmds expected;
   1658   expected.gen.Init(arraysize(ids), &ids[0]);
   1659   expected.data[0] = kQueriesStartId;
   1660   expected.data[1] = kQueriesStartId + 1;
   1661   gl_->GenQueriesEXT(arraysize(ids), &ids[0]);
   1662   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1663   EXPECT_EQ(kQueriesStartId, ids[0]);
   1664   EXPECT_EQ(kQueriesStartId + 1, ids[1]);
   1665 }
   1666 
   1667 TEST_F(GLES2ImplementationTest, DeleteQueriesEXT) {
   1668   GLuint ids[2] = {kQueriesStartId, kQueriesStartId + 1};
   1669   struct Cmds {
   1670     cmds::DeleteQueriesEXTImmediate del;
   1671     GLuint data[2];
   1672   };
   1673   Cmds expected;
   1674   expected.del.Init(arraysize(ids), &ids[0]);
   1675   expected.data[0] = kQueriesStartId;
   1676   expected.data[1] = kQueriesStartId + 1;
   1677   gl_->DeleteQueriesEXT(arraysize(ids), &ids[0]);
   1678   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1679 }
   1680 // TODO: Implement unit test for BeginQueryEXT
   1681 // TODO: Implement unit test for InsertEventMarkerEXT
   1682 // TODO: Implement unit test for PushGroupMarkerEXT
   1683 
   1684 TEST_F(GLES2ImplementationTest, PopGroupMarkerEXT) {
   1685   struct Cmds {
   1686     cmds::PopGroupMarkerEXT cmd;
   1687   };
   1688   Cmds expected;
   1689   expected.cmd.Init();
   1690 
   1691   gl_->PopGroupMarkerEXT();
   1692   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1693 }
   1694 
   1695 TEST_F(GLES2ImplementationTest, GenVertexArraysOES) {
   1696   GLuint ids[2] = {
   1697       0,
   1698   };
   1699   struct Cmds {
   1700     cmds::GenVertexArraysOESImmediate gen;
   1701     GLuint data[2];
   1702   };
   1703   Cmds expected;
   1704   expected.gen.Init(arraysize(ids), &ids[0]);
   1705   expected.data[0] = kVertexArraysStartId;
   1706   expected.data[1] = kVertexArraysStartId + 1;
   1707   gl_->GenVertexArraysOES(arraysize(ids), &ids[0]);
   1708   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1709   EXPECT_EQ(kVertexArraysStartId, ids[0]);
   1710   EXPECT_EQ(kVertexArraysStartId + 1, ids[1]);
   1711 }
   1712 
   1713 TEST_F(GLES2ImplementationTest, DeleteVertexArraysOES) {
   1714   GLuint ids[2] = {kVertexArraysStartId, kVertexArraysStartId + 1};
   1715   struct Cmds {
   1716     cmds::DeleteVertexArraysOESImmediate del;
   1717     GLuint data[2];
   1718   };
   1719   Cmds expected;
   1720   expected.del.Init(arraysize(ids), &ids[0]);
   1721   expected.data[0] = kVertexArraysStartId;
   1722   expected.data[1] = kVertexArraysStartId + 1;
   1723   gl_->DeleteVertexArraysOES(arraysize(ids), &ids[0]);
   1724   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1725 }
   1726 
   1727 TEST_F(GLES2ImplementationTest, IsVertexArrayOES) {
   1728   struct Cmds {
   1729     cmds::IsVertexArrayOES cmd;
   1730   };
   1731 
   1732   Cmds expected;
   1733   ExpectedMemoryInfo result1 =
   1734       GetExpectedResultMemory(sizeof(cmds::IsVertexArrayOES::Result));
   1735   expected.cmd.Init(1, result1.id, result1.offset);
   1736 
   1737   EXPECT_CALL(*command_buffer(), OnFlush())
   1738       .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
   1739       .RetiresOnSaturation();
   1740 
   1741   GLboolean result = gl_->IsVertexArrayOES(1);
   1742   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1743   EXPECT_TRUE(result);
   1744 }
   1745 // TODO: Implement unit test for GenSharedIdsCHROMIUM
   1746 // TODO: Implement unit test for DeleteSharedIdsCHROMIUM
   1747 // TODO: Implement unit test for RegisterSharedIdsCHROMIUM
   1748 // TODO: Implement unit test for EnableFeatureCHROMIUM
   1749 
   1750 TEST_F(GLES2ImplementationTest, ResizeCHROMIUM) {
   1751   struct Cmds {
   1752     cmds::ResizeCHROMIUM cmd;
   1753   };
   1754   Cmds expected;
   1755   expected.cmd.Init(1, 2, 3);
   1756 
   1757   gl_->ResizeCHROMIUM(1, 2, 3);
   1758   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1759 }
   1760 // TODO: Implement unit test for GetRequestableExtensionsCHROMIUM
   1761 // TODO: Implement unit test for CreateStreamTextureCHROMIUM
   1762 // TODO: Implement unit test for GetTranslatedShaderSourceANGLE
   1763 
   1764 TEST_F(GLES2ImplementationTest, TexImageIOSurface2DCHROMIUM) {
   1765   struct Cmds {
   1766     cmds::TexImageIOSurface2DCHROMIUM cmd;
   1767   };
   1768   Cmds expected;
   1769   expected.cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5);
   1770 
   1771   gl_->TexImageIOSurface2DCHROMIUM(GL_TEXTURE_2D, 2, 3, 4, 5);
   1772   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1773 }
   1774 
   1775 TEST_F(GLES2ImplementationTest, CopyTextureCHROMIUM) {
   1776   struct Cmds {
   1777     cmds::CopyTextureCHROMIUM cmd;
   1778   };
   1779   Cmds expected;
   1780   expected.cmd.Init(1, 2, 3, 4, GL_ALPHA, GL_UNSIGNED_BYTE);
   1781 
   1782   gl_->CopyTextureCHROMIUM(1, 2, 3, 4, GL_ALPHA, GL_UNSIGNED_BYTE);
   1783   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1784 }
   1785 
   1786 TEST_F(GLES2ImplementationTest, DrawArraysInstancedANGLE) {
   1787   struct Cmds {
   1788     cmds::DrawArraysInstancedANGLE cmd;
   1789   };
   1790   Cmds expected;
   1791   expected.cmd.Init(GL_POINTS, 2, 3, 4);
   1792 
   1793   gl_->DrawArraysInstancedANGLE(GL_POINTS, 2, 3, 4);
   1794   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1795 }
   1796 
   1797 TEST_F(GLES2ImplementationTest, VertexAttribDivisorANGLE) {
   1798   struct Cmds {
   1799     cmds::VertexAttribDivisorANGLE cmd;
   1800   };
   1801   Cmds expected;
   1802   expected.cmd.Init(1, 2);
   1803 
   1804   gl_->VertexAttribDivisorANGLE(1, 2);
   1805   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1806 }
   1807 // TODO: Implement unit test for GenMailboxCHROMIUM
   1808 // TODO: Implement unit test for BindUniformLocationCHROMIUM
   1809 
   1810 TEST_F(GLES2ImplementationTest, BindTexImage2DCHROMIUM) {
   1811   struct Cmds {
   1812     cmds::BindTexImage2DCHROMIUM cmd;
   1813   };
   1814   Cmds expected;
   1815   expected.cmd.Init(GL_TEXTURE_2D, 2);
   1816 
   1817   gl_->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, 2);
   1818   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1819 }
   1820 
   1821 TEST_F(GLES2ImplementationTest, ReleaseTexImage2DCHROMIUM) {
   1822   struct Cmds {
   1823     cmds::ReleaseTexImage2DCHROMIUM cmd;
   1824   };
   1825   Cmds expected;
   1826   expected.cmd.Init(GL_TEXTURE_2D, 2);
   1827 
   1828   gl_->ReleaseTexImage2DCHROMIUM(GL_TEXTURE_2D, 2);
   1829   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1830 }
   1831 
   1832 TEST_F(GLES2ImplementationTest, DiscardFramebufferEXT) {
   1833   GLenum data[2][1] = {{0}};
   1834   struct Cmds {
   1835     cmds::DiscardFramebufferEXTImmediate cmd;
   1836     GLenum data[2][1];
   1837   };
   1838 
   1839   Cmds expected;
   1840   for (int ii = 0; ii < 2; ++ii) {
   1841     for (int jj = 0; jj < 1; ++jj) {
   1842       data[ii][jj] = static_cast<GLenum>(ii * 1 + jj);
   1843     }
   1844   }
   1845   expected.cmd.Init(1, 2, &data[0][0]);
   1846   gl_->DiscardFramebufferEXT(1, 2, &data[0][0]);
   1847   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1848 }
   1849 
   1850 TEST_F(GLES2ImplementationTest, LoseContextCHROMIUM) {
   1851   struct Cmds {
   1852     cmds::LoseContextCHROMIUM cmd;
   1853   };
   1854   Cmds expected;
   1855   expected.cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_GUILTY_CONTEXT_RESET_ARB);
   1856 
   1857   gl_->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
   1858                            GL_GUILTY_CONTEXT_RESET_ARB);
   1859   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1860 }
   1861 // TODO: Implement unit test for InsertSyncPointCHROMIUM
   1862 
   1863 TEST_F(GLES2ImplementationTest, WaitSyncPointCHROMIUM) {
   1864   struct Cmds {
   1865     cmds::WaitSyncPointCHROMIUM cmd;
   1866   };
   1867   Cmds expected;
   1868   expected.cmd.Init(1);
   1869 
   1870   gl_->WaitSyncPointCHROMIUM(1);
   1871   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1872 }
   1873 
   1874 TEST_F(GLES2ImplementationTest, DrawBuffersEXT) {
   1875   GLenum data[1][1] = {{0}};
   1876   struct Cmds {
   1877     cmds::DrawBuffersEXTImmediate cmd;
   1878     GLenum data[1][1];
   1879   };
   1880 
   1881   Cmds expected;
   1882   for (int ii = 0; ii < 1; ++ii) {
   1883     for (int jj = 0; jj < 1; ++jj) {
   1884       data[ii][jj] = static_cast<GLenum>(ii * 1 + jj);
   1885     }
   1886   }
   1887   expected.cmd.Init(1, &data[0][0]);
   1888   gl_->DrawBuffersEXT(1, &data[0][0]);
   1889   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1890 }
   1891 
   1892 TEST_F(GLES2ImplementationTest, DiscardBackbufferCHROMIUM) {
   1893   struct Cmds {
   1894     cmds::DiscardBackbufferCHROMIUM cmd;
   1895   };
   1896   Cmds expected;
   1897   expected.cmd.Init();
   1898 
   1899   gl_->DiscardBackbufferCHROMIUM();
   1900   EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
   1901 }
   1902 #endif  // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
   1903