15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/cmd_buffer_engine.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/context_group.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/program_manager.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::gfx::MockGLInterface;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::InSequence;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::MatcherCast;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArrayArgument;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgumentPointee;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2DecoderTest2 : public GLES2DecoderTestBase {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLES2DecoderTest2() { }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXT, 0>(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!valid) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to make it again
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // will fail.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmds::GenQueriesEXT cmd;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmd.Init(1, shared_memory_id_, shared_memory_offset_);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXTImmediate, 0>(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!valid) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to make it again
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // will fail.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmds::GenQueriesEXT cmd;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmd.Init(1, shared_memory_id_, shared_memory_offset_);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXT, 0>(
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to delete it will succeed.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmds::GenQueriesEXT cmd;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmd.Init(1, shared_memory_id_, shared_memory_offset_);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXTImmediate, 0>(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to delete it will succeed.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    cmds::GenQueriesEXT cmd;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    cmd.Init(1, shared_memory_id_, shared_memory_offset_);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::LinkProgram, 0>(
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kClientVertexShaderId = 5001;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kServiceVertexShaderId = 6001;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kClientFragmentShaderId = 5002;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kServiceFragmentShaderId = 6002;
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoCreateShader(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_VERTEX_SHADER, kClientVertexShaderId, kServiceVertexShaderId);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoCreateShader(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER, kClientFragmentShaderId, kServiceFragmentShaderId);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetShader(kClientVertexShaderId)->SetStatus(true, "", NULL);
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetShader(kClientFragmentShaderId)->SetStatus(true, "", NULL);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InSequence dummy;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AttachShader(kServiceProgramId, kServiceVertexShaderId))
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AttachShader(kServiceProgramId, kServiceFragmentShaderId))
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(1));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _))
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0))
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTES, _))
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *gl_,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, _))
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _))
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *gl_,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORM_MAX_LENGTH, _))
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::AttachShader attach_cmd;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  attach_cmd.Init(client_program_id_, kClientVertexShaderId);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  attach_cmd.Init(client_program_id_, kClientFragmentShaderId);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>(
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needs the same setup as LinkProgram.
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::LinkProgram, 0>(false);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::LinkProgram link_cmd;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  link_cmd.Init(client_program_id_);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _))
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0))
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1f, 0>(
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT);
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fv, 0>(
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fvImmediate, 0>(
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1iv, 0>(
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1ivImmediate, 0>(
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2f, 0>(
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC2);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2i, 0>(
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC2);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fv, 0>(
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC2);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2iv, 0>(
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC2);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fvImmediate, 0>(
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC2);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2ivImmediate, 0>(
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC2);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3f, 0>(
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC3);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3i, 0>(
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC3);
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fv, 0>(
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC3);
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3iv, 0>(
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC3);
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fvImmediate, 0>(
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC3);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3ivImmediate, 0>(
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC3);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4f, 0>(
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC4);
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4i, 0>(
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC4);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fv, 0>(
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC4);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4iv, 0>(
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC4);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fvImmediate, 0>(
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC4);
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4ivImmediate, 0>(
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC4);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fv, 0>(
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT2);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>(
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT2);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fv, 0>(
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT3);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT3);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fv, 0>(
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT4);
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT4);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::RenderbufferStorage, 0>(
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    kServiceRenderbufferId);
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_CALL(*gl_, GetError())
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillOnce(Return(GL_NO_ERROR))
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .RetiresOnSaturation();
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_CALL(*gl_,
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                RenderbufferStorageEXT(GL_RENDERBUFFER, _, 3, 4))
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .Times(1)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .RetiresOnSaturation();
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_CALL(*gl_, GetError())
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillOnce(Return(GL_NO_ERROR))
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .RetiresOnSaturation();
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterf, 0>(
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteri, 0>(
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfv, 0>(
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfvImmediate, 0>(
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteriv, 0>(
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterivImmediate, 0>(
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::GetVertexAttribiv, 0>(
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool valid) {
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoVertexAttribPointer(1, 1, GL_FLOAT, 0, 0);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_CALL(*gl_, GetError())
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillOnce(Return(GL_NO_ERROR))
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .WillOnce(Return(GL_NO_ERROR))
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .RetiresOnSaturation();
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h"
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
403