// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file is auto-generated from // gpu/command_buffer/build_gles2_cmd_buffer.py // It's formatted by clang-format using chromium coding style: // clang-format -i -style=chromium filename // DO NOT EDIT! // It is included by gles2_cmd_decoder_unittest_1.cc #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ // TODO(gman): ActiveTexture TEST_P(GLES2DecoderTest1, AttachShaderValidArgs) { EXPECT_CALL(*gl_, AttachShader(kServiceProgramId, kServiceShaderId)); SpecializedSetup(true); cmds::AttachShader cmd; cmd.Init(client_program_id_, client_shader_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): BindAttribLocationBucket TEST_P(GLES2DecoderTest1, BindBufferValidArgs) { EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceBufferId)); SpecializedSetup(true); cmds::BindBuffer cmd; cmd.Init(GL_ARRAY_BUFFER, client_buffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BindBufferValidArgsNewId) { EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kNewServiceId)); EXPECT_CALL(*gl_, GenBuffersARB(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindBuffer cmd; cmd.Init(GL_ARRAY_BUFFER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, BindBufferInvalidArgs0_0) { EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0); SpecializedSetup(false); cmds::BindBuffer cmd; cmd.Init(GL_RENDERBUFFER, client_buffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindBufferBaseValidArgs) { EXPECT_CALL( *gl_, BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kServiceBufferId)); SpecializedSetup(true); cmds::BindBufferBase cmd; cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, client_buffer_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BindBufferBaseValidArgsNewId) { EXPECT_CALL(*gl_, BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewServiceId)); EXPECT_CALL(*gl_, GenBuffersARB(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindBufferBase cmd; cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BindBufferRangeValidArgs) { EXPECT_CALL(*gl_, BindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kServiceBufferId, 4, 4)); SpecializedSetup(true); cmds::BindBufferRange cmd; cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, client_buffer_id_, 4, 4); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BindBufferRangeValidArgsNewId) { EXPECT_CALL(*gl_, BindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewServiceId, 4, 4)); EXPECT_CALL(*gl_, GenBuffersARB(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindBufferRange cmd; cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId, 4, 4); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BindFramebufferValidArgs) { EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId)); SpecializedSetup(true); cmds::BindFramebuffer cmd; cmd.Init(GL_FRAMEBUFFER, client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BindFramebufferValidArgsNewId) { EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kNewServiceId)); EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindFramebuffer cmd; cmd.Init(GL_FRAMEBUFFER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) { EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0); SpecializedSetup(false); cmds::BindFramebuffer cmd; cmd.Init(GL_DRAW_FRAMEBUFFER, client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) { EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0); SpecializedSetup(false); cmds::BindFramebuffer cmd; cmd.Init(GL_READ_FRAMEBUFFER, client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgs) { EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kServiceRenderbufferId)); SpecializedSetup(true); cmds::BindRenderbuffer cmd; cmd.Init(GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) { EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kNewServiceId)); EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindRenderbuffer cmd; cmd.Init(GL_RENDERBUFFER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) { EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0); SpecializedSetup(false); cmds::BindRenderbuffer cmd; cmd.Init(GL_FRAMEBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindSamplerValidArgs) { EXPECT_CALL(*gl_, BindSampler(1, kServiceSamplerId)); SpecializedSetup(true); cmds::BindSampler cmd; cmd.Init(1, client_sampler_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BindTextureValidArgs) { EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId)); SpecializedSetup(true); cmds::BindTexture cmd; cmd.Init(GL_TEXTURE_2D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BindTextureValidArgsNewId) { EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId)); EXPECT_CALL(*gl_, GenTextures(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); SpecializedSetup(true); cmds::BindTexture cmd; cmd.Init(GL_TEXTURE_2D, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetTexture(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_0) { EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0); SpecializedSetup(false); cmds::BindTexture cmd; cmd.Init(GL_TEXTURE_1D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_1) { EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0); SpecializedSetup(false); cmds::BindTexture cmd; cmd.Init(GL_TEXTURE_3D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BindTransformFeedbackValidArgs) { EXPECT_CALL(*gl_, BindTransformFeedback(GL_TRANSFORM_FEEDBACK, kServiceTransformFeedbackId)); SpecializedSetup(true); cmds::BindTransformFeedback cmd; cmd.Init(GL_TRANSFORM_FEEDBACK, client_transformfeedback_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, BlendColorValidArgs) { EXPECT_CALL(*gl_, BlendColor(1, 2, 3, 4)); SpecializedSetup(true); cmds::BlendColor cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationValidArgs) { EXPECT_CALL(*gl_, BlendEquation(GL_FUNC_SUBTRACT)); SpecializedSetup(true); cmds::BlendEquation cmd; cmd.Init(GL_FUNC_SUBTRACT); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) { EXPECT_CALL(*gl_, BlendEquation(_)).Times(0); SpecializedSetup(false); cmds::BlendEquation cmd; cmd.Init(GL_MIN); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) { EXPECT_CALL(*gl_, BlendEquation(_)).Times(0); SpecializedSetup(false); cmds::BlendEquation cmd; cmd.Init(GL_MAX); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationSeparateValidArgs) { EXPECT_CALL(*gl_, BlendEquationSeparate(GL_FUNC_SUBTRACT, GL_FUNC_ADD)); SpecializedSetup(true); cmds::BlendEquationSeparate cmd; cmd.Init(GL_FUNC_SUBTRACT, GL_FUNC_ADD); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) { EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0); SpecializedSetup(false); cmds::BlendEquationSeparate cmd; cmd.Init(GL_MIN, GL_FUNC_ADD); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) { EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0); SpecializedSetup(false); cmds::BlendEquationSeparate cmd; cmd.Init(GL_MAX, GL_FUNC_ADD); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) { EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0); SpecializedSetup(false); cmds::BlendEquationSeparate cmd; cmd.Init(GL_FUNC_SUBTRACT, GL_MIN); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) { EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0); SpecializedSetup(false); cmds::BlendEquationSeparate cmd; cmd.Init(GL_FUNC_SUBTRACT, GL_MAX); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendFuncValidArgs) { EXPECT_CALL(*gl_, BlendFunc(GL_ZERO, GL_ZERO)); SpecializedSetup(true); cmds::BlendFunc cmd; cmd.Init(GL_ZERO, GL_ZERO); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, BlendFuncSeparateValidArgs) { EXPECT_CALL(*gl_, BlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO)); SpecializedSetup(true); cmds::BlendFuncSeparate cmd; cmd.Init(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): BufferData // TODO(gman): BufferSubData TEST_P(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) { EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)); SpecializedSetup(true); cmds::CheckFramebufferStatus cmd; cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) { EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0); SpecializedSetup(false); cmds::CheckFramebufferStatus cmd; cmd.Init(GL_DRAW_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) { EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0); SpecializedSetup(false); cmds::CheckFramebufferStatus cmd; cmd.Init(GL_READ_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) { EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)).Times(0); SpecializedSetup(false); cmds::CheckFramebufferStatus cmd; cmd.Init(GL_FRAMEBUFFER, kInvalidSharedMemoryId, shared_memory_offset_); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, ClearValidArgs) { EXPECT_CALL(*gl_, Clear(1)); SpecializedSetup(true); cmds::Clear cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, ClearBufferfiValidArgs) { EXPECT_CALL(*gl_, ClearBufferfi(GL_COLOR, 2, 3, 4)); SpecializedSetup(true); cmds::ClearBufferfi cmd; cmd.Init(GL_COLOR, 2, 3, 4); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, ClearBufferfvImmediateValidArgs) { cmds::ClearBufferfvImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); GLfloat temp[4] = { 0, }; cmd.Init(GL_COLOR, 2, &temp[0]); EXPECT_CALL(*gl_, ClearBufferfv(GL_COLOR, 2, reinterpret_cast( ImmediateDataAddress(&cmd)))); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, ClearBufferivImmediateValidArgs) { cmds::ClearBufferivImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); GLint temp[4] = { 0, }; cmd.Init(GL_COLOR, 2, &temp[0]); EXPECT_CALL(*gl_, ClearBufferiv( GL_COLOR, 2, reinterpret_cast(ImmediateDataAddress(&cmd)))); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, ClearBufferuivImmediateValidArgs) { cmds::ClearBufferuivImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); GLuint temp[4] = { 0, }; cmd.Init(GL_COLOR, 2, &temp[0]); EXPECT_CALL(*gl_, ClearBufferuiv( GL_COLOR, 2, reinterpret_cast(ImmediateDataAddress(&cmd)))); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, ClearColorValidArgs) { EXPECT_CALL(*gl_, ClearColor(1, 2, 3, 4)); SpecializedSetup(true); cmds::ClearColor cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, ClearDepthfValidArgs) { EXPECT_CALL(*gl_, ClearDepth(0.5f)); SpecializedSetup(true); cmds::ClearDepthf cmd; cmd.Init(0.5f); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, ClearStencilValidArgs) { EXPECT_CALL(*gl_, ClearStencil(1)); SpecializedSetup(true); cmds::ClearStencil cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): ClientWaitSync TEST_P(GLES2DecoderTest1, ColorMaskValidArgs) { SpecializedSetup(true); cmds::ColorMask cmd; cmd.Init(true, true, true, true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): CompileShader // TODO(gman): CompressedTexImage2DBucket // TODO(gman): CompressedTexImage2D // TODO(gman): CompressedTexSubImage2DBucket // TODO(gman): CompressedTexSubImage2D TEST_P(GLES2DecoderTest1, CopyBufferSubDataValidArgs) { EXPECT_CALL(*gl_, CopyBufferSubData(GL_ARRAY_BUFFER, GL_ARRAY_BUFFER, 3, 4, 5)); SpecializedSetup(true); cmds::CopyBufferSubData cmd; cmd.Init(GL_ARRAY_BUFFER, GL_ARRAY_BUFFER, 3, 4, 5); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } // TODO(gman): CopyTexImage2D TEST_P(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) { EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8)); SpecializedSetup(true); cmds::CopyTexSubImage2D cmd; cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) { EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::CopyTexSubImage2D cmd; cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP, 2, 3, 4, 5, 6, 7, 8); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) { EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::CopyTexSubImage2D cmd; cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, -1, 8); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); } TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) { EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::CopyTexSubImage2D cmd; cmd.Init(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, -1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); } TEST_P(GLES2DecoderTest1, CopyTexSubImage3DValidArgs) { EXPECT_CALL(*gl_, CopyTexSubImage3D(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9)); SpecializedSetup(true); cmds::CopyTexSubImage3D cmd; cmd.Init(GL_TEXTURE_3D, 2, 3, 4, 5, 6, 7, 8, 9); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, CreateProgramValidArgs) { EXPECT_CALL(*gl_, CreateProgram()).WillOnce(Return(kNewServiceId)); SpecializedSetup(true); cmds::CreateProgram cmd; cmd.Init(kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetProgram(kNewClientId)); } TEST_P(GLES2DecoderTest1, CreateShaderValidArgs) { EXPECT_CALL(*gl_, CreateShader(GL_VERTEX_SHADER)) .WillOnce(Return(kNewServiceId)); SpecializedSetup(true); cmds::CreateShader cmd; cmd.Init(GL_VERTEX_SHADER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetShader(kNewClientId)); } TEST_P(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) { EXPECT_CALL(*gl_, CreateShader(_)).Times(0); SpecializedSetup(false); cmds::CreateShader cmd; cmd.Init(GL_GEOMETRY_SHADER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, CullFaceValidArgs) { EXPECT_CALL(*gl_, CullFace(GL_FRONT)); SpecializedSetup(true); cmds::CullFace cmd; cmd.Init(GL_FRONT); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(kServiceBufferId))).Times(1); cmds::DeleteBuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_buffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_buffer_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetBuffer(client_buffer_id_) == NULL); } TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateInvalidArgs) { cmds::DeleteBuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId))) .Times(1); cmds::DeleteFramebuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_framebuffer_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetFramebuffer(client_framebuffer_id_) == NULL); } TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateInvalidArgs) { cmds::DeleteFramebuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DeleteProgramValidArgs) { EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)); SpecializedSetup(true); cmds::DeleteProgram cmd; cmd.Init(client_program_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId))) .Times(1); cmds::DeleteRenderbuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_renderbuffer_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetRenderbuffer(client_renderbuffer_id_) == NULL); } TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateInvalidArgs) { cmds::DeleteRenderbuffersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DeleteSamplersImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteSamplers(1, Pointee(kServiceSamplerId))).Times(1); cmds::DeleteSamplersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_sampler_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_sampler_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_FALSE(GetSamplerServiceId(client_sampler_id_, NULL)); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(client_sampler_id_))); } TEST_P(GLES2DecoderTest1, DeleteSamplersImmediateInvalidArgs) { cmds::DeleteSamplersImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DeleteSyncValidArgs) { EXPECT_CALL(*gl_, DeleteSync(reinterpret_cast(kServiceSyncId))); SpecializedSetup(true); cmds::DeleteSync cmd; cmd.Init(client_sync_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, DeleteShaderValidArgs) { EXPECT_CALL(*gl_, DeleteShader(kServiceShaderId)); SpecializedSetup(true); cmds::DeleteShader cmd; cmd.Init(client_shader_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(kServiceTextureId))).Times(1); cmds::DeleteTexturesImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_texture_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetTexture(client_texture_id_) == NULL); } TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateInvalidArgs) { cmds::DeleteTexturesImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DeleteTransformFeedbacksImmediateValidArgs) { EXPECT_CALL(*gl_, DeleteTransformFeedbacks( 1, Pointee(kServiceTransformFeedbackId))).Times(1); cmds::DeleteTransformFeedbacksImmediate& cmd = *GetImmediateAs(); SpecializedSetup(true); cmd.Init(1, &client_transformfeedback_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_transformfeedback_id_))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_FALSE( GetTransformFeedbackServiceId(client_transformfeedback_id_, NULL)); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(client_transformfeedback_id_))); } TEST_P(GLES2DecoderTest1, DeleteTransformFeedbacksImmediateInvalidArgs) { cmds::DeleteTransformFeedbacksImmediate& cmd = *GetImmediateAs(); SpecializedSetup(false); GLuint temp = kInvalidClientId; cmd.Init(1, &temp); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, DepthFuncValidArgs) { EXPECT_CALL(*gl_, DepthFunc(GL_NEVER)); SpecializedSetup(true); cmds::DepthFunc cmd; cmd.Init(GL_NEVER); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DepthMaskValidArgs) { SpecializedSetup(true); cmds::DepthMask cmd; cmd.Init(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DepthRangefValidArgs) { EXPECT_CALL(*gl_, DepthRange(1, 2)); SpecializedSetup(true); cmds::DepthRangef cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DetachShaderValidArgs) { EXPECT_CALL(*gl_, DetachShader(kServiceProgramId, kServiceShaderId)); SpecializedSetup(true); cmds::DetachShader cmd; cmd.Init(client_program_id_, client_shader_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DisableValidArgs) { SetupExpectationsForEnableDisable(GL_BLEND, false); SpecializedSetup(true); cmds::Disable cmd; cmd.Init(GL_BLEND); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_0) { EXPECT_CALL(*gl_, Disable(_)).Times(0); SpecializedSetup(false); cmds::Disable cmd; cmd.Init(GL_CLIP_PLANE0); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_1) { EXPECT_CALL(*gl_, Disable(_)).Times(0); SpecializedSetup(false); cmds::Disable cmd; cmd.Init(GL_POINT_SPRITE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) { EXPECT_CALL(*gl_, DisableVertexAttribArray(1)); SpecializedSetup(true); cmds::DisableVertexAttribArray cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): DrawArrays // TODO(gman): DrawElements TEST_P(GLES2DecoderTest1, EnableValidArgs) { SetupExpectationsForEnableDisable(GL_BLEND, true); SpecializedSetup(true); cmds::Enable cmd; cmd.Init(GL_BLEND); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_0) { EXPECT_CALL(*gl_, Enable(_)).Times(0); SpecializedSetup(false); cmds::Enable cmd; cmd.Init(GL_CLIP_PLANE0); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_1) { EXPECT_CALL(*gl_, Enable(_)).Times(0); SpecializedSetup(false); cmds::Enable cmd; cmd.Init(GL_POINT_SPRITE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) { EXPECT_CALL(*gl_, EnableVertexAttribArray(1)); SpecializedSetup(true); cmds::EnableVertexAttribArray cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, FenceSyncValidArgs) { const GLsync kNewServiceIdGLuint = reinterpret_cast(kNewServiceId); EXPECT_CALL(*gl_, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0)) .WillOnce(Return(kNewServiceIdGLuint)); SpecializedSetup(true); cmds::FenceSync cmd; cmd.Init(kNewClientId); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); GLsync service_id = 0; EXPECT_TRUE(GetSyncServiceId(kNewClientId, &service_id)); EXPECT_EQ(kNewServiceIdGLuint, service_id); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, FinishValidArgs) { EXPECT_CALL(*gl_, Finish()); SpecializedSetup(true); cmds::Finish cmd; cmd.Init(); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, FlushValidArgs) { EXPECT_CALL(*gl_, Flush()); SpecializedSetup(true); cmds::Flush cmd; cmd.Init(); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) { EXPECT_CALL(*gl_, FramebufferRenderbufferEXT( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, kServiceRenderbufferId)); SpecializedSetup(true); cmds::FramebufferRenderbuffer cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) { EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferRenderbuffer cmd; cmd.Init(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_1) { EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferRenderbuffer cmd; cmd.Init(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) { EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferRenderbuffer cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferTexture2DValidArgs) { EXPECT_CALL(*gl_, FramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, kServiceTextureId, 0)); SpecializedSetup(true); cmds::FramebufferTexture2D cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) { EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferTexture2D cmd; cmd.Init(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_1) { EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferTexture2D cmd; cmd.Init(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) { EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0); SpecializedSetup(false); cmds::FramebufferTexture2D cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_PROXY_TEXTURE_CUBE_MAP, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, FramebufferTextureLayerValidArgs) { EXPECT_CALL(*gl_, FramebufferTextureLayer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, kServiceTextureId, 4, 5)); SpecializedSetup(true); cmds::FramebufferTextureLayer cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_, 4, 5); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, FrontFaceValidArgs) { EXPECT_CALL(*gl_, FrontFace(GL_CW)); SpecializedSetup(true); cmds::FrontFace cmd; cmd.Init(GL_CW); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GenBuffersImmediateValidArgs) { EXPECT_CALL(*gl_, GenBuffersARB(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenBuffersImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetBuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0); cmds::GenBuffersImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_buffer_id_); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_buffer_id_))); } TEST_P(GLES2DecoderTest1, GenerateMipmapValidArgs) { EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D)); SpecializedSetup(true); cmds::GenerateMipmap cmd; cmd.Init(GL_TEXTURE_2D); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) { EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0); SpecializedSetup(false); cmds::GenerateMipmap cmd; cmd.Init(GL_TEXTURE_1D); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) { EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0); SpecializedSetup(false); cmds::GenerateMipmap cmd; cmd.Init(GL_TEXTURE_3D); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) { EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenFramebuffersImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0); cmds::GenFramebuffersImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_framebuffer_id_); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_framebuffer_id_))); } TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) { EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenRenderbuffersImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0); cmds::GenRenderbuffersImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_renderbuffer_id_); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_renderbuffer_id_))); } TEST_P(GLES2DecoderTest1, GenSamplersImmediateValidArgs) { EXPECT_CALL(*gl_, GenSamplers(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenSamplersImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); decoder_->set_unsafe_es3_apis_enabled(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); GLuint service_id; EXPECT_TRUE(GetSamplerServiceId(kNewClientId, &service_id)); EXPECT_EQ(kNewServiceId, service_id); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(*cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, GenSamplersImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenSamplers(_, _)).Times(0); cmds::GenSamplersImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_sampler_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_sampler_id_))); decoder_->set_unsafe_es3_apis_enabled(false); } TEST_P(GLES2DecoderTest1, GenTexturesImmediateValidArgs) { EXPECT_CALL(*gl_, GenTextures(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenTexturesImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_TRUE(GetTexture(kNewClientId) != NULL); } TEST_P(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0); cmds::GenTexturesImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_texture_id_); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_texture_id_))); } TEST_P(GLES2DecoderTest1, GenTransformFeedbacksImmediateValidArgs) { EXPECT_CALL(*gl_, GenTransformFeedbacks(1, _)) .WillOnce(SetArgumentPointee<1>(kNewServiceId)); cmds::GenTransformFeedbacksImmediate* cmd = GetImmediateAs(); GLuint temp = kNewClientId; SpecializedSetup(true); decoder_->set_unsafe_es3_apis_enabled(true); cmd->Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp))); EXPECT_EQ(GL_NO_ERROR, GetGLError()); GLuint service_id; EXPECT_TRUE(GetTransformFeedbackServiceId(kNewClientId, &service_id)); EXPECT_EQ(kNewServiceId, service_id); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteImmediateCmd(*cmd, sizeof(temp))); } TEST_P(GLES2DecoderTest1, GenTransformFeedbacksImmediateInvalidArgs) { EXPECT_CALL(*gl_, GenTransformFeedbacks(_, _)).Times(0); cmds::GenTransformFeedbacksImmediate* cmd = GetImmediateAs(); SpecializedSetup(false); cmd->Init(1, &client_transformfeedback_id_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(&client_transformfeedback_id_))); decoder_->set_unsafe_es3_apis_enabled(false); } // TODO(gman): GetActiveAttrib // TODO(gman): GetActiveUniform // TODO(gman): GetActiveUniformBlockiv // TODO(gman): GetActiveUniformBlockName // TODO(gman): GetActiveUniformsiv // TODO(gman): GetAttachedShaders // TODO(gman): GetAttribLocation TEST_P(GLES2DecoderTest1, GetBooleanvValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetBooleanv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetBooleanv(GL_ACTIVE_TEXTURE, result->GetData())); result->size = 0; cmds::GetBooleanv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) { EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0); SpecializedSetup(false); cmds::GetBooleanv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBooleanv cmd; cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) { EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0); SpecializedSetup(false); cmds::GetBooleanv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBooleanv cmd; cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) { EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0); SpecializedSetup(false); cmds::GetBooleanv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBooleanv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetBufferParameterivValidArgs) { SpecializedSetup(true); typedef cmds::GetBufferParameteriv::Result Result; Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBufferParameteriv cmd; cmd.Init(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_BUFFER_SIZE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) { EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetBufferParameteriv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBufferParameteriv cmd; cmd.Init(GL_RENDERBUFFER, GL_BUFFER_SIZE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs1_0) { EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetBufferParameteriv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBufferParameteriv cmd; cmd.Init(GL_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) { EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetBufferParameteriv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBufferParameteriv cmd; cmd.Init(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_1) { EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetBufferParameteriv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetBufferParameteriv cmd; cmd.Init(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetErrorValidArgs) { EXPECT_CALL(*gl_, GetError()); SpecializedSetup(true); cmds::GetError cmd; cmd.Init(shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) { EXPECT_CALL(*gl_, GetError()).Times(0); SpecializedSetup(false); cmds::GetError cmd; cmd.Init(kInvalidSharedMemoryId, shared_memory_offset_); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); cmd.Init(shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, GetFloatvValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetFloatv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetFloatv(GL_ACTIVE_TEXTURE, result->GetData())); result->size = 0; cmds::GetFloatv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) { EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0); SpecializedSetup(false); cmds::GetFloatv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetFloatv cmd; cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) { EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0); SpecializedSetup(false); cmds::GetFloatv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetFloatv cmd; cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) { EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0); SpecializedSetup(false); cmds::GetFloatv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetFloatv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } // TODO(gman): GetFragDataLocation TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetFramebufferAttachmentParameteriv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, result->GetData())); result->size = 0; cmds::GetFramebufferAttachmentParameteriv cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) { EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)) .Times(0); SpecializedSetup(false); cmds::GetFramebufferAttachmentParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetFramebufferAttachmentParameteriv cmd; cmd.Init(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_1) { EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)) .Times(0); SpecializedSetup(false); cmds::GetFramebufferAttachmentParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetFramebufferAttachmentParameteriv cmd; cmd.Init(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) { EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)) .Times(0); SpecializedSetup(false); cmds::GetFramebufferAttachmentParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetFramebufferAttachmentParameteriv cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_1) { EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)) .Times(0); SpecializedSetup(false); cmds::GetFramebufferAttachmentParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetFramebufferAttachmentParameteriv cmd; cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetInteger64vValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetInteger64v::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetInteger64v(GL_ACTIVE_TEXTURE, result->GetData())); result->size = 0; cmds::GetInteger64v cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, GetIntegervValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetIntegerv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetIntegerv(GL_ACTIVE_TEXTURE, result->GetData())); result->size = 0; cmds::GetIntegerv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) { EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0); SpecializedSetup(false); cmds::GetIntegerv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetIntegerv cmd; cmd.Init(GL_FOG_HINT, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) { EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0); SpecializedSetup(false); cmds::GetIntegerv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetIntegerv cmd; cmd.Init(GL_ACTIVE_TEXTURE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) { EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0); SpecializedSetup(false); cmds::GetIntegerv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetIntegerv cmd; cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetInternalformativValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetInternalformativ::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA4, GL_RENDERBUFFER_RED_SIZE, 4, result->GetData())); result->size = 0; cmds::GetInternalformativ cmd; cmd.Init(GL_RENDERBUFFER, GL_RGBA4, GL_RENDERBUFFER_RED_SIZE, 4, shared_memory_id_, shared_memory_offset_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( GL_RENDERBUFFER_RED_SIZE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, GetProgramivValidArgs) { SpecializedSetup(true); typedef cmds::GetProgramiv::Result Result; Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetProgramiv cmd; cmd.Init(client_program_id_, GL_DELETE_STATUS, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DELETE_STATUS), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) { EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetProgramiv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetProgramiv cmd; cmd.Init(client_program_id_, GL_DELETE_STATUS, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_1) { EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetProgramiv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetProgramiv cmd; cmd.Init(client_program_id_, GL_DELETE_STATUS, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetProgramInfoLogValidArgs) { const char* kInfo = "hello"; const uint32_t kBucketId = 123; SpecializedSetup(true); cmds::GetProgramInfoLog cmd; cmd.Init(client_program_id_, kBucketId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId); ASSERT_TRUE(bucket != NULL); EXPECT_EQ(strlen(kInfo) + 1, bucket->size()); EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kInfo, bucket->size())); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) { const uint32_t kBucketId = 123; cmds::GetProgramInfoLog cmd; cmd.Init(kInvalidClientId, kBucketId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); } TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetRenderbufferParameteriv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL( *gl_, GetRenderbufferParameterivEXT( GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, result->GetData())); result->size = 0; cmds::GetRenderbufferParameteriv cmd; cmd.Init(GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned( GL_RENDERBUFFER_RED_SIZE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) { EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetRenderbufferParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetRenderbufferParameteriv cmd; cmd.Init(GL_FRAMEBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) { EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetRenderbufferParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetRenderbufferParameteriv cmd; cmd.Init(GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) { EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetRenderbufferParameteriv::Result* result = static_cast( shared_memory_address_); result->size = 0; cmds::GetRenderbufferParameteriv cmd; cmd.Init(GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetSamplerParameterfvValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetSamplerParameterfv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetSamplerParameterfv(kServiceSamplerId, GL_TEXTURE_MAG_FILTER, result->GetData())); result->size = 0; cmds::GetSamplerParameterfv cmd; cmd.Init(client_sampler_id_, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ( decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, GetSamplerParameterivValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetSamplerParameteriv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetSamplerParameteriv(kServiceSamplerId, GL_TEXTURE_MAG_FILTER, result->GetData())); result->size = 0; cmds::GetSamplerParameteriv cmd; cmd.Init(client_sampler_id_, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); decoder_->set_unsafe_es3_apis_enabled(true); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ( decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); decoder_->set_unsafe_es3_apis_enabled(false); EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); } TEST_P(GLES2DecoderTest1, GetShaderivValidArgs) { EXPECT_CALL(*gl_, GetError()) .WillOnce(Return(GL_NO_ERROR)) .WillOnce(Return(GL_NO_ERROR)) .RetiresOnSaturation(); SpecializedSetup(true); typedef cmds::GetShaderiv::Result Result; Result* result = static_cast(shared_memory_address_); EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_SHADER_TYPE, result->GetData())); result->size = 0; cmds::GetShaderiv cmd; cmd.Init(client_shader_id_, GL_SHADER_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_SHADER_TYPE), result->GetNumResults()); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) { EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetShaderiv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetShaderiv cmd; cmd.Init(client_shader_id_, GL_SHADER_TYPE, kInvalidSharedMemoryId, 0); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) { EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0); SpecializedSetup(false); cmds::GetShaderiv::Result* result = static_cast(shared_memory_address_); result->size = 0; cmds::GetShaderiv cmd; cmd.Init(client_shader_id_, GL_SHADER_TYPE, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); EXPECT_EQ(0u, result->size); } // TODO(gman): GetShaderInfoLog // TODO(gman): GetShaderPrecisionFormat #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_