| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
| 7 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 11 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
| 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 12 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
| 10 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" | 13 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" |
| 11 #include "gpu/command_buffer/service/gpu_switches.h" | 14 #include "gpu/command_buffer/service/gpu_switches.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 13 #include "ui/gl/gl_mock.h" | 16 #include "ui/gl/gl_mock.h" |
| 14 | 17 |
| 15 using ::gfx::MockGLInterface; | 18 using ::gfx::MockGLInterface; |
| 16 using ::testing::_; | 19 using ::testing::_; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 cmds::StencilThenCoverStrokePathInstancedCHROMIUM cmd; | 159 cmds::StencilThenCoverStrokePathInstancedCHROMIUM cmd; |
| 157 GLuint* paths = GetSharedMemoryAs<GLuint*>(); | 160 GLuint* paths = GetSharedMemoryAs<GLuint*>(); |
| 158 paths[0] = kClientPathId; | 161 paths[0] = kClientPathId; |
| 159 cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0, | 162 cmd.Init(1, GL_UNSIGNED_INT, shared_memory_id_, shared_memory_offset_, 0, |
| 160 0x80, 0x80, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, | 163 0x80, 0x80, GL_BOUNDING_BOX_OF_BOUNDING_BOXES_CHROMIUM, GL_NONE, 0, |
| 161 0); | 164 0); |
| 162 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 165 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 163 } | 166 } |
| 164 { | 167 { |
| 165 cmds::BindFragmentInputLocationCHROMIUMBucket cmd; | 168 cmds::BindFragmentInputLocationCHROMIUMBucket cmd; |
| 166 const uint32 kBucketId = 123; | 169 const uint32_t kBucketId = 123; |
| 167 const GLint kLocation = 2; | 170 const GLint kLocation = 2; |
| 168 const char* kName = "testing"; | 171 const char* kName = "testing"; |
| 169 SetBucketAsCString(kBucketId, kName); | 172 SetBucketAsCString(kBucketId, kName); |
| 170 cmd.Init(client_program_id_, kLocation, kBucketId); | 173 cmd.Init(client_program_id_, kLocation, kBucketId); |
| 171 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); | 174 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); |
| 172 } | 175 } |
| 173 { | 176 { |
| 174 cmds::ProgramPathFragmentInputGenCHROMIUM cmd; | 177 cmds::ProgramPathFragmentInputGenCHROMIUM cmd; |
| 175 const GLint kLocation = 2; | 178 const GLint kLocation = 2; |
| 176 cmd.Init(client_program_id_, kLocation, 0, GL_NONE, 0, 0); | 179 cmd.Init(client_program_id_, kLocation, 0, GL_NONE, 0, 0); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 void CallAllInstancedCommands(const InstancedTestcase& testcase) { | 244 void CallAllInstancedCommands(const InstancedTestcase& testcase) { |
| 242 // Note: for testcases that expect a call, We do not compare the 'paths' | 245 // Note: for testcases that expect a call, We do not compare the 'paths' |
| 243 // array during EXPECT_CALL due to it being void*. Instead, we rely on the | 246 // array during EXPECT_CALL due to it being void*. Instead, we rely on the |
| 244 // fact that if the path base was not added correctly, the paths wouldn't | 247 // fact that if the path base was not added correctly, the paths wouldn't |
| 245 // exists and the call wouldn't come through. | 248 // exists and the call wouldn't come through. |
| 246 | 249 |
| 247 bool copy_paths = false; // Paths are copied for each call that has paths, | 250 bool copy_paths = false; // Paths are copied for each call that has paths, |
| 248 // since the implementation modifies the memory | 251 // since the implementation modifies the memory |
| 249 // area. | 252 // area. |
| 250 void* paths = NULL; | 253 void* paths = NULL; |
| 251 uint32 paths_shm_id = 0; | 254 uint32_t paths_shm_id = 0; |
| 252 uint32 paths_shm_offset = 0; | 255 uint32_t paths_shm_offset = 0; |
| 253 GLfloat* transforms = NULL; | 256 GLfloat* transforms = NULL; |
| 254 uint32 transforms_shm_id = 0; | 257 uint32_t transforms_shm_id = 0; |
| 255 uint32 transforms_shm_offset = 0; | 258 uint32_t transforms_shm_offset = 0; |
| 256 | 259 |
| 257 if (testcase.transform_values) { | 260 if (testcase.transform_values) { |
| 258 transforms = GetSharedMemoryAs<GLfloat*>(); | 261 transforms = GetSharedMemoryAs<GLfloat*>(); |
| 259 transforms_shm_id = shared_memory_id_; | 262 transforms_shm_id = shared_memory_id_; |
| 260 transforms_shm_offset = shared_memory_offset_; | 263 transforms_shm_offset = shared_memory_offset_; |
| 261 memcpy(transforms, testcase.transform_values, | 264 memcpy(transforms, testcase.transform_values, |
| 262 testcase.sizeof_transform_values); | 265 testcase.sizeof_transform_values); |
| 263 } else { | 266 } else { |
| 264 DCHECK(testcase.sizeof_transform_values == 0); | 267 DCHECK(testcase.sizeof_transform_values == 0); |
| 265 } | 268 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 testcase.transform_type, transforms_shm_id, | 400 testcase.transform_type, transforms_shm_id, |
| 398 transforms_shm_offset); | 401 transforms_shm_offset); |
| 399 EXPECT_EQ(testcase.expected_error, ExecuteCmd(stcsi_cmd)); | 402 EXPECT_EQ(testcase.expected_error, ExecuteCmd(stcsi_cmd)); |
| 400 EXPECT_EQ(testcase.expected_gl_error, GetGLError()); | 403 EXPECT_EQ(testcase.expected_gl_error, GetGLError()); |
| 401 } | 404 } |
| 402 } | 405 } |
| 403 | 406 |
| 404 void CallAllInstancedCommandsWithInvalidSHM(GLsizei num_paths, | 407 void CallAllInstancedCommandsWithInvalidSHM(GLsizei num_paths, |
| 405 const GLuint* paths, | 408 const GLuint* paths, |
| 406 GLuint* paths_shm, | 409 GLuint* paths_shm, |
| 407 uint32 paths_shm_id, | 410 uint32_t paths_shm_id, |
| 408 uint32 paths_shm_offset, | 411 uint32_t paths_shm_offset, |
| 409 uint32 transforms_shm_id, | 412 uint32_t transforms_shm_id, |
| 410 uint32 transforms_shm_offset) { | 413 uint32_t transforms_shm_offset) { |
| 411 const GLuint kPathBase = 0; | 414 const GLuint kPathBase = 0; |
| 412 const GLenum kFillMode = GL_INVERT; | 415 const GLenum kFillMode = GL_INVERT; |
| 413 const GLuint kMask = 0x80; | 416 const GLuint kMask = 0x80; |
| 414 const GLuint kReference = 0xFF; | 417 const GLuint kReference = 0xFF; |
| 415 const GLuint kTransformType = GL_AFFINE_3D_CHROMIUM; | 418 const GLuint kTransformType = GL_AFFINE_3D_CHROMIUM; |
| 416 memcpy(paths_shm, paths, sizeof(GLuint) * num_paths); | 419 memcpy(paths_shm, paths, sizeof(GLuint) * num_paths); |
| 417 { | 420 { |
| 418 cmds::StencilFillPathInstancedCHROMIUM sfi_cmd; | 421 cmds::StencilFillPathInstancedCHROMIUM sfi_cmd; |
| 419 sfi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset, | 422 sfi_cmd.Init(num_paths, GL_UNSIGNED_INT, paths_shm_id, paths_shm_offset, |
| 420 kPathBase, kFillMode, kMask, kTransformType, | 423 kPathBase, kFillMode, kMask, kTransformType, |
| (...skipping 1210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1631 kPathsSHMIdInvalid = 1, | 1634 kPathsSHMIdInvalid = 1, |
| 1632 kPathsSHMOffsetInvalid = 1 << 1, | 1635 kPathsSHMOffsetInvalid = 1 << 1, |
| 1633 kTransformsHMIdInvalid = 1 << 2, | 1636 kTransformsHMIdInvalid = 1 << 2, |
| 1634 kTransformsHMOffsetInvalid = 1 << 3, | 1637 kTransformsHMOffsetInvalid = 1 << 3, |
| 1635 kFirstTestcase = kPathsSHMIdInvalid, | 1638 kFirstTestcase = kPathsSHMIdInvalid, |
| 1636 kLastTestcase = kTransformsHMOffsetInvalid | 1639 kLastTestcase = kTransformsHMOffsetInvalid |
| 1637 }; | 1640 }; |
| 1638 | 1641 |
| 1639 for (int testcase = kFirstTestcase; testcase <= kLastTestcase; ++testcase) { | 1642 for (int testcase = kFirstTestcase; testcase <= kLastTestcase; ++testcase) { |
| 1640 GLfloat* transforms = GetSharedMemoryAs<GLfloat*>(); | 1643 GLfloat* transforms = GetSharedMemoryAs<GLfloat*>(); |
| 1641 uint32 transforms_shm_id = shared_memory_id_; | 1644 uint32_t transforms_shm_id = shared_memory_id_; |
| 1642 uint32 transforms_shm_offset = shared_memory_offset_; | 1645 uint32_t transforms_shm_offset = shared_memory_offset_; |
| 1643 memcpy(transforms, transform_values, sizeof(transform_values)); | 1646 memcpy(transforms, transform_values, sizeof(transform_values)); |
| 1644 | 1647 |
| 1645 GLuint* paths = | 1648 GLuint* paths = |
| 1646 GetSharedMemoryAsWithOffset<GLuint*>(sizeof(transform_values)); | 1649 GetSharedMemoryAsWithOffset<GLuint*>(sizeof(transform_values)); |
| 1647 uint32 paths_shm_id = shared_memory_id_; | 1650 uint32_t paths_shm_id = shared_memory_id_; |
| 1648 uint32 paths_shm_offset = shared_memory_offset_ + sizeof(transform_values); | 1651 uint32_t paths_shm_offset = |
| 1652 shared_memory_offset_ + sizeof(transform_values); |
| 1649 | 1653 |
| 1650 if (testcase & kPathsSHMIdInvalid) { | 1654 if (testcase & kPathsSHMIdInvalid) { |
| 1651 paths_shm_id = kInvalidSharedMemoryId; | 1655 paths_shm_id = kInvalidSharedMemoryId; |
| 1652 } | 1656 } |
| 1653 if (testcase & kPathsSHMOffsetInvalid) { | 1657 if (testcase & kPathsSHMOffsetInvalid) { |
| 1654 paths_shm_offset = kInvalidSharedMemoryOffset; | 1658 paths_shm_offset = kInvalidSharedMemoryOffset; |
| 1655 } | 1659 } |
| 1656 if (testcase & kTransformsHMIdInvalid) { | 1660 if (testcase & kTransformsHMIdInvalid) { |
| 1657 transforms_shm_id = kInvalidSharedMemoryId; | 1661 transforms_shm_id = kInvalidSharedMemoryId; |
| 1658 } | 1662 } |
| 1659 if (testcase & kTransformsHMOffsetInvalid) { | 1663 if (testcase & kTransformsHMOffsetInvalid) { |
| 1660 transforms_shm_offset = kInvalidSharedMemoryOffset; | 1664 transforms_shm_offset = kInvalidSharedMemoryOffset; |
| 1661 } | 1665 } |
| 1662 SCOPED_TRACE(testing::Message() << "InstancedInvalidSHMValues testcase " | 1666 SCOPED_TRACE(testing::Message() << "InstancedInvalidSHMValues testcase " |
| 1663 << testcase); | 1667 << testcase); |
| 1664 CallAllInstancedCommandsWithInvalidSHM( | 1668 CallAllInstancedCommandsWithInvalidSHM( |
| 1665 kPathCount, kPaths, paths, paths_shm_id, paths_shm_offset, | 1669 kPathCount, kPaths, paths, paths_shm_id, paths_shm_offset, |
| 1666 transforms_shm_id, transforms_shm_offset); | 1670 transforms_shm_id, transforms_shm_offset); |
| 1667 } | 1671 } |
| 1668 } | 1672 } |
| 1669 | 1673 |
| 1670 TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, | 1674 TEST_P(GLES2DecoderTestWithCHROMIUMPathRendering, |
| 1671 BindFragmentInputLocationCHROMIUM) { | 1675 BindFragmentInputLocationCHROMIUM) { |
| 1672 const uint32 kBucketId = 123; | 1676 const uint32_t kBucketId = 123; |
| 1673 const GLint kLocation = 2; | 1677 const GLint kLocation = 2; |
| 1674 const char* kName = "testing"; | 1678 const char* kName = "testing"; |
| 1675 const char* kBadName1 = "gl_testing"; | 1679 const char* kBadName1 = "gl_testing"; |
| 1676 | 1680 |
| 1677 SetBucketAsCString(kBucketId, kName); | 1681 SetBucketAsCString(kBucketId, kName); |
| 1678 cmds::BindFragmentInputLocationCHROMIUMBucket cmd; | 1682 cmds::BindFragmentInputLocationCHROMIUMBucket cmd; |
| 1679 cmd.Init(client_program_id_, kLocation, kBucketId); | 1683 cmd.Init(client_program_id_, kLocation, kBucketId); |
| 1680 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1684 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1681 EXPECT_EQ(GL_NO_ERROR, GetGLError()); | 1685 EXPECT_EQ(GL_NO_ERROR, GetGLError()); |
| 1682 // Check negative location. | 1686 // Check negative location. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1699 SetBucketAsCString(kBucketId, kBadName1); | 1703 SetBucketAsCString(kBucketId, kBadName1); |
| 1700 cmd.Init(client_program_id_, kLocation, kBucketId); | 1704 cmd.Init(client_program_id_, kLocation, kBucketId); |
| 1701 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 1705 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
| 1702 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); | 1706 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError()); |
| 1703 } | 1707 } |
| 1704 | 1708 |
| 1705 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autog
en.h" | 1709 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_extensions_autog
en.h" |
| 1706 | 1710 |
| 1707 } // namespace gles2 | 1711 } // namespace gles2 |
| 1708 } // namespace gpu | 1712 } // namespace gpu |
| OLD | NEW |