diff options
| author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 01:43:00 +0000 |
|---|---|---|
| committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 01:43:00 +0000 |
| commit | 8cd62f61b53e532b829b986326755404bbcaf6ad (patch) | |
| tree | 4337cfb576348ecca0bb1398741189e602f43ad8 /gpu/command_buffer/client/gles2_implementation_unittest.cc | |
| parent | fc0d0378566936f09ead042d19b8031aebea0984 (diff) | |
| download | chromium_src-8cd62f61b53e532b829b986326755404bbcaf6ad.zip chromium_src-8cd62f61b53e532b829b986326755404bbcaf6ad.tar.gz chromium_src-8cd62f61b53e532b829b986326755404bbcaf6ad.tar.bz2 | |
Adds MapBufferSubData and MapTexSubImage2D.
This is only the internal command buffer implementation.
Connecting these functions publicly to PPAPI or whatever
will happen separate from this CL.
It's not clear to me where to put GL_READ_ONLY and GL_WRITE_ONLY
Probably the same place we expose these 2 functions to the public.
TEST=unit test
BUG=none
Review URL: http://codereview.chromium.org/2956005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52263 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/client/gles2_implementation_unittest.cc')
| -rw-r--r-- | gpu/command_buffer/client/gles2_implementation_unittest.cc | 187 |
1 files changed, 186 insertions, 1 deletions
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc index 78a0682..a251ee9 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc @@ -6,6 +6,7 @@ #include "gpu/command_buffer/client/gles2_implementation.h" #include "gpu/command_buffer/common/command_buffer.h" +#include "gpu/GLES2/gles2_command_buffer.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gmock/include/gmock/gmock.h" @@ -636,7 +637,7 @@ TEST_F(GLES2ImplementationTest, ReservedIds) { Cmds expected; expected.get.Init(kTransferBufferId, 0); - // One call to flush to way for GetError + // One call to flush to wait for GetError EXPECT_CALL(*command_buffer_, OnFlush(_)) .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) .RetiresOnSaturation(); @@ -689,6 +690,190 @@ TEST_F(GLES2ImplementationTest, ReadPixels2Reads) { EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); } +TEST_F(GLES2ImplementationTest, MapUnMapBufferSubData) { + struct Cmds { + BufferSubData buf; + cmd::SetToken set_token; + }; + const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; + const GLintptr kOffset = 15; + const GLsizeiptr kSize = 16; + + int32 token = 1; + uint32 offset = 0; + Cmds expected; + expected.buf.Init( + kTarget, kOffset, kSize, kTransferBufferId, offset); + expected.set_token.Init(token++); + + void* mem = gl_->MapBufferSubData(kTarget, kOffset, kSize, GL_WRITE_ONLY); + ASSERT_TRUE(mem != NULL); + gl_->UnmapBufferSubData(mem); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} + +TEST_F(GLES2ImplementationTest, MapUnMapBufferSubDataBadArgs) { + const GLenum kTarget = GL_ELEMENT_ARRAY_BUFFER; + const GLintptr kOffset = 15; + const GLsizeiptr kSize = 16; + + // Calls to flush to wait for GetError + EXPECT_CALL(*command_buffer_, OnFlush(_)) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .RetiresOnSaturation(); + + void* mem; + mem = gl_->MapBufferSubData(kTarget, -1, kSize, GL_WRITE_ONLY); + ASSERT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapBufferSubData(kTarget, kOffset, -1, GL_WRITE_ONLY); + ASSERT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapBufferSubData(kTarget, kOffset, kSize, GL_READ_ONLY); + ASSERT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), gl_->GetError()); + const char* kPtr = "something"; + gl_->UnmapBufferSubData(kPtr); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); +} + +TEST_F(GLES2ImplementationTest, MapUnMapTexSubImage2D) { + struct Cmds { + TexSubImage2D tex; + cmd::SetToken set_token; + }; + const GLint kLevel = 1; + const GLint kXOffset = 2; + const GLint kYOffset = 3; + const GLint kWidth = 4; + const GLint kHeight = 5; + const GLenum kFormat = GL_RGBA; + const GLenum kType = GL_UNSIGNED_BYTE; + + int32 token = 1; + uint32 offset = 0; + Cmds expected; + expected.tex.Init( + GL_TEXTURE_2D, kLevel, kXOffset, kYOffset, kWidth, kHeight, kFormat, + kType, kTransferBufferId, offset); + expected.set_token.Init(token++); + + void* mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + kXOffset, + kYOffset, + kWidth, + kHeight, + kFormat, + kType, + GL_WRITE_ONLY); + ASSERT_TRUE(mem != NULL); + gl_->UnmapTexSubImage2D(mem); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} + +TEST_F(GLES2ImplementationTest, MapUnMapTexSubImage2DBadArgs) { + const GLint kLevel = 1; + const GLint kXOffset = 2; + const GLint kYOffset = 3; + const GLint kWidth = 4; + const GLint kHeight = 5; + const GLenum kFormat = GL_RGBA; + const GLenum kType = GL_UNSIGNED_BYTE; + + // Calls to flush to wait for GetError + EXPECT_CALL(*command_buffer_, OnFlush(_)) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .WillOnce(SetMemory(GLuint(GL_NO_ERROR))) + .RetiresOnSaturation(); + + void* mem; + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + -1, + kXOffset, + kYOffset, + kWidth, + kHeight, + kFormat, + kType, + GL_WRITE_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + -1, + kYOffset, + kWidth, + kHeight, + kFormat, + kType, + GL_WRITE_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + kXOffset, + -1, + kWidth, + kHeight, + kFormat, + kType, + GL_WRITE_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + kXOffset, + kYOffset, + -1, + kHeight, + kFormat, + kType, + GL_WRITE_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + kXOffset, + kYOffset, + kWidth, + -1, + kFormat, + kType, + GL_WRITE_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); + mem = gl_->MapTexSubImage2D( + GL_TEXTURE_2D, + kLevel, + kXOffset, + kYOffset, + kWidth, + kHeight, + kFormat, + kType, + GL_READ_ONLY); + EXPECT_TRUE(mem == NULL); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_ENUM), gl_->GetError()); + const char* kPtr = "something"; + gl_->UnmapTexSubImage2D(kPtr); + EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); +} + } // namespace gles2 } // namespace gpu |
