diff options
16 files changed, 556 insertions, 41 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index e29ef07..ae96c63 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -370,12 +370,18 @@ _ENUM_LISTS = { 'valid': [ 'GL_FRAMEBUFFER', ], + 'invalid': [ + 'GL_RENDERBUFFER', + ], }, 'RenderBufferTarget': { 'type': 'GLenum', 'valid': [ 'GL_RENDERBUFFER', ], + 'invalid': [ + 'GL_FRAMEBUFFER', + ], }, 'BufferTarget': { 'type': 'GLenum', @@ -430,6 +436,9 @@ _ENUM_LISTS = { 'GL_VERTEX_SHADER', 'GL_FRAGMENT_SHADER', ], + 'invalid': [ + 'GL_GEOMETRY_SHADER', + ], }, 'FaceType': { 'type': 'GLenum', @@ -842,7 +851,7 @@ _ENUM_LISTS = { # expectation: If False the unit test will have no expected calls. _FUNCTION_INFO = { - 'ActiveTexture': {'decoder_func': 'DoActiveTexture', 'expectation': False}, + 'ActiveTexture': {'decoder_func': 'DoActiveTexture', 'unit_test': False}, 'BindAttribLocation': {'type': 'GLchar'}, 'BindBuffer': {'decoder_func': 'DoBindBuffer'}, 'BindFramebuffer': { @@ -856,7 +865,12 @@ _FUNCTION_INFO = { 'BindTexture': {'decoder_func': 'DoBindTexture'}, 'BufferData': {'type': 'Manual', 'immediate': True}, 'BufferSubData': {'type': 'Data', 'decoder_func': 'DoBufferSubData'}, - 'CheckFramebufferStatus': {'decoder_func': 'glCheckFramebufferStatusEXT'}, + 'CheckFramebufferStatus': { + 'type': 'Is', + 'decoder_func': 'DoCheckFramebufferStatus', + 'gl_test_func': 'glCheckFramebufferStatusEXT', + 'result': ['GLenum'], + }, 'ClearDepthf': {'decoder_func': 'glClearDepth'}, 'CompileShader': {'decoder_func': 'DoCompileShader', 'unit_test': False}, 'CompressedTexImage2D': {'type': 'Manual','immediate': True}, @@ -885,8 +899,14 @@ _FUNCTION_INFO = { 'EnableVertexAttribArray': {'decoder_func': 'DoEnableVertexAttribArray'}, 'Finish': {'impl_func': False}, 'Flush': {'impl_func': False}, - 'FramebufferRenderbuffer': {'decoder_func': 'glFramebufferRenderbufferEXT'}, - 'FramebufferTexture2D': {'decoder_func': 'glFramebufferTexture2DEXT'}, + 'FramebufferRenderbuffer': { + 'decoder_func': 'DoFramebufferRenderbuffer', + 'gl_test_func': 'glFramebufferRenderbufferEXT', + }, + 'FramebufferTexture2D': { + 'decoder_func': 'DoFramebufferTexture2D', + 'gl_test_func': 'glFramebufferTexture2DEXT', + }, 'GenerateMipmap': { 'decoder_func': 'DoGenerateMipmap', 'gl_test_func': 'glGenerateMipmapEXT', @@ -937,15 +957,15 @@ _FUNCTION_INFO = { 'GetBufferParameteriv': {'type': 'GETn'}, 'GetError': { 'type': 'Is', - 'decoder_func': - 'GetGLError', + 'decoder_func': 'GetGLError', 'impl_func': False, 'result': ['GLenum'], }, 'GetFloatv': {'type': 'GETn'}, 'GetFramebufferAttachmentParameteriv': { 'type': 'GETn', - 'decoder_func': 'glGetFramebufferAttachmentParameterivEXT', + 'decoder_func': 'DoGetFramebufferAttachmentParameteriv', + 'gl_test_func': 'glGetFramebufferAttachmentParameterivEXT', }, 'GetIntegerv': {'type': 'GETn'}, 'GetProgramiv': {'type': 'GETn'}, @@ -956,7 +976,8 @@ _FUNCTION_INFO = { }, 'GetRenderbufferParameteriv': { 'type': 'GETn', - 'decoder_func': 'glGetRenderbufferParameterivEXT', + 'decoder_func': 'DoGetRenderbufferParameteriv', + 'gl_test_func': 'glGetRenderbufferParameterivEXT', }, 'GetShaderiv': {'type': 'GETn', 'decoder_func': 'DoGetShaderiv'}, 'GetShaderInfoLog': { @@ -1024,7 +1045,10 @@ _FUNCTION_INFO = { 'IsTexture': {'type': 'Is'}, 'LinkProgram': {'decoder_func': 'DoLinkProgram'}, 'PixelStorei': {'type': 'Manual'}, - 'RenderbufferStorage': {'decoder_func': 'glRenderbufferStorageEXT'}, + 'RenderbufferStorage': { + 'decoder_func': 'DoRenderbufferStorage', + 'gl_test_func': 'glRenderbufferStorageEXT', + }, 'ReadPixels': { 'cmd_comment': '// ReadPixels has the result separated from the pixel buffer so that\n' @@ -1475,6 +1499,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { %(name)s cmd; cmd.Init(%(args)s); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } """ self.WriteValidUnitTest(func, file, valid_test) @@ -1867,6 +1892,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { %(name)s cmd; cmd.Init(%(args)s); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } """ @@ -1897,6 +1923,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } """ @@ -2032,6 +2059,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { %(name)s cmd; cmd.Init(%(args)s%(comma)skNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } """ @@ -2102,6 +2130,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { %(name)s cmd; cmd.Init(%(args)s); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } """ @@ -2136,6 +2165,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { cmd.Init(1, &client_%(resource_name)s_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_%(resource_name)s_id_))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } """ @@ -2355,6 +2385,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { cmd.Init(%(gl_args)s, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } """ gl_arg_strings = [] @@ -2533,6 +2564,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { cmd.Init(%(gl_args)s, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } """ gl_arg_strings = [] @@ -3073,6 +3105,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { %(name)s cmd; cmd.Init(%(args)s%(comma)sshared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } """ comma = "" @@ -3204,6 +3237,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) { 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()); } """ args = func.GetOriginalArgs() diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index 6ae38f4..b450ba5 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -109,10 +109,11 @@ c.Init(target, offset, size); } - void CheckFramebufferStatus(GLenum target) { + void CheckFramebufferStatus( + GLenum target, uint32 result_shm_id, uint32 result_shm_offset) { gles2::CheckFramebufferStatus& c = GetCmdSpace<gles2::CheckFramebufferStatus>(); - c.Init(target); + c.Init(target, result_shm_id, result_shm_offset); } void Clear(GLbitfield mask) { diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index f7bf3ad..cded8bb 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -449,11 +449,6 @@ void GLES2Implementation::TexSubImage2D( } } -GLenum GLES2Implementation::CheckFramebufferStatus(GLenum target) { - // TODO(gman): implement. - return 0; -} - void GLES2Implementation::GetActiveAttrib( GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) { diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index ef6803d..1f78ead 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -65,7 +65,15 @@ void BufferData( void BufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void* data); -GLenum CheckFramebufferStatus(GLenum target); +GLenum CheckFramebufferStatus(GLenum target) { + typedef CheckFramebufferStatus::Result Result; + Result* result = GetResultAs<Result*>(); + *result = 0; + helper_->CheckFramebufferStatus( + target, result_shm_id(), result_shm_offset()); + WaitForCmd(); + return *result; +} void Clear(GLbitfield mask) { helper_->Clear(mask); diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index 245a3c8..20db822 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -748,6 +748,8 @@ struct CheckFramebufferStatus { static const CommandId kCmdId = kCheckFramebufferStatus; static const cmd::ArgFlags kArgFlags = cmd::kFixed; + typedef GLenum Result; + static uint32 ComputeSize() { return static_cast<uint32>(sizeof(ValueType)); // NOLINT } @@ -756,26 +758,37 @@ struct CheckFramebufferStatus { header.SetCmd<ValueType>(); } - void Init(GLenum _target) { + void Init(GLenum _target, uint32 _result_shm_id, uint32 _result_shm_offset) { SetHeader(); target = _target; + result_shm_id = _result_shm_id; + result_shm_offset = _result_shm_offset; } - void* Set(void* cmd, GLenum _target) { - static_cast<ValueType*>(cmd)->Init(_target); + void* Set( + void* cmd, GLenum _target, uint32 _result_shm_id, + uint32 _result_shm_offset) { + static_cast<ValueType*>( + cmd)->Init(_target, _result_shm_id, _result_shm_offset); return NextCmdAddress<ValueType>(cmd); } gpu::CommandHeader header; uint32 target; + uint32 result_shm_id; + uint32 result_shm_offset; }; -COMPILE_ASSERT(sizeof(CheckFramebufferStatus) == 8, - Sizeof_CheckFramebufferStatus_is_not_8); +COMPILE_ASSERT(sizeof(CheckFramebufferStatus) == 16, + Sizeof_CheckFramebufferStatus_is_not_16); COMPILE_ASSERT(offsetof(CheckFramebufferStatus, header) == 0, OffsetOf_CheckFramebufferStatus_header_not_0); COMPILE_ASSERT(offsetof(CheckFramebufferStatus, target) == 4, OffsetOf_CheckFramebufferStatus_target_not_4); +COMPILE_ASSERT(offsetof(CheckFramebufferStatus, result_shm_id) == 8, + OffsetOf_CheckFramebufferStatus_result_shm_id_not_8); +COMPILE_ASSERT(offsetof(CheckFramebufferStatus, result_shm_offset) == 12, + OffsetOf_CheckFramebufferStatus_result_shm_offset_not_12); struct Clear { typedef Clear ValueType; diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index e53ac55..7cb1761 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h @@ -273,13 +273,17 @@ TEST(GLES2FormatTest, CheckFramebufferStatus) { CheckFramebufferStatus cmd = { { 0 } }; void* next_cmd = cmd.Set( &cmd, - static_cast<GLenum>(11)); + static_cast<GLenum>(11), + static_cast<uint32>(12), + static_cast<uint32>(13)); EXPECT_EQ(static_cast<uint32>(CheckFramebufferStatus::kCmdId), cmd.header.command); EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); EXPECT_EQ(static_cast<char*>(next_cmd), reinterpret_cast<char*>(&cmd) + sizeof(cmd)); EXPECT_EQ(static_cast<GLenum>(11), cmd.target); + EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id); + EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset); } TEST(GLES2FormatTest, Clear) { diff --git a/gpu/command_buffer/service/gl_interface.h b/gpu/command_buffer/service/gl_interface.h index ddc2c99..32d2ae3 100644 --- a/gpu/command_buffer/service/gl_interface.h +++ b/gpu/command_buffer/service/gl_interface.h @@ -31,6 +31,7 @@ #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_3D 0x806F #define GL_DOUBLE 0x140A +#define GL_GEOMETRY_SHADER 0x8DD9 namespace gles2 { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 8c9be47..67e7433 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -440,14 +440,17 @@ class GLES2DecoderImpl : public GLES2Decoder { // Wrapper for glBindTexture since we need to track the current targets. void DoBindTexture(GLenum target, GLuint texture); - // Wrapper for BufferData. + // Wrapper for glBufferData. void DoBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); - // Wrapper for BufferSubData. + // Wrapper for glBufferSubData. void DoBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data); + // Wrapper for glCheckFramebufferStatus + GLenum DoCheckFramebufferStatus(GLenum target); + // Wrapper for glCompileShader. void DoCompileShader(GLuint shader); @@ -460,9 +463,27 @@ class GLES2DecoderImpl : public GLES2Decoder { // Wrapper for glEnableVertexAttribArray. void DoEnableVertexAttribArray(GLuint index); + // Wrapper for glFramebufferRenderbufffer. + void DoFramebufferRenderbuffer( + GLenum target, GLenum attachment, GLenum renderbuffertarget, + GLuint renderbuffer); + + // Wrapper for glFramebufferTexture2D. + void DoFramebufferTexture2D( + GLenum target, GLenum attachment, GLenum textarget, GLuint texture, + GLint level); + // Wrapper for glGenerateMipmap void DoGenerateMipmap(GLenum target); + // Wrapper for glGetFramebufferAttachmentParameteriv. + void DoGetFramebufferAttachmentParameteriv( + GLenum target, GLenum attachment, GLenum pname, GLint* params); + + // Wrapper for glRenderbufferParameteriv. + void DoGetRenderbufferParameteriv( + GLenum target, GLenum pname, GLint* params); + // Wrapper for glGetShaderiv void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params); @@ -473,6 +494,10 @@ class GLES2DecoderImpl : public GLES2Decoder { // Wrapper for glLinkProgram void DoLinkProgram(GLuint program); + // Wrapper for glRenderbufferStorage. + void DoRenderbufferStorage( + GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + // Swaps the buffers (copies/renders to the current window). void DoSwapBuffers(); @@ -1309,11 +1334,13 @@ bool GLES2DecoderImpl::ValidateGLenumCompressedTextureInternalFormat(GLenum) { } void GLES2DecoderImpl::DoActiveTexture(GLenum texture_unit) { - if (texture_unit > group_->max_texture_units()) { + GLuint texture_index = texture_unit - GL_TEXTURE0; + if (texture_index > group_->max_texture_units()) { SetGLError(GL_INVALID_ENUM); return; } - active_texture_unit_ = texture_unit - GL_TEXTURE0; + active_texture_unit_ = texture_index; + glActiveTexture(texture_unit); } void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint buffer) { @@ -1451,6 +1478,61 @@ void GLES2DecoderImpl::DoDrawArrays( } } +void GLES2DecoderImpl::DoFramebufferRenderbuffer( + GLenum target, GLenum attachment, GLenum renderbuffertarget, + GLuint renderbuffer) { + if (bound_framebuffer_ == 0) { + SetGLError(GL_INVALID_OPERATION); + return; + } + glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, + renderbuffer); +} + +GLenum GLES2DecoderImpl::DoCheckFramebufferStatus(GLenum target) { + if (bound_framebuffer_ == 0) { + return GL_FRAMEBUFFER_COMPLETE; + } + return glCheckFramebufferStatusEXT(target); +} + +void GLES2DecoderImpl::DoFramebufferTexture2D( + GLenum target, GLenum attachment, GLenum textarget, GLuint texture, + GLint level) { + if (bound_framebuffer_ == 0) { + SetGLError(GL_INVALID_OPERATION); + return; + } + glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); +} + +void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv( + GLenum target, GLenum attachment, GLenum pname, GLint* params) { + if (bound_framebuffer_ == 0) { + SetGLError(GL_INVALID_OPERATION); + return; + } + glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); +} + +void GLES2DecoderImpl::DoGetRenderbufferParameteriv( + GLenum target, GLenum pname, GLint* params) { + if (bound_renderbuffer_ == 0) { + SetGLError(GL_INVALID_OPERATION); + return; + } + glGetRenderbufferParameterivEXT(target, pname, params); +} + +void GLES2DecoderImpl::DoRenderbufferStorage( + GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { + if (bound_renderbuffer_ == 0) { + SetGLError(GL_INVALID_OPERATION); + return; + } + glRenderbufferStorageEXT(target, internalformat, width, height); +} + void GLES2DecoderImpl::DoLinkProgram(GLuint program) { ProgramManager::ProgramInfo* info = GetProgramInfo(program); if (!info) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 7b123bc..3d866a3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -265,11 +265,13 @@ error::Error GLES2DecoderImpl::HandleBufferSubDataImmediate( error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( uint32 immediate_data_size, const gles2::CheckFramebufferStatus& c) { GLenum target = static_cast<GLenum>(c.target); + GLenum* result_dst = GetSharedMemoryAs<GLenum*>( + c.result_shm_id, c.result_shm_offset, sizeof(*result_dst)); if (!ValidateGLenumFrameBufferTarget(target)) { SetGLError(GL_INVALID_ENUM); return error::kNoError; } - glCheckFramebufferStatusEXT(target); + *result_dst = DoCheckFramebufferStatus(target); return error::kNoError; } @@ -771,7 +773,7 @@ error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( SetGLError(GL_INVALID_ENUM); return error::kNoError; } - glFramebufferRenderbufferEXT( + DoFramebufferRenderbuffer( target, attachment, renderbuffertarget, renderbuffer); return error::kNoError; } @@ -799,7 +801,7 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( SetGLError(GL_INVALID_ENUM); return error::kNoError; } - glFramebufferTexture2DEXT(target, attachment, textarget, texture, level); + DoFramebufferTexture2D(target, attachment, textarget, texture, level); return error::kNoError; } @@ -1105,7 +1107,7 @@ error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( if (params == NULL) { return error::kOutOfBounds; } - glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params); + DoGetFramebufferAttachmentParameteriv(target, attachment, pname, params); return error::kNoError; } @@ -1197,7 +1199,7 @@ error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( if (params == NULL) { return error::kOutOfBounds; } - glGetRenderbufferParameterivEXT(target, pname, params); + DoGetRenderbufferParameteriv(target, pname, params); return error::kNoError; } @@ -1522,7 +1524,7 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorage( SetGLError(GL_INVALID_VALUE); return error::kNoError; } - glRenderbufferStorageEXT(target, internalformat, width, height); + DoRenderbufferStorage(target, internalformat, width, height); return error::kNoError; } diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index 9228165..11eef37 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -1014,6 +1014,93 @@ TEST_F(GLES2DecoderWithShaderTest, BindBufferToDifferentTargetFails) { EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); } +TEST_F(GLES2DecoderTest, ActiveTextureValidArgs) { + EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)); + SpecializedSetup<ActiveTexture, 0>(); + ActiveTexture cmd; + cmd.Init(GL_TEXTURE1); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest, ActiveTextureInalidArgs) { + EXPECT_CALL(*gl_, ActiveTexture(_)).Times(0); + SpecializedSetup<ActiveTexture, 0>(); + ActiveTexture cmd; + cmd.Init(GL_TEXTURE0 - 1); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); + cmd.Init(kNumTextureUnits); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + +TEST_F(GLES2DecoderTest, CheckFramebufferStatusWithNoBoundTarget) { + EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)) + .Times(0); + CheckFramebufferStatus::Result* result = + static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_); + *result = 0; + CheckFramebufferStatus cmd; + cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(*result, GL_FRAMEBUFFER_COMPLETE); +} + +TEST_F(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) { + EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)) + .Times(0); + FramebufferRenderbuffer cmd; + cmd.Init( + GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, + client_renderbuffer_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); +} + +TEST_F(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) { + EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)) + .Times(0); + FramebufferTexture2D cmd; + cmd.Init( + GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_, + 5); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); +} + +TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithNoBoundTarget) { + EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)) + .Times(0); + 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(GL_INVALID_OPERATION, GetGLError()); +} + +TEST_F(GLES2DecoderTest, GetRenderbufferParameterivWithNoBoundTarget) { + EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)) + .Times(0); + GetRenderbufferParameteriv cmd; + cmd.Init( + GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, shared_memory_id_, + shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); +} + +TEST_F(GLES2DecoderTest, RenderbufferStorageWithNoBoundTarget) { + EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)) + .Times(0); + RenderbufferStorage cmd; + cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); +} + // TODO(gman): BindAttribLocation // TODO(gman): BindAttribLocationImmediate diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc index 05f9b8a..cd78e98 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc @@ -40,6 +40,37 @@ void GLES2DecoderTestBase::SpecializedSetup<GenerateMipmap, 0>() { 0, 0); }; +template <> +void GLES2DecoderTestBase::SpecializedSetup<CheckFramebufferStatus, 0>() { + DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, + kServiceFramebufferId); +}; + +template <> +void GLES2DecoderTestBase::SpecializedSetup<FramebufferRenderbuffer, 0>() { + DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, + kServiceFramebufferId); +}; + +template <> +void GLES2DecoderTestBase::SpecializedSetup<FramebufferTexture2D, 0>() { + DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, + kServiceFramebufferId); +}; + +template <> +void GLES2DecoderTestBase::SpecializedSetup<GetFramebufferAttachmentParameteriv, + 0>() { + DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_, + kServiceFramebufferId); +}; + +template <> +void GLES2DecoderTestBase::SpecializedSetup<GetRenderbufferParameteriv, 0>() { + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); +}; + #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h" } // namespace gles2 diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h index 767505a..2cd8da8 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h @@ -8,13 +8,7 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ - -TEST_F(GLES2DecoderTest1, ActiveTextureValidArgs) { - SpecializedSetup<ActiveTexture, 0>(); - ActiveTexture cmd; - cmd.Init(1); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); -} +// TODO(gman): ActiveTexture TEST_F(GLES2DecoderTest1, AttachShaderValidArgs) { EXPECT_CALL(*gl_, AttachShader(kServiceProgramId, kServiceShaderId)); @@ -22,6 +16,7 @@ TEST_F(GLES2DecoderTest1, AttachShaderValidArgs) { AttachShader cmd; cmd.Init(client_program_id_, client_shader_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): BindAttribLocation @@ -34,6 +29,7 @@ TEST_F(GLES2DecoderTest1, BindBufferValidArgs) { BindBuffer cmd; cmd.Init(GL_ARRAY_BUFFER, client_buffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BindBufferInvalidArgs0_0) { @@ -51,6 +47,16 @@ TEST_F(GLES2DecoderTest1, BindFramebufferValidArgs) { BindFramebuffer cmd; cmd.Init(GL_FRAMEBUFFER, client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) { + EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0); + SpecializedSetup<BindFramebuffer, 0>(); + BindFramebuffer cmd; + cmd.Init(GL_RENDERBUFFER, client_framebuffer_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgs) { @@ -60,6 +66,16 @@ TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgs) { BindRenderbuffer cmd; cmd.Init(GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) { + EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0); + SpecializedSetup<BindRenderbuffer, 0>(); + BindRenderbuffer cmd; + cmd.Init(GL_FRAMEBUFFER, client_renderbuffer_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, BindTextureValidArgs) { @@ -68,6 +84,7 @@ TEST_F(GLES2DecoderTest1, BindTextureValidArgs) { BindTexture cmd; cmd.Init(GL_TEXTURE_2D, client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_0) { @@ -94,6 +111,7 @@ TEST_F(GLES2DecoderTest1, BlendColorValidArgs) { BlendColor cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BlendEquationValidArgs) { @@ -102,6 +120,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationValidArgs) { BlendEquation cmd; cmd.Init(GL_FUNC_ADD); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) { @@ -128,6 +147,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateValidArgs) { BlendEquationSeparate cmd; cmd.Init(GL_FUNC_ADD, GL_FUNC_ADD); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) { @@ -172,6 +192,7 @@ TEST_F(GLES2DecoderTest1, BlendFuncValidArgs) { BlendFunc cmd; cmd.Init(GL_ZERO, GL_ZERO); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, BlendFuncSeparateValidArgs) { @@ -180,6 +201,7 @@ TEST_F(GLES2DecoderTest1, BlendFuncSeparateValidArgs) { 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 @@ -194,8 +216,18 @@ TEST_F(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) { EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)); SpecializedSetup<CheckFramebufferStatus, 0>(); CheckFramebufferStatus cmd; - cmd.Init(GL_FRAMEBUFFER); + cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) { + EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0); + SpecializedSetup<CheckFramebufferStatus, 0>(); + CheckFramebufferStatus cmd; + cmd.Init(GL_RENDERBUFFER, shared_memory_id_, shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, ClearValidArgs) { @@ -204,6 +236,7 @@ TEST_F(GLES2DecoderTest1, ClearValidArgs) { Clear cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, ClearColorValidArgs) { @@ -212,6 +245,7 @@ TEST_F(GLES2DecoderTest1, ClearColorValidArgs) { ClearColor cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, ClearDepthfValidArgs) { @@ -220,6 +254,7 @@ TEST_F(GLES2DecoderTest1, ClearDepthfValidArgs) { ClearDepthf cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) { @@ -228,6 +263,7 @@ TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) { ClearStencil cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) { @@ -236,6 +272,7 @@ TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) { ColorMask cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): CompileShader // TODO(gman): CompressedTexImage2D @@ -253,6 +290,7 @@ TEST_F(GLES2DecoderTest1, CopyTexImage2DValidArgs) { CopyTexImage2D 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_F(GLES2DecoderTest1, CopyTexImage2DInvalidArgs0_0) { @@ -288,6 +326,7 @@ TEST_F(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) { 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_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) { @@ -324,6 +363,7 @@ TEST_F(GLES2DecoderTest1, CreateProgramValidArgs) { CreateProgram cmd; cmd.Init(kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -334,15 +374,26 @@ TEST_F(GLES2DecoderTest1, CreateShaderValidArgs) { CreateShader cmd; cmd.Init(GL_VERTEX_SHADER, kNewClientId); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } +TEST_F(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) { + EXPECT_CALL(*gl_, CreateShader(_)).Times(0); + SpecializedSetup<CreateShader, 0>(); + CreateShader cmd; + cmd.Init(GL_GEOMETRY_SHADER, kNewClientId); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + TEST_F(GLES2DecoderTest1, CullFaceValidArgs) { EXPECT_CALL(*gl_, CullFace(GL_FRONT)); SpecializedSetup<CullFace, 0>(); CullFace cmd; cmd.Init(GL_FRONT); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DeleteBuffersValidArgs) { @@ -355,6 +406,7 @@ TEST_F(GLES2DecoderTest1, DeleteBuffersValidArgs) { DeleteBuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -378,6 +430,7 @@ TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) { cmd.Init(1, &client_buffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_buffer_id_))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -402,6 +455,7 @@ TEST_F(GLES2DecoderTest1, DeleteFramebuffersValidArgs) { DeleteFramebuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -426,6 +480,7 @@ TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) { cmd.Init(1, &client_framebuffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_framebuffer_id_))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -453,6 +508,7 @@ TEST_F(GLES2DecoderTest1, DeleteRenderbuffersValidArgs) { DeleteRenderbuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -477,6 +533,7 @@ TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) { cmd.Init(1, &client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_renderbuffer_id_))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -504,6 +561,7 @@ TEST_F(GLES2DecoderTest1, DeleteTexturesValidArgs) { DeleteTextures cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -527,6 +585,7 @@ TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) { cmd.Init(1, &client_texture_id_); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(client_texture_id_))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), 0u); } @@ -547,6 +606,7 @@ TEST_F(GLES2DecoderTest1, DepthFuncValidArgs) { DepthFunc cmd; cmd.Init(GL_NEVER); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) { @@ -555,6 +615,7 @@ TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) { DepthMask cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DepthRangefValidArgs) { @@ -563,6 +624,7 @@ TEST_F(GLES2DecoderTest1, DepthRangefValidArgs) { DepthRangef cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DetachShaderValidArgs) { @@ -571,6 +633,7 @@ TEST_F(GLES2DecoderTest1, DetachShaderValidArgs) { DetachShader cmd; cmd.Init(client_program_id_, client_shader_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DisableValidArgs) { @@ -579,6 +642,7 @@ TEST_F(GLES2DecoderTest1, DisableValidArgs) { Disable cmd; cmd.Init(GL_BLEND); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_0) { @@ -605,6 +669,7 @@ TEST_F(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) { DisableVertexAttribArray cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): DrawArrays // TODO(gman): DrawElements @@ -616,6 +681,7 @@ TEST_F(GLES2DecoderTest1, EnableValidArgs) { Enable cmd; cmd.Init(GL_BLEND); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_0) { @@ -642,6 +708,7 @@ TEST_F(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) { EnableVertexAttribArray cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, FinishValidArgs) { @@ -650,6 +717,7 @@ TEST_F(GLES2DecoderTest1, FinishValidArgs) { Finish cmd; cmd.Init(); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, FlushValidArgs) { @@ -658,6 +726,7 @@ TEST_F(GLES2DecoderTest1, FlushValidArgs) { Flush cmd; cmd.Init(); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) { @@ -671,6 +740,29 @@ TEST_F(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) { GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, client_renderbuffer_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) { + EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0); + SpecializedSetup<FramebufferRenderbuffer, 0>(); + FramebufferRenderbuffer cmd; + cmd.Init( + GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, + client_renderbuffer_id_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) { + EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0); + SpecializedSetup<FramebufferRenderbuffer, 0>(); + 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_F(GLES2DecoderTest1, FramebufferTexture2DValidArgs) { @@ -684,6 +776,18 @@ TEST_F(GLES2DecoderTest1, FramebufferTexture2DValidArgs) { GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_, 5); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) { + EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0); + SpecializedSetup<FramebufferTexture2D, 0>(); + FramebufferTexture2D cmd; + cmd.Init( + GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_, + 5); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) { @@ -703,6 +807,7 @@ TEST_F(GLES2DecoderTest1, FrontFaceValidArgs) { FrontFace cmd; cmd.Init(GL_CW); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GenBuffersValidArgs) { @@ -713,6 +818,7 @@ TEST_F(GLES2DecoderTest1, GenBuffersValidArgs) { GenBuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -734,6 +840,7 @@ TEST_F(GLES2DecoderTest1, GenBuffersImmediateValidArgs) { cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -752,6 +859,7 @@ TEST_F(GLES2DecoderTest1, GenerateMipmapValidArgs) { GenerateMipmap cmd; cmd.Init(GL_TEXTURE_2D); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) { @@ -780,6 +888,7 @@ TEST_F(GLES2DecoderTest1, GenFramebuffersValidArgs) { GenFramebuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -801,6 +910,7 @@ TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) { cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -821,6 +931,7 @@ TEST_F(GLES2DecoderTest1, GenRenderbuffersValidArgs) { GenRenderbuffers cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -843,6 +954,7 @@ TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) { cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -864,6 +976,7 @@ TEST_F(GLES2DecoderTest1, GenTexturesValidArgs) { GenTextures cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -885,6 +998,7 @@ TEST_F(GLES2DecoderTest1, GenTexturesImmediateValidArgs) { cmd.Init(1, &temp); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); EXPECT_EQ(GetServiceId(kNewClientId), kNewServiceId); } @@ -915,6 +1029,7 @@ TEST_F(GLES2DecoderTest1, GetBooleanvValidArgs) { GetBooleanv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) { @@ -944,6 +1059,7 @@ TEST_F(GLES2DecoderTest1, GetBufferParameterivValidArgs) { GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) { @@ -992,6 +1108,7 @@ TEST_F(GLES2DecoderTest1, GetErrorValidArgs) { GetError cmd; cmd.Init(shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetFloatvValidArgs) { @@ -1001,6 +1118,7 @@ TEST_F(GLES2DecoderTest1, GetFloatvValidArgs) { GetFloatv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) { @@ -1032,6 +1150,20 @@ TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) { GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) { + EXPECT_CALL( + *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0); + SpecializedSetup<GetFramebufferAttachmentParameteriv, 0>(); + GetFramebufferAttachmentParameteriv cmd; + cmd.Init( + GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_, + shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) { @@ -1064,6 +1196,7 @@ TEST_F(GLES2DecoderTest1, GetIntegervValidArgs) { GetIntegerv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) { @@ -1093,6 +1226,7 @@ TEST_F(GLES2DecoderTest1, GetProgramivValidArgs) { client_program_id_, GL_DELETE_STATUS, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) { @@ -1131,6 +1265,7 @@ TEST_F(GLES2DecoderTest1, GetProgramInfoLogValidArgs) { 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_F(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) { @@ -1154,6 +1289,18 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) { GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) { + EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0); + SpecializedSetup<GetRenderbufferParameteriv, 0>(); + GetRenderbufferParameteriv cmd; + cmd.Init( + GL_FRAMEBUFFER, GL_RENDERBUFFER_WIDTH, shared_memory_id_, + shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) { @@ -1185,6 +1332,7 @@ TEST_F(GLES2DecoderTest1, GetShaderivValidArgs) { client_shader_id_, GL_SHADER_TYPE, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) { @@ -1223,6 +1371,7 @@ TEST_F(GLES2DecoderTest1, GetShaderInfoLogValidArgs) { 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_F(GLES2DecoderTest1, GetShaderInfoLogInvalidArgs) { @@ -1251,6 +1400,7 @@ TEST_F(GLES2DecoderTest1, GetTexParameterfvValidArgs) { GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs0_0) { @@ -1304,6 +1454,7 @@ TEST_F(GLES2DecoderTest1, GetTexParameterivValidArgs) { GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs0_0) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc index 89cada4..caadef6 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc @@ -54,6 +54,12 @@ void GLES2DecoderTestBase::SpecializedSetup<LinkProgram, 0>() { }; template <> +void GLES2DecoderTestBase::SpecializedSetup<RenderbufferStorage, 0>() { + DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_, + kServiceRenderbufferId); +}; + +template <> void GLES2DecoderTestBase::SpecializedSetup<TexParameterf, 0>() { DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); }; diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index ef5c231..f83c61a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h @@ -28,6 +28,7 @@ TEST_F(GLES2DecoderTest2, GetVertexAttribfvValidArgs) { 1, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, GetVertexAttribfvInvalidArgs2_0) { @@ -60,6 +61,7 @@ TEST_F(GLES2DecoderTest2, GetVertexAttribivValidArgs) { 1, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, GetVertexAttribivInvalidArgs2_0) { @@ -89,6 +91,7 @@ TEST_F(GLES2DecoderTest2, HintValidArgs) { Hint cmd; cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_FASTEST); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, HintInvalidArgs0_0) { @@ -106,6 +109,7 @@ TEST_F(GLES2DecoderTest2, IsBufferValidArgs) { IsBuffer cmd; cmd.Init(client_buffer_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsEnabledValidArgs) { @@ -114,6 +118,7 @@ TEST_F(GLES2DecoderTest2, IsEnabledValidArgs) { IsEnabled cmd; cmd.Init(GL_BLEND, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsEnabledInvalidArgs0_0) { @@ -140,6 +145,7 @@ TEST_F(GLES2DecoderTest2, IsFramebufferValidArgs) { IsFramebuffer cmd; cmd.Init(client_framebuffer_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsProgramValidArgs) { @@ -148,6 +154,7 @@ TEST_F(GLES2DecoderTest2, IsProgramValidArgs) { IsProgram cmd; cmd.Init(client_program_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsRenderbufferValidArgs) { @@ -156,6 +163,7 @@ TEST_F(GLES2DecoderTest2, IsRenderbufferValidArgs) { IsRenderbuffer cmd; cmd.Init(client_renderbuffer_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsShaderValidArgs) { @@ -164,6 +172,7 @@ TEST_F(GLES2DecoderTest2, IsShaderValidArgs) { IsShader cmd; cmd.Init(client_shader_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, IsTextureValidArgs) { @@ -172,6 +181,7 @@ TEST_F(GLES2DecoderTest2, IsTextureValidArgs) { IsTexture cmd; cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, LineWidthValidArgs) { @@ -180,6 +190,7 @@ TEST_F(GLES2DecoderTest2, LineWidthValidArgs) { LineWidth cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, LinkProgramValidArgs) { @@ -188,6 +199,7 @@ TEST_F(GLES2DecoderTest2, LinkProgramValidArgs) { LinkProgram cmd; cmd.Init(client_program_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): PixelStorei @@ -198,6 +210,7 @@ TEST_F(GLES2DecoderTest2, PolygonOffsetValidArgs) { PolygonOffset cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): ReadPixels @@ -208,6 +221,16 @@ TEST_F(GLES2DecoderTest2, RenderbufferStorageValidArgs) { RenderbufferStorage cmd; cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs0_0) { + EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0); + SpecializedSetup<RenderbufferStorage, 0>(); + RenderbufferStorage cmd; + cmd.Init(GL_FRAMEBUFFER, GL_RGBA4, 3, 4); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs2_0) { @@ -234,6 +257,7 @@ TEST_F(GLES2DecoderTest2, SampleCoverageValidArgs) { SampleCoverage cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, ScissorValidArgs) { @@ -242,6 +266,7 @@ TEST_F(GLES2DecoderTest2, ScissorValidArgs) { Scissor cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, ScissorInvalidArgs2_0) { @@ -272,6 +297,7 @@ TEST_F(GLES2DecoderTest2, StencilFuncValidArgs) { StencilFunc cmd; cmd.Init(GL_NEVER, 2, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, StencilFuncSeparateValidArgs) { @@ -280,6 +306,7 @@ TEST_F(GLES2DecoderTest2, StencilFuncSeparateValidArgs) { StencilFuncSeparate cmd; cmd.Init(GL_FRONT, GL_NEVER, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) { @@ -288,6 +315,7 @@ TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) { StencilMask cmd; cmd.Init(1); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, StencilMaskSeparateValidArgs) { @@ -296,6 +324,7 @@ TEST_F(GLES2DecoderTest2, StencilMaskSeparateValidArgs) { StencilMaskSeparate cmd; cmd.Init(GL_FRONT, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, StencilOpValidArgs) { @@ -304,6 +333,7 @@ TEST_F(GLES2DecoderTest2, StencilOpValidArgs) { StencilOp cmd; cmd.Init(GL_KEEP, GL_KEEP, GL_KEEP); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, StencilOpSeparateValidArgs) { @@ -312,6 +342,7 @@ TEST_F(GLES2DecoderTest2, StencilOpSeparateValidArgs) { StencilOpSeparate cmd; cmd.Init(GL_FRONT, GL_KEEP, GL_KEEP, GL_KEEP); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): TexImage2D @@ -324,6 +355,7 @@ TEST_F(GLES2DecoderTest2, TexParameterfValidArgs) { TexParameterf cmd; cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs0_0) { @@ -364,6 +396,7 @@ TEST_F(GLES2DecoderTest2, TexParameterfvValidArgs) { GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs0_0) { @@ -428,6 +461,7 @@ TEST_F(GLES2DecoderTest2, TexParameterfvImmediateValidArgs) { cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs0_0) { @@ -469,6 +503,7 @@ TEST_F(GLES2DecoderTest2, TexParameteriValidArgs) { TexParameteri cmd; cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs0_0) { @@ -509,6 +544,7 @@ TEST_F(GLES2DecoderTest2, TexParameterivValidArgs) { GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs0_0) { @@ -573,6 +609,7 @@ TEST_F(GLES2DecoderTest2, TexParameterivImmediateValidArgs) { cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs0_0) { @@ -618,6 +655,7 @@ TEST_F(GLES2DecoderTest2, Uniform1fValidArgs) { Uniform1f cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform1fvValidArgs) { @@ -628,6 +666,7 @@ TEST_F(GLES2DecoderTest2, Uniform1fvValidArgs) { Uniform1fv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform1fvInvalidArgs1_0) { @@ -666,6 +705,7 @@ TEST_F(GLES2DecoderTest2, Uniform1fvImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): Uniform1i // TODO(gman): Uniform1iv @@ -677,6 +717,7 @@ TEST_F(GLES2DecoderTest2, Uniform2fValidArgs) { Uniform2f cmd; cmd.Init(1, 2, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform2fvValidArgs) { @@ -687,6 +728,7 @@ TEST_F(GLES2DecoderTest2, Uniform2fvValidArgs) { Uniform2fv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform2fvInvalidArgs1_0) { @@ -725,6 +767,7 @@ TEST_F(GLES2DecoderTest2, Uniform2fvImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform2iValidArgs) { @@ -733,6 +776,7 @@ TEST_F(GLES2DecoderTest2, Uniform2iValidArgs) { Uniform2i cmd; cmd.Init(1, 2, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform2ivValidArgs) { @@ -743,6 +787,7 @@ TEST_F(GLES2DecoderTest2, Uniform2ivValidArgs) { Uniform2iv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform2ivInvalidArgs1_0) { @@ -781,6 +826,7 @@ TEST_F(GLES2DecoderTest2, Uniform2ivImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3fValidArgs) { @@ -789,6 +835,7 @@ TEST_F(GLES2DecoderTest2, Uniform3fValidArgs) { Uniform3f cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3fvValidArgs) { @@ -799,6 +846,7 @@ TEST_F(GLES2DecoderTest2, Uniform3fvValidArgs) { Uniform3fv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3fvInvalidArgs1_0) { @@ -837,6 +885,7 @@ TEST_F(GLES2DecoderTest2, Uniform3fvImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3iValidArgs) { @@ -845,6 +894,7 @@ TEST_F(GLES2DecoderTest2, Uniform3iValidArgs) { Uniform3i cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3ivValidArgs) { @@ -855,6 +905,7 @@ TEST_F(GLES2DecoderTest2, Uniform3ivValidArgs) { Uniform3iv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform3ivInvalidArgs1_0) { @@ -893,6 +944,7 @@ TEST_F(GLES2DecoderTest2, Uniform3ivImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4fValidArgs) { @@ -901,6 +953,7 @@ TEST_F(GLES2DecoderTest2, Uniform4fValidArgs) { Uniform4f cmd; cmd.Init(1, 2, 3, 4, 5); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4fvValidArgs) { @@ -911,6 +964,7 @@ TEST_F(GLES2DecoderTest2, Uniform4fvValidArgs) { Uniform4fv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4fvInvalidArgs1_0) { @@ -949,6 +1003,7 @@ TEST_F(GLES2DecoderTest2, Uniform4fvImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4iValidArgs) { @@ -957,6 +1012,7 @@ TEST_F(GLES2DecoderTest2, Uniform4iValidArgs) { Uniform4i cmd; cmd.Init(1, 2, 3, 4, 5); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4ivValidArgs) { @@ -967,6 +1023,7 @@ TEST_F(GLES2DecoderTest2, Uniform4ivValidArgs) { Uniform4iv cmd; cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, Uniform4ivInvalidArgs1_0) { @@ -1005,6 +1062,7 @@ TEST_F(GLES2DecoderTest2, Uniform4ivImmediateValidArgs) { cmd.Init(1, 2, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix2fvValidArgs) { @@ -1016,6 +1074,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix2fvValidArgs) { UniformMatrix2fv cmd; cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix2fvInvalidArgs1_0) { @@ -1064,6 +1123,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix2fvImmediateValidArgs) { cmd.Init(1, 2, false, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix2fvImmediateInvalidArgs2_0) { @@ -1087,6 +1147,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix3fvValidArgs) { UniformMatrix3fv cmd; cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix3fvInvalidArgs1_0) { @@ -1135,6 +1196,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix3fvImmediateValidArgs) { cmd.Init(1, 2, false, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix3fvImmediateInvalidArgs2_0) { @@ -1158,6 +1220,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix4fvValidArgs) { UniformMatrix4fv cmd; cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix4fvInvalidArgs1_0) { @@ -1206,6 +1269,7 @@ TEST_F(GLES2DecoderTest2, UniformMatrix4fvImmediateValidArgs) { cmd.Init(1, 2, false, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, UniformMatrix4fvImmediateInvalidArgs2_0) { @@ -1227,6 +1291,7 @@ TEST_F(GLES2DecoderTest2, ValidateProgramValidArgs) { ValidateProgram cmd; cmd.Init(client_program_id_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib1fValidArgs) { @@ -1235,6 +1300,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib1fValidArgs) { VertexAttrib1f cmd; cmd.Init(1, 2); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib1fvValidArgs) { @@ -1245,6 +1311,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib1fvValidArgs) { VertexAttrib1fv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib1fvInvalidArgs1_0) { @@ -1274,6 +1341,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib1fvImmediateValidArgs) { cmd.Init(1, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib2fValidArgs) { @@ -1282,6 +1350,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib2fValidArgs) { VertexAttrib2f cmd; cmd.Init(1, 2, 3); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib2fvValidArgs) { @@ -1292,6 +1361,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib2fvValidArgs) { VertexAttrib2fv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib2fvInvalidArgs1_0) { @@ -1321,6 +1391,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib2fvImmediateValidArgs) { cmd.Init(1, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib3fValidArgs) { @@ -1329,6 +1400,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib3fValidArgs) { VertexAttrib3f cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib3fvValidArgs) { @@ -1339,6 +1411,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib3fvValidArgs) { VertexAttrib3fv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib3fvInvalidArgs1_0) { @@ -1368,6 +1441,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib3fvImmediateValidArgs) { cmd.Init(1, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib4fValidArgs) { @@ -1376,6 +1450,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib4fValidArgs) { VertexAttrib4f cmd; cmd.Init(1, 2, 3, 4, 5); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib4fvValidArgs) { @@ -1386,6 +1461,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib4fvValidArgs) { VertexAttrib4fv cmd; cmd.Init(1, shared_memory_id_, shared_memory_offset_); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, VertexAttrib4fvInvalidArgs1_0) { @@ -1415,6 +1491,7 @@ TEST_F(GLES2DecoderTest2, VertexAttrib4fvImmediateValidArgs) { cmd.Init(1, &temp[0]); EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } // TODO(gman): VertexAttribPointer @@ -1425,6 +1502,7 @@ TEST_F(GLES2DecoderTest2, ViewportValidArgs) { Viewport cmd; cmd.Init(1, 2, 3, 4); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); } TEST_F(GLES2DecoderTest2, ViewportInvalidArgs2_0) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc index d0a7ceb..16acf9a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc @@ -157,6 +157,26 @@ GLint GLES2DecoderTestBase::GetGLError() { return static_cast<GLint>(*GetSharedMemoryAs<GLenum*>()); } +void GLES2DecoderTestBase::DoBindFramebuffer( + GLenum target, GLuint client_id, GLuint service_id) { + EXPECT_CALL(*gl_, BindFramebufferEXT(target, service_id)) + .Times(1) + .RetiresOnSaturation(); + BindFramebuffer cmd; + cmd.Init(target, client_id); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); +} + +void GLES2DecoderTestBase::DoBindRenderbuffer( + GLenum target, GLuint client_id, GLuint service_id) { + EXPECT_CALL(*gl_, BindRenderbufferEXT(target, service_id)) + .Times(1) + .RetiresOnSaturation(); + BindRenderbuffer cmd; + cmd.Init(target, client_id); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); +} + void GLES2DecoderTestBase::DoBindTexture( GLenum target, GLuint client_id, GLuint service_id) { EXPECT_CALL(*gl_, BindTexture(target, service_id)) diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h index c732a2c..4408e64 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h @@ -131,6 +131,8 @@ class GLES2DecoderTestBase : public testing::Test { // EXPECT_EQ that expect both types to be the same. GLint GetGLError(); + void DoBindFramebuffer(GLenum target, GLuint client_id, GLuint service_id); + void DoBindRenderbuffer(GLenum target, GLuint client_id, GLuint service_id); void DoBindTexture(GLenum target, GLuint client_id, GLuint service_id); void DoTexImage2D(GLenum target, GLint level, GLenum internal_format, |