Index: gpu/command_buffer/client/gles2_implementation_unittest.cc |
=================================================================== |
--- gpu/command_buffer/client/gles2_implementation_unittest.cc (revision 52147) |
+++ gpu/command_buffer/client/gles2_implementation_unittest.cc (working copy) |
@@ -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 @@ |
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 @@ |
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 |