15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_format.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/gles2_cmd_utils.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/cmd_buffer_engine.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/context_group.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/program_manager.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "gpu/command_buffer/service/test_helper.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gl/gl_mock.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::gfx::MockGLInterface;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using ::testing::AnyNumber;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::DoAll;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::InSequence;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::MatcherCast;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Pointee;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArrayArgument;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::SetArgumentPointee;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::StrEq;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2DecoderTest2 : public GLES2DecoderTestBase {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GLES2DecoderTest2() { }
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void TestAcceptedUniform(GLenum uniform_type, uint32 accepts_apis) {
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    SetupShaderForUniform(uniform_type);
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    bool valid_uniform = false;
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform1i(1, _)).Times(AnyNumber());
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform1iv(1, _, _)).Times(AnyNumber());
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform2iv(1, _, _)).Times(AnyNumber());
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform3iv(1, _, _)).Times(AnyNumber());
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform4iv(1, _, _)).Times(AnyNumber());
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform1f(1, _)).Times(AnyNumber());
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform1fv(1, _, _)).Times(AnyNumber());
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform2fv(1, _, _)).Times(AnyNumber());
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform3fv(1, _, _)).Times(AnyNumber());
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, Uniform4fv(1, _, _)).Times(AnyNumber());
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, UniformMatrix2fv(1, _, _, _)).Times(AnyNumber());
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, UniformMatrix3fv(1, _, _, _)).Times(AnyNumber());
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*gl_, UniformMatrix4fv(1, _, _, _)).Times(AnyNumber());
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform1i;
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform1i cmd;
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2);
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform1i;
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform1ivImmediate& cmd =
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform1ivImmediate>();
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLint data[2][1] = {{0}};
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform2i;
76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform2i cmd;
77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3);
78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform2i;
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform2ivImmediate& cmd =
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform2ivImmediate>();
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLint data[2][2] = {{0}};
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform3i;
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform3i cmd;
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3, 4);
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform3i;
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform3ivImmediate& cmd =
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform3ivImmediate>();
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLint data[2][3] = {{0}};
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform4i;
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform4i cmd;
117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3, 4, 5);
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform4i;
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform4ivImmediate& cmd =
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform4ivImmediate>();
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLint data[2][4] = {{0}};
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
133a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
134a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ////////////////////
135a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform1f;
138a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform1f cmd;
139a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2);
140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
141a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
142a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
143a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
144a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform1f;
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform1fvImmediate& cmd =
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform1fvImmediate>();
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][1] = {{0.0f}};
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform2f;
158a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform2f cmd;
159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3);
160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
161a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
164a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
165a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
166a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform2f;
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform2fvImmediate& cmd =
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform2fvImmediate>();
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][2] = {{0.0f}};
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
172a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
173a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform3f;
178a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform3f cmd;
179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3, 4);
180a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
181a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
183a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
184a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
185a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
186a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform3f;
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform3fvImmediate& cmd =
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform3fvImmediate>();
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][3] = {{0.0f}};
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
195a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
196a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform4f;
198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmds::Uniform4f cmd;
199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      cmd.Init(1, 2, 3, 4, 5);
200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
204a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniform4f;
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::Uniform4fvImmediate& cmd =
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::Uniform4fvImmediate>();
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][4] = {{0.0f}};
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
213a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniformMatrix2f;
218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::UniformMatrix2fvImmediate& cmd =
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][2 * 2] = {{0.0f}};
221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniformMatrix3f;
230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::UniformMatrix3fvImmediate& cmd =
231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][3 * 3] = {{0.0f}};
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    {
240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      valid_uniform = accepts_apis & Program::kUniformMatrix4f;
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmds::UniformMatrix4fvImmediate& cmd =
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          *GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      GLfloat data[2][4 * 4] = {{0.0f}};
244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      cmd.Init(1, 2, &data[0][0]);
245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                GetGLError());
248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest2, ::testing::Bool());
253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXTImmediate, 0>(
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!valid) {
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to make it again
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // will fail.
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    cmds::GenQueriesEXTImmediate& cmd =
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        *GetImmediateAs<cmds::GenQueriesEXTImmediate>();
262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    cmd.Init(1, &client_query_id_);
263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(error::kNoError,
264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              ExecuteImmediateCmd(cmd, sizeof(client_query_id_)));
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXTImmediate, 0>(
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool valid) {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (valid) {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make the client_query_id_ so that trying to delete it will succeed.
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    cmds::GenQueriesEXTImmediate& cmd =
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        *GetImmediateAs<cmds::GenQueriesEXTImmediate>();
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    cmd.Init(1, &client_query_id_);
276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    EXPECT_EQ(error::kNoError,
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              ExecuteImmediateCmd(cmd, sizeof(client_query_id_)));
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::LinkProgram, 0>(
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kClientVertexShaderId = 5001;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kServiceVertexShaderId = 6001;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kClientFragmentShaderId = 5002;
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GLuint kServiceFragmentShaderId = 6002;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoCreateShader(
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_VERTEX_SHADER, kClientVertexShaderId, kServiceVertexShaderId);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoCreateShader(
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GL_FRAGMENT_SHADER, kClientFragmentShaderId, kServiceFragmentShaderId);
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestHelper::SetShaderStates(
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gl_.get(), GetShader(kClientVertexShaderId), true);
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestHelper::SetShaderStates(
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gl_.get(), GetShader(kClientFragmentShaderId), true);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InSequence dummy;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AttachShader(kServiceProgramId, kServiceVertexShaderId))
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              AttachShader(kServiceProgramId, kServiceFragmentShaderId))
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(1));
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _))
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0))
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTES, _))
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *gl_,
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, _))
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORMS, _))
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *gl_,
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_ACTIVE_UNIFORM_MAX_LENGTH, _))
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0));
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::AttachShader attach_cmd;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  attach_cmd.Init(client_program_id_, kClientVertexShaderId);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd));
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  attach_cmd.Init(client_program_id_, kClientFragmentShaderId);
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(attach_cmd));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid GLES2DecoderTestBase::SpecializedSetup<cmds::UseProgram, 0>(
336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    bool /* valid */) {
337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Needs the same setup as LinkProgram.
338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SpecializedSetup<cmds::LinkProgram, 0>(false);
339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      .Times(1)
342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      .RetiresOnSaturation();
343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  cmds::LinkProgram link_cmd;
345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  link_cmd.Init(client_program_id_);
346effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
347effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
348effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
349effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochtemplate <>
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>(
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Needs the same setup as LinkProgram.
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SpecializedSetup<cmds::LinkProgram, 0>(false);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .Times(1)
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cmds::LinkProgram link_cmd;
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  link_cmd.Init(client_program_id_);
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*gl_,
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _))
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .WillOnce(SetArgumentPointee<2>(0))
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      .RetiresOnSaturation();
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1f, 0>(
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fvImmediate, 0>(
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1ivImmediate, 0>(
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT);
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2f, 0>(
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC2);
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2i, 0>(
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC2);
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fvImmediate, 0>(
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC2);
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2ivImmediate, 0>(
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC2);
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3f, 0>(
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC3);
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3i, 0>(
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC3);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fvImmediate, 0>(
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC3);
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3ivImmediate, 0>(
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC3);
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4f, 0>(
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC4);
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4i, 0>(
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool /* valid */) {
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC4);
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fvImmediate, 0>(
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_VEC4);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4ivImmediate, 0>(
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_INT_VEC4);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>(
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT2);
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT3);
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetupShaderForUniform(GL_FLOAT_MAT4);
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterf, 0>(
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteri, 0>(
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfvImmediate, 0>(
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <>
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterivImmediate, 0>(
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool /* valid */) {
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h"
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
503010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT) {
504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_INT, Program::kUniform1i);
505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
507010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC2) {
508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_INT_VEC2, Program::kUniform2i);
509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
511010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC3) {
512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_INT_VEC3, Program::kUniform3i);
513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
515010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC4) {
516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_INT_VEC4, Program::kUniform4i);
517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL) {
520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_BOOL, Program::kUniform1i | Program::kUniform1f);
521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
523010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC2) {
524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_BOOL_VEC2, Program::kUniform2i | Program::kUniform2f);
525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC3) {
528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_BOOL_VEC3, Program::kUniform3i | Program::kUniform3f);
529a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC4) {
532a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_BOOL_VEC4, Program::kUniform4i | Program::kUniform4f);
533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
535010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniformTypeFLOAT) {
536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT, Program::kUniform1f);
537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
538a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
539010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC2) {
540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_VEC2, Program::kUniform2f);
541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
542a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
543010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC3) {
544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_VEC3, Program::kUniform3f);
545a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
547010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC4) {
548a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_VEC4, Program::kUniform4f);
549a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
550a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
551010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2) {
552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_MAT2, Program::kUniformMatrix2f);
553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
555010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3) {
556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_MAT3, Program::kUniformMatrix3f);
557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4) {
560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestAcceptedUniform(GL_FLOAT_MAT4, Program::kUniformMatrix4f);
561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gpu
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
566