diff options
10 files changed, 177 insertions, 130 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index dd9bfab..8ff4959 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -1494,8 +1494,11 @@ _FUNCTION_INFO = { 'decoder_func': 'DoTexParameteriv', }, 'TexSubImage2D': { - 'type': 'Data', - 'decoder_func': 'DoTexSubImage2D', + 'type': 'Manual', + 'immediate': True, + 'cmd_args': 'GLenum target, GLint level, GLint xoffset, GLint yoffset, ' + 'GLsizei width, GLsizei height, GLenum format, GLenum type, ' + 'const void* pixels, GLboolean internal' }, 'Uniform1f': {'type': 'PUTXn', 'data_type': 'GLfloat', 'count': 1}, 'Uniform1fv': { diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index c0adf24..e6568da 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -828,20 +828,22 @@ void TexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, uint32 pixels_shm_id, - uint32 pixels_shm_offset) { + uint32 pixels_shm_offset, GLboolean internal) { gles2::TexSubImage2D& c = GetCmdSpace<gles2::TexSubImage2D>(); c.Init( target, level, xoffset, yoffset, width, height, format, type, - pixels_shm_id, pixels_shm_offset); + pixels_shm_id, pixels_shm_offset, internal); } void TexSubImage2DImmediate( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, - GLsizei height, GLenum format, GLenum type) { + GLsizei height, GLenum format, GLenum type, GLboolean internal) { const uint32 s = 0; // TODO(gman): compute correct size gles2::TexSubImage2DImmediate& c = GetImmediateCmdSpaceTotalSize<gles2::TexSubImage2DImmediate>(s); - c.Init(target, level, xoffset, yoffset, width, height, format, type); + c.Init( + target, level, xoffset, yoffset, width, height, format, type, + internal); } void Uniform1f(GLint location, GLfloat x) { diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc index b51aefa..c482d39 100644 --- a/gpu/command_buffer/client/gles2_implementation.cc +++ b/gpu/command_buffer/client/gles2_implementation.cc @@ -986,13 +986,22 @@ void GLES2Implementation::TexImage2D( helper_->TexImage2D( target, level, internalformat, width, height, border, format, type, 0, 0); if (pixels) { - TexSubImage2D(target, level, 0, 0, width, height, format, type, pixels); + TexSubImage2DImpl( + target, level, 0, 0, width, height, format, type, pixels, GL_TRUE); } } void GLES2Implementation::TexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { + TexSubImage2DImpl( + target, level, 0, 0, width, height, format, type, pixels, GL_FALSE); +} + +void GLES2Implementation::TexSubImage2DImpl( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, const void* pixels, + GLboolean internal) { if (level < 0 || height < 0 || width < 0) { SetGLError(GL_INVALID_VALUE, "glTexSubImage2D dimension < 0"); return; @@ -1031,7 +1040,7 @@ void GLES2Implementation::TexSubImage2D( memcpy(buffer, source, part_size); helper_->TexSubImage2D( target, level, xoffset, yoffset, width, num_rows, format, type, - transfer_buffer_id_, transfer_buffer_.GetOffset(buffer)); + transfer_buffer_id_, transfer_buffer_.GetOffset(buffer), internal); transfer_buffer_.FreePendingToken(buffer, helper_->InsertToken()); yoffset += num_rows; source += part_size; @@ -1056,7 +1065,7 @@ void GLES2Implementation::TexSubImage2D( memcpy(buffer, row_source, part_size); helper_->TexSubImage2D( target, level, temp_xoffset, yoffset, temp_width, 1, format, type, - transfer_buffer_id_, transfer_buffer_.GetOffset(buffer)); + transfer_buffer_id_, transfer_buffer_.GetOffset(buffer), internal); transfer_buffer_.FreePendingToken(buffer, helper_->InsertToken()); row_source += part_size; temp_xoffset += num_pixels; @@ -1637,7 +1646,7 @@ void GLES2Implementation::UnmapTexSubImage2DCHROMIUM(const void* mem) { const MappedTexture& mt = it->second; helper_->TexSubImage2D( mt.target, mt.level, mt.xoffset, mt.yoffset, mt.width, mt.height, - mt.format, mt.type, mt.shm_id, mt.shm_offset); + mt.format, mt.type, mt.shm_id, mt.shm_offset, GL_FALSE); mapped_memory_->FreePendingToken(mt.shm_memory, helper_->InsertToken()); mapped_textures_.erase(it); } diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h index 1017ef1..6104802 100644 --- a/gpu/command_buffer/client/gles2_implementation.h +++ b/gpu/command_buffer/client/gles2_implementation.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -280,6 +280,11 @@ class GLES2Implementation { GLsizei GetMaxIndexInElementArrayBuffer( GLuint buffer_id, GLsizei count, GLenum type, GLuint offset); + void TexSubImage2DImpl( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, const void* pixels, + GLboolean internal); + GLES2Util util_; GLES2CmdHelper* helper_; scoped_ptr<IdHandlerInterface> buffer_id_handler_; diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index d7ca276..5665b96 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -860,7 +860,7 @@ TEST_F(GLES2ImplementationTest, MapUnmapTexSubImage2DCHROMIUM) { Cmds expected; expected.tex.Init( GL_TEXTURE_2D, kLevel, kXOffset, kYOffset, kWidth, kHeight, kFormat, - kType, kTransferBufferId, offset); + kType, kTransferBufferId, offset, GL_FALSE); expected.set_token.Init(token++); void* mem = gl_->MapTexSubImage2DCHROMIUM( diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index 340273a..0536887 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -6010,7 +6010,7 @@ struct TexSubImage2D { void Init( GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset, GLsizei _width, GLsizei _height, GLenum _format, GLenum _type, - uint32 _pixels_shm_id, uint32 _pixels_shm_offset) { + uint32 _pixels_shm_id, uint32 _pixels_shm_offset, GLboolean _internal) { SetHeader(); target = _target; level = _level; @@ -6022,16 +6022,17 @@ struct TexSubImage2D { type = _type; pixels_shm_id = _pixels_shm_id; pixels_shm_offset = _pixels_shm_offset; + internal = _internal; } void* Set( void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset, GLsizei _width, GLsizei _height, GLenum _format, GLenum _type, - uint32 _pixels_shm_id, uint32 _pixels_shm_offset) { + uint32 _pixels_shm_id, uint32 _pixels_shm_offset, GLboolean _internal) { static_cast<ValueType*>( cmd)->Init( _target, _level, _xoffset, _yoffset, _width, _height, _format, - _type, _pixels_shm_id, _pixels_shm_offset); + _type, _pixels_shm_id, _pixels_shm_offset, _internal); return NextCmdAddress<ValueType>(cmd); } @@ -6046,10 +6047,11 @@ struct TexSubImage2D { uint32 type; uint32 pixels_shm_id; uint32 pixels_shm_offset; + uint32 internal; }; -COMPILE_ASSERT(sizeof(TexSubImage2D) == 44, - Sizeof_TexSubImage2D_is_not_44); +COMPILE_ASSERT(sizeof(TexSubImage2D) == 48, + Sizeof_TexSubImage2D_is_not_48); COMPILE_ASSERT(offsetof(TexSubImage2D, header) == 0, OffsetOf_TexSubImage2D_header_not_0); COMPILE_ASSERT(offsetof(TexSubImage2D, target) == 4, @@ -6072,6 +6074,8 @@ COMPILE_ASSERT(offsetof(TexSubImage2D, pixels_shm_id) == 36, OffsetOf_TexSubImage2D_pixels_shm_id_not_36); COMPILE_ASSERT(offsetof(TexSubImage2D, pixels_shm_offset) == 40, OffsetOf_TexSubImage2D_pixels_shm_offset_not_40); +COMPILE_ASSERT(offsetof(TexSubImage2D, internal) == 44, + OffsetOf_TexSubImage2D_internal_not_44); struct TexSubImage2DImmediate { typedef TexSubImage2DImmediate ValueType; @@ -6090,8 +6094,9 @@ struct TexSubImage2DImmediate { void Init( GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset, - GLsizei _width, GLsizei _height, GLenum _format, GLenum _type) { - uint32 total_size = 0; // TODO(gman): get correct size + GLsizei _width, GLsizei _height, GLenum _format, GLenum _type, + GLboolean _internal) { + uint32 total_size = 0; // TODO(gman): get correct size. SetHeader(total_size); target = _target; level = _level; @@ -6101,16 +6106,18 @@ struct TexSubImage2DImmediate { height = _height; format = _format; type = _type; + internal = _internal; } void* Set( void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset, - GLsizei _width, GLsizei _height, GLenum _format, GLenum _type) { - uint32 total_size = 0; // TODO(gman): get correct size + GLsizei _width, GLsizei _height, GLenum _format, GLenum _type, + GLboolean _internal) { + uint32 total_size = 0; // TODO(gman): get correct size. static_cast<ValueType*>( cmd)->Init( _target, _level, _xoffset, _yoffset, _width, _height, _format, - _type); + _type, _internal); return NextImmediateCmdAddressTotalSize<ValueType>(cmd, total_size); } @@ -6123,10 +6130,11 @@ struct TexSubImage2DImmediate { int32 height; uint32 format; uint32 type; + uint32 internal; }; -COMPILE_ASSERT(sizeof(TexSubImage2DImmediate) == 36, - Sizeof_TexSubImage2DImmediate_is_not_36); +COMPILE_ASSERT(sizeof(TexSubImage2DImmediate) == 40, + Sizeof_TexSubImage2DImmediate_is_not_40); COMPILE_ASSERT(offsetof(TexSubImage2DImmediate, header) == 0, OffsetOf_TexSubImage2DImmediate_header_not_0); COMPILE_ASSERT(offsetof(TexSubImage2DImmediate, target) == 4, @@ -6145,6 +6153,8 @@ COMPILE_ASSERT(offsetof(TexSubImage2DImmediate, format) == 28, OffsetOf_TexSubImage2DImmediate_format_not_28); COMPILE_ASSERT(offsetof(TexSubImage2DImmediate, type) == 32, OffsetOf_TexSubImage2DImmediate_type_not_32); +COMPILE_ASSERT(offsetof(TexSubImage2DImmediate, internal) == 36, + OffsetOf_TexSubImage2DImmediate_internal_not_36); struct Uniform1f { typedef Uniform1f 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 a69078a..77660e2 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h @@ -2221,7 +2221,8 @@ TEST(GLES2FormatTest, TexSubImage2D) { static_cast<GLenum>(17), static_cast<GLenum>(18), static_cast<uint32>(19), - static_cast<uint32>(20)); + static_cast<uint32>(20), + static_cast<GLboolean>(21)); EXPECT_EQ(static_cast<uint32>(TexSubImage2D::kCmdId), cmd.header.command); EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); @@ -2237,6 +2238,7 @@ TEST(GLES2FormatTest, TexSubImage2D) { EXPECT_EQ(static_cast<GLenum>(18), cmd.type); EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id); EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset); + EXPECT_EQ(static_cast<GLboolean>(21), cmd.internal); } // TODO(gman): Implement test for TexSubImage2DImmediate diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index a1eab92..3b6990d 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -1467,6 +1467,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, const Validators* validators_; FeatureInfo* feature_info_; + // This indicates all the following texSubImage2D calls that are part of the + // failed texImage2D call should be ignored. + bool tex_image_2d_failed_; + DISALLOW_COPY_AND_ASSIGN(GLES2DecoderImpl); }; @@ -1789,7 +1793,8 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) current_decoder_error_(error::kNoError), use_shader_translator_(true), validators_(group_->feature_info()->validators()), - feature_info_(group_->feature_info()) { + feature_info_(group_->feature_info()), + tex_image_2d_failed_(false) { attrib_0_value_.v[0] = 0.0f; attrib_0_value_.v[1] = 0.0f; attrib_0_value_.v[2] = 0.0f; @@ -5565,12 +5570,14 @@ error::Error GLES2DecoderImpl::DoTexImage2D( if (error == GL_NO_ERROR) { texture_manager()->SetLevelInfo(feature_info_, info, target, level, internal_format, width, height, 1, border, format, type); + tex_image_2d_failed_ = false; } return error::kNoError; } error::Error GLES2DecoderImpl::HandleTexImage2D( uint32 immediate_data_size, const gles2::TexImage2D& c) { + tex_image_2d_failed_ = true; GLenum target = static_cast<GLenum>(c.target); GLint level = static_cast<GLint>(c.level); GLint internal_format = static_cast<GLint>(c.internalformat); @@ -5881,6 +5888,104 @@ void GLES2DecoderImpl::DoTexSubImage2D( target, level, xoffset, yoffset, width, height, format, type, data); } +error::Error GLES2DecoderImpl::HandleTexSubImage2D( + uint32 immediate_data_size, const gles2::TexSubImage2D& c) { + GLboolean internal = static_cast<GLboolean>(c.internal); + if (internal == GL_TRUE && tex_image_2d_failed_) + return error::kNoError; + + GLenum target = static_cast<GLenum>(c.target); + GLint level = static_cast<GLint>(c.level); + GLint xoffset = static_cast<GLint>(c.xoffset); + GLint yoffset = static_cast<GLint>(c.yoffset); + GLsizei width = static_cast<GLsizei>(c.width); + GLsizei height = static_cast<GLsizei>(c.height); + GLenum format = static_cast<GLenum>(c.format); + GLenum type = static_cast<GLenum>(c.type); + uint32 data_size; + if (!GLES2Util::ComputeImageDataSize( + width, height, format, type, unpack_alignment_, &data_size)) { + return error::kOutOfBounds; + } + const void* pixels = GetSharedMemoryAs<const void*>( + c.pixels_shm_id, c.pixels_shm_offset, data_size); + if (!validators_->texture_target.IsValid(target)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); + return error::kNoError; + } + if (width < 0) { + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); + return error::kNoError; + } + if (height < 0) { + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); + return error::kNoError; + } + if (!validators_->texture_format.IsValid(format)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); + return error::kNoError; + } + if (!validators_->pixel_type.IsValid(type)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); + return error::kNoError; + } + if (pixels == NULL) { + return error::kOutOfBounds; + } + DoTexSubImage2D( + target, level, xoffset, yoffset, width, height, format, type, pixels); + return error::kNoError; +} + +error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( + uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) { + GLboolean internal = static_cast<GLboolean>(c.internal); + if (internal == GL_TRUE && tex_image_2d_failed_) + return error::kNoError; + + GLenum target = static_cast<GLenum>(c.target); + GLint level = static_cast<GLint>(c.level); + GLint xoffset = static_cast<GLint>(c.xoffset); + GLint yoffset = static_cast<GLint>(c.yoffset); + GLsizei width = static_cast<GLsizei>(c.width); + GLsizei height = static_cast<GLsizei>(c.height); + GLenum format = static_cast<GLenum>(c.format); + GLenum type = static_cast<GLenum>(c.type); + uint32 data_size; + if (!GLES2Util::ComputeImageDataSize( + width, height, format, type, unpack_alignment_, &data_size)) { + return error::kOutOfBounds; + } + const void* pixels = GetImmediateDataAs<const void*>( + c, data_size, immediate_data_size); + if (!validators_->texture_target.IsValid(target)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); + return error::kNoError; + } + if (width < 0) { + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); + return error::kNoError; + } + if (height < 0) { + SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); + return error::kNoError; + } + if (!validators_->texture_format.IsValid(format)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); + return error::kNoError; + } + if (!validators_->pixel_type.IsValid(type)) { + SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); + return error::kNoError; + } + if (pixels == NULL) { + return error::kOutOfBounds; + } + DoTexSubImage2D( + target, level, xoffset, yoffset, width, height, format, type, pixels); + return error::kNoError; +} + error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv( uint32 immediate_data_size, const gles2::GetVertexAttribPointerv& c) { GLuint index = static_cast<GLuint>(c.index); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index 7ac471a..2ae8a03 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -1762,96 +1762,6 @@ error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( return error::kNoError; } -error::Error GLES2DecoderImpl::HandleTexSubImage2D( - uint32 immediate_data_size, const gles2::TexSubImage2D& c) { - GLenum target = static_cast<GLenum>(c.target); - GLint level = static_cast<GLint>(c.level); - GLint xoffset = static_cast<GLint>(c.xoffset); - GLint yoffset = static_cast<GLint>(c.yoffset); - GLsizei width = static_cast<GLsizei>(c.width); - GLsizei height = static_cast<GLsizei>(c.height); - GLenum format = static_cast<GLenum>(c.format); - GLenum type = static_cast<GLenum>(c.type); - uint32 data_size; - if (!GLES2Util::ComputeImageDataSize( - width, height, format, type, unpack_alignment_, &data_size)) { - return error::kOutOfBounds; - } - const void* pixels = GetSharedMemoryAs<const void*>( - c.pixels_shm_id, c.pixels_shm_offset, data_size); - if (!validators_->texture_target.IsValid(target)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); - return error::kNoError; - } - if (width < 0) { - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); - return error::kNoError; - } - if (height < 0) { - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); - return error::kNoError; - } - if (!validators_->texture_format.IsValid(format)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); - return error::kNoError; - } - if (!validators_->pixel_type.IsValid(type)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); - return error::kNoError; - } - if (pixels == NULL) { - return error::kOutOfBounds; - } - DoTexSubImage2D( - target, level, xoffset, yoffset, width, height, format, type, pixels); - return error::kNoError; -} - -error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( - uint32 immediate_data_size, const gles2::TexSubImage2DImmediate& c) { - GLenum target = static_cast<GLenum>(c.target); - GLint level = static_cast<GLint>(c.level); - GLint xoffset = static_cast<GLint>(c.xoffset); - GLint yoffset = static_cast<GLint>(c.yoffset); - GLsizei width = static_cast<GLsizei>(c.width); - GLsizei height = static_cast<GLsizei>(c.height); - GLenum format = static_cast<GLenum>(c.format); - GLenum type = static_cast<GLenum>(c.type); - uint32 data_size; - if (!GLES2Util::ComputeImageDataSize( - width, height, format, type, unpack_alignment_, &data_size)) { - return error::kOutOfBounds; - } - const void* pixels = GetImmediateDataAs<const void*>( - c, data_size, immediate_data_size); - if (!validators_->texture_target.IsValid(target)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); - return error::kNoError; - } - if (width < 0) { - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: width < 0"); - return error::kNoError; - } - if (height < 0) { - SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); - return error::kNoError; - } - if (!validators_->texture_format.IsValid(format)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); - return error::kNoError; - } - if (!validators_->pixel_type.IsValid(type)) { - SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); - return error::kNoError; - } - if (pixels == NULL) { - return error::kOutOfBounds; - } - DoTexSubImage2D( - target, level, xoffset, yoffset, width, height, format, type, pixels); - return error::kNoError; -} - error::Error GLES2DecoderImpl::HandleUniform1f( uint32 immediate_data_size, const gles2::Uniform1f& c) { GLint location = static_cast<GLint>(c.location); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index 99b41de..49968a3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -2394,7 +2394,7 @@ TEST_F(GLES2DecoderTest, TexSubImage2DValidArgs) { .RetiresOnSaturation(); TexSubImage2D cmd; cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_NO_ERROR, GetGLError()); } @@ -2408,54 +2408,55 @@ TEST_F(GLES2DecoderTest, TexSubImage2DBadArgs) { 0, 0); TexSubImage2D cmd; cmd.Init(GL_TEXTURE0, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_TRUE, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_INT, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, -1, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 1, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, -1, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 1, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth + 1, kHeight, GL_RGBA, - GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); + GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight + 1, GL_RGBA, - GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset); + GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, - kSharedMemoryId, kSharedMemoryOffset); + kSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, - GL_UNSIGNED_SHORT_4_4_4_4, kSharedMemoryId, kSharedMemoryOffset); + GL_UNSIGNED_SHORT_4_4_4_4, kSharedMemoryId, kSharedMemoryOffset, + GL_FALSE); EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kInvalidSharedMemoryId, kSharedMemoryOffset); + kInvalidSharedMemoryId, kSharedMemoryOffset, GL_FALSE); EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, - kSharedMemoryId, kInvalidSharedMemoryOffset); + kSharedMemoryId, kInvalidSharedMemoryOffset, GL_FALSE); EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); } |