14ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch// Copyright 2014 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)// This file is auto-generated from
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// gpu/command_buffer/build_gles2_cmd_buffer.py
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// It's formatted by clang-format using chromium coding style:
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//    clang-format -i -style=chromium filename
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DO NOT EDIT!
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It is included by gles2_cmd_decoder_unittest_1.cc
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): ActiveTexture
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, AttachShaderValidArgs) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, AttachShader(kServiceProgramId, kServiceShaderId));
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::AttachShader, 0>(true);
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::AttachShader cmd;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_program_id_, client_shader_id_);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): BindAttribLocationBucket
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindBufferValidArgs) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceBufferId));
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindBuffer, 0>(true);
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindBuffer cmd;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER, client_buffer_id_);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindBufferValidArgsNewId) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kNewServiceId));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenBuffersARB(1, _))
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindBuffer, 0>(true);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindBuffer cmd;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER, kNewClientId);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindBufferInvalidArgs0_0) {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindBuffer, 0>(false);
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindBuffer cmd;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, client_buffer_id_);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindFramebufferValidArgs) {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId));
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindFramebuffer, 0>(true);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindFramebuffer cmd;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, client_framebuffer_id_);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindFramebufferValidArgsNewId) {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kNewServiceId));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindFramebuffer, 0>(true);
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindFramebuffer cmd;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, kNewClientId);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindFramebuffer, 0>(false);
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindFramebuffer cmd;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_DRAW_FRAMEBUFFER, client_framebuffer_id_);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindFramebuffer, 0>(false);
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindFramebuffer cmd;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_READ_FRAMEBUFFER, client_framebuffer_id_);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgs) {
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              BindRenderbufferEXT(GL_RENDERBUFFER, kServiceRenderbufferId));
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindRenderbuffer cmd;
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, client_renderbuffer_id_);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kNewServiceId));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindRenderbuffer cmd;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, kNewClientId);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0);
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindRenderbuffer, 0>(false);
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindRenderbuffer cmd;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, client_renderbuffer_id_);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindTextureValidArgs) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId));
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindTexture, 0>(true);
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindTexture cmd;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, client_texture_id_);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindTextureValidArgsNewId) {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenTextures(1, _))
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindTexture, 0>(true);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindTexture cmd;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, kNewClientId);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_0) {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindTexture, 0>(false);
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindTexture cmd;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_1D, client_texture_id_);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_1) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BindTexture, 0>(false);
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BindTexture cmd;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_3D, client_texture_id_);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendColorValidArgs) {
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendColor(1, 2, 3, 4));
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendColor, 0>(true);
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendColor cmd;
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, 2, 3, 4);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationValidArgs) {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquation(GL_FUNC_SUBTRACT));
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquation, 0>(true);
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquation cmd;
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(GL_FUNC_SUBTRACT);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquation, 0>(false);
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquation cmd;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_MIN);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquation, 0>(false);
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquation cmd;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_MAX);
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationSeparateValidArgs) {
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquationSeparate(GL_FUNC_SUBTRACT, GL_FUNC_ADD));
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquationSeparate, 0>(true);
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquationSeparate cmd;
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(GL_FUNC_SUBTRACT, GL_FUNC_ADD);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquationSeparate cmd;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_MIN, GL_FUNC_ADD);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquationSeparate cmd;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_MAX, GL_FUNC_ADD);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) {
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquationSeparate cmd;
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(GL_FUNC_SUBTRACT, GL_MIN);
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) {
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendEquationSeparate cmd;
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(GL_FUNC_SUBTRACT, GL_MAX);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
247010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendFuncValidArgs) {
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendFunc(GL_ZERO, GL_ZERO));
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendFunc, 0>(true);
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendFunc cmd;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ZERO, GL_ZERO);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, BlendFuncSeparateValidArgs) {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, BlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO));
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::BlendFuncSeparate, 0>(true);
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::BlendFuncSeparate cmd;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): BufferData
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): BufferSubData
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
268010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) {
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER));
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(true);
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CheckFramebufferStatus cmd;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CheckFramebufferStatus cmd;
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_DRAW_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
286010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) {
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CheckFramebufferStatus cmd;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_READ_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) {
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)).Times(0);
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CheckFramebufferStatus cmd;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, kInvalidSharedMemoryId, shared_memory_offset_);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, kInvalidSharedMemoryOffset);
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, ClearValidArgs) {
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*gl_, Clear(1));
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Clear, 0>(true);
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Clear cmd;
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(1);
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, ClearColorValidArgs) {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, ClearColor(1, 2, 3, 4));
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::ClearColor, 0>(true);
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::ClearColor cmd;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, 2, 3, 4);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, ClearDepthfValidArgs) {
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*gl_, ClearDepth(0.5f));
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::ClearDepthf, 0>(true);
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::ClearDepthf cmd;
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmd.Init(0.5f);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, ClearStencilValidArgs) {
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, ClearStencil(1));
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::ClearStencil, 0>(true);
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::ClearStencil cmd;
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1);
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, ColorMaskValidArgs) {
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::ColorMask, 0>(true);
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::ColorMask cmd;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(true, true, true, true);
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): CompileShader
349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(gman): CompressedTexImage2DBucket
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): CompressedTexImage2D
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(gman): CompressedTexSubImage2DBucket
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): CompressedTexSubImage2D
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): CopyTexImage2D
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8));
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(true);
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CopyTexSubImage2D cmd;
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CopyTexSubImage2D cmd;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP, 2, 3, 4, 5, 6, 7, 8);
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) {
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CopyTexSubImage2D cmd;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, -1, 8);
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) {
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CopyTexSubImage2D cmd;
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, -1);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
393010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CreateProgramValidArgs) {
394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, CreateProgram()).WillOnce(Return(kNewServiceId));
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CreateProgram, 0>(true);
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CreateProgram cmd;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(kNewClientId);
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetProgram(kNewClientId) != NULL);
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
403010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CreateShaderValidArgs) {
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CreateShader(GL_VERTEX_SHADER))
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(kNewServiceId));
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CreateShader, 0>(true);
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CreateShader cmd;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_VERTEX_SHADER, kNewClientId);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetShader(kNewClientId) != NULL);
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) {
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CreateShader(_)).Times(0);
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CreateShader, 0>(false);
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CreateShader cmd;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_GEOMETRY_SHADER, kNewClientId);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, CullFaceValidArgs) {
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, CullFace(GL_FRONT));
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::CullFace, 0>(true);
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::CullFace cmd;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FRONT);
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) {
433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(kServiceBufferId))).Times(1);
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteBuffersImmediate& cmd =
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteBuffersImmediate>();
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(true);
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &client_buffer_id_);
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError,
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(cmd, sizeof(client_buffer_id_)));
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(GetBuffer(client_buffer_id_) == NULL);
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
444010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateInvalidArgs) {
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteBuffersImmediate& cmd =
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteBuffersImmediate>();
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(false);
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kInvalidClientId;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &temp);
450a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
453010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) {
454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1);
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteFramebuffersImmediate& cmd =
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteFramebuffersImmediate, 0>(true);
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &client_framebuffer_id_);
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError,
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(cmd, sizeof(client_framebuffer_id_)));
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(GetFramebuffer(client_framebuffer_id_) == NULL);
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
466010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateInvalidArgs) {
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteFramebuffersImmediate& cmd =
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteFramebuffersImmediate, 0>(false);
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kInvalidClientId;
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &temp);
472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteProgramValidArgs) {
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId));
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteProgram, 0>(true);
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteProgram cmd;
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_program_id_);
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
484010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) {
485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1);
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteRenderbuffersImmediate& cmd =
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteRenderbuffersImmediate, 0>(true);
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &client_renderbuffer_id_);
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError,
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(cmd, sizeof(client_renderbuffer_id_)));
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(GetRenderbuffer(client_renderbuffer_id_) == NULL);
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateInvalidArgs) {
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteRenderbuffersImmediate& cmd =
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteRenderbuffersImmediate, 0>(false);
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kInvalidClientId;
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &temp);
503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
506010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteShaderValidArgs) {
5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteShader(kServiceShaderId));
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteShader, 0>(true);
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteShader cmd;
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_shader_id_);
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) {
516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(kServiceTextureId))).Times(1);
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteTexturesImmediate& cmd =
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteTexturesImmediate>();
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(true);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &client_texture_id_);
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError,
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(cmd, sizeof(client_texture_id_)));
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_TRUE(GetTexture(client_texture_id_) == NULL);
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateInvalidArgs) {
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DeleteTexturesImmediate& cmd =
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *GetImmediateAs<cmds::DeleteTexturesImmediate>();
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(false);
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kInvalidClientId;
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, &temp);
533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
536010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DepthFuncValidArgs) {
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DepthFunc(GL_NEVER));
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DepthFunc, 0>(true);
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DepthFunc cmd;
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_NEVER);
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DepthMaskValidArgs) {
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DepthMask, 0>(true);
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DepthMask cmd;
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(true);
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
553010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DepthRangefValidArgs) {
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DepthRange(1, 2));
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DepthRangef, 0>(true);
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DepthRangef cmd;
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, 2);
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
562010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DetachShaderValidArgs) {
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DetachShader(kServiceProgramId, kServiceShaderId));
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DetachShader, 0>(true);
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DetachShader cmd;
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_program_id_, client_shader_id_);
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
571010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DisableValidArgs) {
572010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExpectationsForEnableDisable(GL_BLEND, false);
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Disable, 0>(true);
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Disable cmd;
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_BLEND);
5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
580010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_0) {
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Disable(_)).Times(0);
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Disable, 0>(false);
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Disable cmd;
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_CLIP_PLANE0);
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
589010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_1) {
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Disable(_)).Times(0);
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Disable, 0>(false);
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Disable cmd;
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_POINT_SPRITE);
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
598010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) {
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, DisableVertexAttribArray(1));
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::DisableVertexAttribArray, 0>(true);
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::DisableVertexAttribArray cmd;
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1);
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): DrawArrays
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): DrawElements
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
610010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, EnableValidArgs) {
611010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  SetupExpectationsForEnableDisable(GL_BLEND, true);
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Enable, 0>(true);
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Enable cmd;
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_BLEND);
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
619010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_0) {
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Enable(_)).Times(0);
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Enable, 0>(false);
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Enable cmd;
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_CLIP_PLANE0);
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
628010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_1) {
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Enable(_)).Times(0);
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Enable, 0>(false);
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Enable cmd;
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_POINT_SPRITE);
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
637010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) {
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, EnableVertexAttribArray(1));
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::EnableVertexAttribArray, 0>(true);
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::EnableVertexAttribArray cmd;
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1);
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
646010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FinishValidArgs) {
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Finish());
6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Finish, 0>(true);
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Finish cmd;
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init();
6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FlushValidArgs) {
6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, Flush());
6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::Flush, 0>(true);
6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::Flush cmd;
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init();
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
664010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) {
665a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
667a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                         GL_COLOR_ATTACHMENT0,
668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                         GL_RENDERBUFFER,
669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                         kServiceRenderbufferId));
6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(true);
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferRenderbuffer cmd;
672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER,
675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           client_renderbuffer_id_);
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
680010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) {
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferRenderbuffer cmd;
684a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_DRAW_FRAMEBUFFER,
685a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
686a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER,
687a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           client_renderbuffer_id_);
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
692010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_1) {
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferRenderbuffer cmd;
696a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_READ_FRAMEBUFFER,
697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER,
699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           client_renderbuffer_id_);
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
704010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) {
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferRenderbuffer cmd;
708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER,
711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           client_renderbuffer_id_);
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
716010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferTexture2DValidArgs) {
717a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
718a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              FramebufferTexture2DEXT(GL_FRAMEBUFFER,
719a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                      GL_COLOR_ATTACHMENT0,
720a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                      GL_TEXTURE_2D,
721a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                      kServiceTextureId,
722a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                      0));
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferTexture2D, 0>(true);
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferTexture2D cmd;
725cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(
726cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_);
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
731010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) {
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferTexture2D cmd;
735a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_DRAW_FRAMEBUFFER,
736a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_2D,
738cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           client_texture_id_);
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
743010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_1) {
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferTexture2D cmd;
747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_READ_FRAMEBUFFER,
748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_2D,
750cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           client_texture_id_);
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) {
7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FramebufferTexture2D cmd;
759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
760a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_PROXY_TEXTURE_CUBE_MAP,
762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           client_texture_id_);
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
767010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, FrontFaceValidArgs) {
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, FrontFace(GL_CW));
7692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::FrontFace, 0>(true);
7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::FrontFace cmd;
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_CW);
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
776010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenBuffersImmediateValidArgs) {
7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenBuffersARB(1, _))
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kNewClientId;
7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenBuffersImmediate, 0>(true);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &temp);
783a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
788010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) {
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0);
7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenBuffersImmediate, 0>(false);
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &client_buffer_id_);
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kInvalidArguments,
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(*cmd, sizeof(&client_buffer_id_)));
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
797010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenerateMipmapValidArgs) {
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenerateMipmap, 0>(true);
8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenerateMipmap cmd;
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D);
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
806010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) {
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenerateMipmap, 0>(false);
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenerateMipmap cmd;
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_1D);
8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) {
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenerateMipmap, 0>(false);
8182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenerateMipmap cmd;
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_3D);
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
824010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) {
8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenFramebuffersImmediate* cmd =
8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenFramebuffersImmediate>();
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kNewClientId;
8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenFramebuffersImmediate, 0>(true);
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &temp);
832a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
837010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) {
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0);
8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenFramebuffersImmediate* cmd =
8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenFramebuffersImmediate>();
8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenFramebuffersImmediate, 0>(false);
8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &client_framebuffer_id_);
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kInvalidArguments,
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(*cmd, sizeof(&client_framebuffer_id_)));
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
847010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) {
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenRenderbuffersImmediate* cmd =
8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenRenderbuffersImmediate>();
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kNewClientId;
8532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenRenderbuffersImmediate, 0>(true);
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &temp);
855a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
8572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
860010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) {
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0);
8622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenRenderbuffersImmediate* cmd =
8632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenRenderbuffersImmediate>();
8642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenRenderbuffersImmediate, 0>(false);
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &client_renderbuffer_id_);
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kInvalidArguments,
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(*cmd, sizeof(&client_renderbuffer_id_)));
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
870010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenTexturesImmediateValidArgs) {
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenTextures(1, _))
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<1>(kNewServiceId));
8732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenTexturesImmediate* cmd =
8742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenTexturesImmediate>();
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLuint temp = kNewClientId;
8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenTexturesImmediate, 0>(true);
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &temp);
878a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
883010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) {
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0);
8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GenTexturesImmediate* cmd =
8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetImmediateAs<cmds::GenTexturesImmediate>();
8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GenTexturesImmediate, 0>(false);
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd->Init(1, &client_texture_id_);
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kInvalidArguments,
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            ExecuteImmediateCmd(*cmd, sizeof(&client_texture_id_)));
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetActiveAttrib
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetActiveUniform
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetAttachedShaders
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetAttribLocation
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
900010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBooleanvValidArgs) {
9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBooleanv, 0>(true);
9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetBooleanv::Result Result;
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBooleanv(GL_ACTIVE_TEXTURE, result->GetData()));
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv cmd;
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
913a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
918010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) {
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBooleanv, 0>(false);
9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv::Result* result =
9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv cmd;
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
931010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) {
9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBooleanv, 0>(false);
9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv::Result* result =
9352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv cmd;
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
943010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) {
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBooleanv, 0>(false);
9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv::Result* result =
9472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBooleanv::Result*>(shared_memory_address_);
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBooleanv cmd;
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBufferParameterivValidArgs) {
9562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBufferParameteriv, 0>(true);
9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetBufferParameteriv::Result Result;
9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv cmd;
961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER,
962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_BUFFER_SIZE,
963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
966a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_BUFFER_SIZE),
9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
971010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) {
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
9732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv::Result* result =
9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv cmd;
978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER,
979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_BUFFER_SIZE,
980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
987010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs1_0) {
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv::Result* result =
9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv cmd;
994a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER,
995a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_PIXEL_PACK_BUFFER,
996a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
997a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1003010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) {
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv::Result* result =
10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv cmd;
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, kInvalidSharedMemoryId, 0);
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_1) {
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv::Result* result =
10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetBufferParameteriv cmd;
1022a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_ARRAY_BUFFER,
1023a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_BUFFER_SIZE,
1024a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1025a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1030010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetErrorValidArgs) {
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError());
10322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetError, 0>(true);
10332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetError cmd;
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(shared_memory_id_, shared_memory_offset_);
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1039010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) {
10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError()).Times(0);
10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetError, 0>(false);
10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetError cmd;
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(kInvalidSharedMemoryId, shared_memory_offset_);
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(shared_memory_id_, kInvalidSharedMemoryOffset);
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1049010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFloatvValidArgs) {
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
10542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFloatv, 0>(true);
10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetFloatv::Result Result;
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFloatv(GL_ACTIVE_TEXTURE, result->GetData()));
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv cmd;
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1062a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1067010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) {
10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
10692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFloatv, 0>(false);
10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv::Result* result =
10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv cmd;
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1080010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) {
10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFloatv, 0>(false);
10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv::Result* result =
10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv cmd;
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1092010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) {
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
10942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFloatv, 0>(false);
10952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv::Result* result =
10962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFloatv::Result*>(shared_memory_address_);
10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFloatv cmd;
10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(true);
11102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
1112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
1113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              GetFramebufferAttachmentParameterivEXT(
1114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  GL_FRAMEBUFFER,
1115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  GL_COLOR_ATTACHMENT0,
1116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  result->GetData()));
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv cmd;
1120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
1121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
1122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE),
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) {
1133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
1134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .Times(0);
11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
11362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv::Result* result =
11372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          shared_memory_address_);
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
11402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv cmd;
1141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_DRAW_FRAMEBUFFER,
1142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
1143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_1) {
1152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
1153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .Times(0);
11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv::Result* result =
11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          shared_memory_address_);
11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv cmd;
1160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_READ_FRAMEBUFFER,
1161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
1162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) {
1171a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
1172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .Times(0);
11732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
11742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv::Result* result =
11752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          shared_memory_address_);
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
11782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv cmd;
1179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
1180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
1181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryId,
1183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           0);
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_1) {
1189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
1190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      .Times(0);
11912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
11922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv::Result* result =
11932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          shared_memory_address_);
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
11962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetFramebufferAttachmentParameteriv cmd;
1197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
1198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_COLOR_ATTACHMENT0,
1199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
1200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetIntegervValidArgs) {
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetIntegerv, 0>(true);
12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetIntegerv::Result Result;
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetIntegerv(GL_ACTIVE_TEXTURE, result->GetData()));
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv cmd;
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) {
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetIntegerv, 0>(false);
12272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv::Result* result =
12282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv cmd;
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_);
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) {
12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetIntegerv, 0>(false);
12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv::Result* result =
12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv cmd;
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0);
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1249010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) {
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetIntegerv, 0>(false);
12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv::Result* result =
12532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetIntegerv cmd;
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset);
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1261010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetProgramivValidArgs) {
12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetProgramiv, 0>(true);
12632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetProgramiv::Result Result;
12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramiv cmd;
1267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(client_program_id_,
1268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_DELETE_STATUS,
1269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DELETE_STATUS),
12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) {
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetProgramiv, 0>(false);
12802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramiv::Result* result =
12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetProgramiv::Result*>(shared_memory_address_);
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramiv cmd;
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_program_id_, GL_DELETE_STATUS, kInvalidSharedMemoryId, 0);
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1289010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_1) {
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetProgramiv, 0>(false);
12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramiv::Result* result =
12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetProgramiv::Result*>(shared_memory_address_);
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramiv cmd;
1296a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(client_program_id_,
1297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_DELETE_STATUS,
1298a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1304010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetProgramInfoLogValidArgs) {
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* kInfo = "hello";
1306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const uint32_t kBucketId = 123;
13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetProgramInfoLog, 0>(true);
13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramInfoLog cmd;
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_program_id_, kBucketId);
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(bucket != NULL);
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
1315a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(0,
1316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            memcmp(bucket->GetData(0, bucket->size()), kInfo, bucket->size()));
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1320010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) {
1321010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const uint32_t kBucketId = 123;
13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetProgramInfoLog cmd;
13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(kInvalidClientId, kBucketId);
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
13332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(true);
13342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetRenderbufferParameteriv::Result Result;
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(
1337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      *gl_,
1338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      GetRenderbufferParameterivEXT(
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, result->GetData()));
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv cmd;
1342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER,
1343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER_RED_SIZE,
1344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1345a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GL_RENDERBUFFER_RED_SIZE),
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) {
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
13552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
13562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv::Result* result =
13572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
13582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          shared_memory_address_);
13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
13602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv cmd;
1361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER,
1362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER_RED_SIZE,
1363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) {
13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv::Result* result =
13742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
13752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          shared_memory_address_);
13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
13772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv cmd;
13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(
13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, kInvalidSharedMemoryId, 0);
13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) {
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
13872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv::Result* result =
13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetRenderbufferParameteriv::Result*>(
13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          shared_memory_address_);
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetRenderbufferParameteriv cmd;
1392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER,
1393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_RENDERBUFFER_RED_SIZE,
1394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1400010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetShaderivValidArgs) {
14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetShaderiv, 0>(true);
14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetShaderiv::Result Result;
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
1408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
1409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              GetShaderiv(kServiceShaderId, GL_SHADER_TYPE, result->GetData()));
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
14112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetShaderiv cmd;
1412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(client_shader_id_,
1413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_SHADER_TYPE,
1414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_SHADER_TYPE),
14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) {
14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetShaderiv, 0>(false);
14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetShaderiv::Result* result =
14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetShaderiv cmd;
14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(client_shader_id_, GL_SHADER_TYPE, kInvalidSharedMemoryId, 0);
14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1434010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) {
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetShaderiv, 0>(false);
14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetShaderiv::Result* result =
14382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetShaderiv cmd;
1441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(client_shader_id_,
1442a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_SHADER_TYPE,
1443a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1444a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetShaderInfoLog
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetShaderPrecisionFormat
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetShaderSource
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetString
14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1454010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterfvValidArgs) {
14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
14592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameterfv, 0>(true);
14602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetTexParameterfv::Result Result;
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
1462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
1463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              GetTexParameterfv(
1464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
14662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv cmd;
1467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(
1473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER),
1474a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      result->GetNumResults());
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1478010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs0_0) {
14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv::Result* result =
14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv cmd;
1485a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP,
1486a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1487a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs1_0) {
14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
14972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv::Result* result =
14982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv cmd;
1501a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1502a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_GENERATE_MIPMAP,
1503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1510010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_0) {
15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
15132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv::Result* result =
15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv cmd;
15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_1) {
15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv::Result* result =
15262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameterfv cmd;
1529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1537010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterivValidArgs) {
15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetError())
15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(Return(GL_NO_ERROR))
15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameteriv, 0>(true);
15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetTexParameteriv::Result Result;
15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
1545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*gl_,
1546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              GetTexParameteriv(
1547a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                  GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv cmd;
1550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1551a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_EQ(
1556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER),
1557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      result->GetNumResults());
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1561010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs0_0) {
15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
15632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
15642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv::Result* result =
15652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv cmd;
1568a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP,
1569a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1571a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1577010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs1_0) {
15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
15792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
15802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv::Result* result =
15812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv cmd;
1584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_GENERATE_MIPMAP,
1586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1593010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_0) {
15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
15952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv::Result* result =
15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
15992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv cmd;
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) {
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
16082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv::Result* result =
16092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
16112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetTexParameteriv cmd;
1612a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(GL_TEXTURE_2D,
1613a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_TEXTURE_MAG_FILTER,
1614a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1615a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetUniformfv
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetUniformiv
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(gman): GetUniformLocation
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribfvValidArgs) {
16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribfv, 0>(true);
16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef cmds::GetVertexAttribfv::Result Result;
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
16302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetVertexAttribfv cmd;
1631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(1,
1632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
1633a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1634a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GL_VERTEX_ATTRIB_ARRAY_NORMALIZED),
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            result->GetNumResults());
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1642010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_0) {
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
16442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
16452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetVertexAttribfv::Result* result =
16462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetVertexAttribfv::Result*>(shared_memory_address_);
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
16482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetVertexAttribfv cmd;
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cmd.Init(1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, kInvalidSharedMemoryId, 0);
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1654010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_1) {
16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
16572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetVertexAttribfv::Result* result =
16582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<cmds::GetVertexAttribfv::Result*>(shared_memory_address_);
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  result->size = 0;
16602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::GetVertexAttribfv cmd;
1661a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(1,
1662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
1663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(0u, result->size);
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1669010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribivValidArgs) {
16704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribiv, 0>(true);
16714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef cmds::GetVertexAttribiv::Result Result;
16724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  Result* result = static_cast<Result*>(shared_memory_address_);
16734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result->size = 0;
16744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::GetVertexAttribiv cmd;
1675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(1,
1676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
1677a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_offset_);
16794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
16804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
16814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                GL_VERTEX_ATTRIB_ARRAY_NORMALIZED),
16824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            result->GetNumResults());
16834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
16844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
16854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1686010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_0) {
16874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_CALL(*gl_, GetVertexAttribiv(_, _, _)).Times(0);
16884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribiv, 0>(false);
16894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::GetVertexAttribiv::Result* result =
16904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      static_cast<cmds::GetVertexAttribiv::Result*>(shared_memory_address_);
16914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result->size = 0;
16924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::GetVertexAttribiv cmd;
16934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, kInvalidSharedMemoryId, 0);
16944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
16954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(0u, result->size);
16964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
16974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1698010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_1) {
16994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_CALL(*gl_, GetVertexAttribiv(_, _, _)).Times(0);
17004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::GetVertexAttribiv, 0>(false);
17014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::GetVertexAttribiv::Result* result =
17024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      static_cast<cmds::GetVertexAttribiv::Result*>(shared_memory_address_);
17034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  result->size = 0;
17044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::GetVertexAttribiv cmd;
1705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  cmd.Init(1,
1706a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
1707a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           shared_memory_id_,
1708a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           kInvalidSharedMemoryOffset);
17094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(0u, result->size);
17114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
17124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// TODO(gman): GetVertexAttribPointerv
17134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1714010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, HintValidArgs) {
17154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST));
17164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::Hint, 0>(true);
17174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::Hint cmd;
17184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_FASTEST);
17194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
17214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
17224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1723010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, HintInvalidArgs0_0) {
17244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_CALL(*gl_, Hint(_, _)).Times(0);
17254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::Hint, 0>(false);
17264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::Hint cmd;
17274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
17284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
17304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
17314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1732010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsBufferValidArgs) {
17334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::IsBuffer, 0>(true);
17344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::IsBuffer cmd;
17354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(client_buffer_id_, shared_memory_id_, shared_memory_offset_);
17364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
17384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
17394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1740010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsBufferInvalidArgsBadSharedMemoryId) {
17414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  SpecializedSetup<cmds::IsBuffer, 0>(false);
17424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmds::IsBuffer cmd;
17434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(client_buffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
17444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  cmd.Init(client_buffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
17464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
17488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1749010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsEnabledValidArgs) {
17508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsEnabled, 0>(true);
17518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsEnabled cmd;
17528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(GL_BLEND, shared_memory_id_, shared_memory_offset_);
17538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
17558bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
17568bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1757010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_0) {
17588bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_CALL(*gl_, IsEnabled(_)).Times(0);
17598bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsEnabled, 0>(false);
17608bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsEnabled cmd;
17618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(GL_CLIP_PLANE0, shared_memory_id_, shared_memory_offset_);
17628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
17648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
17658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1766010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_1) {
17678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_CALL(*gl_, IsEnabled(_)).Times(0);
17688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsEnabled, 0>(false);
17698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsEnabled cmd;
17708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(GL_POINT_SPRITE, shared_memory_id_, shared_memory_offset_);
17718bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
17738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
17748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1775010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgsBadSharedMemoryId) {
17768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsEnabled, 0>(false);
17778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsEnabled cmd;
17788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(GL_BLEND, kInvalidSharedMemoryId, shared_memory_offset_);
17798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(GL_BLEND, shared_memory_id_, kInvalidSharedMemoryOffset);
17818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
17838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1784010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsFramebufferValidArgs) {
17858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsFramebuffer, 0>(true);
17868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsFramebuffer cmd;
17878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(client_framebuffer_id_, shared_memory_id_, shared_memory_offset_);
17888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
17898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
17908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
17918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1792010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsFramebufferInvalidArgsBadSharedMemoryId) {
17938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsFramebuffer, 0>(false);
17948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsFramebuffer cmd;
17958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(
17968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      client_framebuffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
17978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
17988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(
17998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      client_framebuffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
18008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
18018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
18028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1803010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsProgramValidArgs) {
18048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsProgram, 0>(true);
18058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsProgram cmd;
18068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(client_program_id_, shared_memory_id_, shared_memory_offset_);
18078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
18088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
18098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
18108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1811010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest1, IsProgramInvalidArgsBadSharedMemoryId) {
18128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  SpecializedSetup<cmds::IsProgram, 0>(false);
18138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmds::IsProgram cmd;
18148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(client_program_id_, kInvalidSharedMemoryId, shared_memory_offset_);
18158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
18168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  cmd.Init(client_program_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
18178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
18188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
1819cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1820cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsRenderbufferValidArgs) {
1821cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsRenderbuffer, 0>(true);
1822cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsRenderbuffer cmd;
1823cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_renderbuffer_id_, shared_memory_id_, shared_memory_offset_);
1824cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1826cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1827cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1828cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsRenderbufferInvalidArgsBadSharedMemoryId) {
1829cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsRenderbuffer, 0>(false);
1830cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsRenderbuffer cmd;
1831cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(
1832cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      client_renderbuffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
1833cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1834cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(
1835cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      client_renderbuffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
1836cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1837cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1838cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1839cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsShaderValidArgs) {
1840cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsShader, 0>(true);
1841cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsShader cmd;
1842cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_shader_id_, shared_memory_id_, shared_memory_offset_);
1843cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1844cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1845cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1846cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1847cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsShaderInvalidArgsBadSharedMemoryId) {
1848cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsShader, 0>(false);
1849cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsShader cmd;
1850cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_shader_id_, kInvalidSharedMemoryId, shared_memory_offset_);
1851cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1852cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_shader_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
1853cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1854cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1855cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1856cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsTextureValidArgs) {
1857cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsTexture, 0>(true);
1858cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsTexture cmd;
1859cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
1860cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1861cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1862cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1863cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1864cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, IsTextureInvalidArgsBadSharedMemoryId) {
1865cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::IsTexture, 0>(false);
1866cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::IsTexture cmd;
1867cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_texture_id_, kInvalidSharedMemoryId, shared_memory_offset_);
1868cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1869cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_texture_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
1870cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
1871cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1872cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1873cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, LineWidthValidArgs) {
1874cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_CALL(*gl_, LineWidth(0.5f));
1875cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::LineWidth, 0>(true);
1876cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::LineWidth cmd;
1877cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(0.5f);
1878cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1879cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1880cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1881cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1882cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, LineWidthInvalidValue0_0) {
1883cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::LineWidth, 0>(false);
1884cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::LineWidth cmd;
1885cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(0.0f);
1886cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1887cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1888cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1889cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
18906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_P(GLES2DecoderTest1, LineWidthNaNValue0) {
18916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SpecializedSetup<cmds::LineWidth, 0>(false);
18926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  cmds::LineWidth cmd;
18936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  cmd.Init(nanf(""));
18946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
18956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
18966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
18976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1898cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, LinkProgramValidArgs) {
1899cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId));
1900cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::LinkProgram, 0>(true);
1901cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::LinkProgram cmd;
1902cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(client_program_id_);
1903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1904cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TODO(gman): PixelStorei
1907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_P(GLES2DecoderTest1, PolygonOffsetValidArgs) {
1909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_CALL(*gl_, PolygonOffset(1, 2));
1910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SpecializedSetup<cmds::PolygonOffset, 0>(true);
1911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmds::PolygonOffset cmd;
1912cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  cmd.Init(1, 2);
1913cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1915cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1916cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// TODO(gman): ReadPixels
1917cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1918f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(gman): ReleaseShaderCompiler
1919f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1920f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(GLES2DecoderTest1, RenderbufferStorageValidArgs) {
1921f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SpecializedSetup<cmds::RenderbufferStorage, 0>(true);
1922f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmds::RenderbufferStorage cmd;
1923f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
1924f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1925f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1926f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1927f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1928f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs0_0) {
1929f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
1930f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
1931f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmds::RenderbufferStorage cmd;
1932f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmd.Init(GL_FRAMEBUFFER, GL_RGBA4, 3, 4);
1933f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1934f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1935f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1936f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1937f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs2_0) {
1938f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
1939f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
1940f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmds::RenderbufferStorage cmd;
1941f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, GL_RGBA4, -1, 4);
1942f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1943f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1944f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1945f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1946f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs3_0) {
1947f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
1948f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
1949f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmds::RenderbufferStorage cmd;
1950f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, -1);
1951f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1952f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
1953f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1954f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1955f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_P(GLES2DecoderTest1, SampleCoverageValidArgs) {
1956f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_CALL(*gl_, SampleCoverage(1, true));
1957f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SpecializedSetup<cmds::SampleCoverage, 0>(true);
1958f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmds::SampleCoverage cmd;
1959f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  cmd.Init(1, true);
1960f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1961f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  EXPECT_EQ(GL_NO_ERROR, GetGLError());
1962f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
1964