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