| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/vertex_attrib_manager.h" | 5 #include "gpu/command_buffer/service/vertex_attrib_manager.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "gpu/command_buffer/service/feature_info.h" | 8 #include "gpu/command_buffer/service/feature_info.h" |
| 9 #include "gpu/command_buffer/service/test_helper.h" | 9 #include "gpu/command_buffer/service/test_helper.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 } | 42 } |
| 43 | 43 |
| 44 virtual void TearDown() { | 44 virtual void TearDown() { |
| 45 manager_ = NULL; | 45 manager_ = NULL; |
| 46 ::gfx::GLInterface::SetGLInterface(NULL); | 46 ::gfx::GLInterface::SetGLInterface(NULL); |
| 47 gl_.reset(); | 47 gl_.reset(); |
| 48 } | 48 } |
| 49 | 49 |
| 50 // Use StrictMock to make 100% sure we know how GL will be called. | 50 // Use StrictMock to make 100% sure we know how GL will be called. |
| 51 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; | 51 scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_; |
| 52 VertexAttribManager::Ref manager_; | 52 scoped_refptr<VertexAttribManager> manager_; |
| 53 }; | 53 }; |
| 54 | 54 |
| 55 // GCC requires these declarations, but MSVC requires they not be present | 55 // GCC requires these declarations, but MSVC requires they not be present |
| 56 #ifndef COMPILER_MSVC | 56 #ifndef COMPILER_MSVC |
| 57 const uint32 VertexAttribManagerTest::kNumVertexAttribs; | 57 const uint32 VertexAttribManagerTest::kNumVertexAttribs; |
| 58 #endif | 58 #endif |
| 59 | 59 |
| 60 TEST_F(VertexAttribManagerTest, Basic) { | 60 TEST_F(VertexAttribManagerTest, Basic) { |
| 61 EXPECT_TRUE(manager_->GetVertexAttribInfo(kNumVertexAttribs) == NULL); | 61 EXPECT_TRUE(manager_->GetVertexAttrib(kNumVertexAttribs) == NULL); |
| 62 EXPECT_FALSE(manager_->HaveFixedAttribs()); | 62 EXPECT_FALSE(manager_->HaveFixedAttribs()); |
| 63 | 63 |
| 64 const VertexAttribManager::VertexAttribInfoList& infos = | 64 const VertexAttribManager::VertexAttribInfoList& infos = |
| 65 manager_->GetEnabledVertexAttribInfos(); | 65 manager_->GetEnabledVertexAttribInfos(); |
| 66 EXPECT_EQ(0u, infos.size()); | 66 EXPECT_EQ(0u, infos.size()); |
| 67 | 67 |
| 68 for (uint32 ii = 0; ii < kNumVertexAttribs; ii += kNumVertexAttribs - 1) { | 68 for (uint32 ii = 0; ii < kNumVertexAttribs; ii += kNumVertexAttribs - 1) { |
| 69 VertexAttribManager::VertexAttribInfo* info = | 69 VertexAttrib* info = |
| 70 manager_->GetVertexAttribInfo(ii); | 70 manager_->GetVertexAttrib(ii); |
| 71 ASSERT_TRUE(info != NULL); | 71 ASSERT_TRUE(info != NULL); |
| 72 EXPECT_EQ(ii, info->index()); | 72 EXPECT_EQ(ii, info->index()); |
| 73 EXPECT_TRUE(info->buffer() == NULL); | 73 EXPECT_TRUE(info->buffer() == NULL); |
| 74 EXPECT_EQ(0, info->offset()); | 74 EXPECT_EQ(0, info->offset()); |
| 75 EXPECT_EQ(4, info->size()); | 75 EXPECT_EQ(4, info->size()); |
| 76 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT), info->type()); | 76 EXPECT_EQ(static_cast<GLenum>(GL_FLOAT), info->type()); |
| 77 EXPECT_EQ(GL_FALSE, info->normalized()); | 77 EXPECT_EQ(GL_FALSE, info->normalized()); |
| 78 EXPECT_EQ(0, info->gl_stride()); | 78 EXPECT_EQ(0, info->gl_stride()); |
| 79 EXPECT_FALSE(info->enabled()); | 79 EXPECT_FALSE(info->enabled()); |
| 80 manager_->Enable(ii, true); | 80 manager_->Enable(ii, true); |
| 81 EXPECT_TRUE(info->enabled()); | 81 EXPECT_TRUE(info->enabled()); |
| 82 } | 82 } |
| 83 } | 83 } |
| 84 | 84 |
| 85 TEST_F(VertexAttribManagerTest, Enable) { | 85 TEST_F(VertexAttribManagerTest, Enable) { |
| 86 const VertexAttribManager::VertexAttribInfoList& infos = | 86 const VertexAttribManager::VertexAttribInfoList& infos = |
| 87 manager_->GetEnabledVertexAttribInfos(); | 87 manager_->GetEnabledVertexAttribInfos(); |
| 88 | 88 |
| 89 VertexAttribManager::VertexAttribInfo* info1 = | 89 VertexAttrib* info1 = |
| 90 manager_->GetVertexAttribInfo(1); | 90 manager_->GetVertexAttrib(1); |
| 91 VertexAttribManager::VertexAttribInfo* info2 = | 91 VertexAttrib* info2 = |
| 92 manager_->GetVertexAttribInfo(3); | 92 manager_->GetVertexAttrib(3); |
| 93 | 93 |
| 94 manager_->Enable(1, true); | 94 manager_->Enable(1, true); |
| 95 ASSERT_EQ(1u, infos.size()); | 95 ASSERT_EQ(1u, infos.size()); |
| 96 EXPECT_TRUE(info1->enabled()); | 96 EXPECT_TRUE(info1->enabled()); |
| 97 manager_->Enable(3, true); | 97 manager_->Enable(3, true); |
| 98 ASSERT_EQ(2u, infos.size()); | 98 ASSERT_EQ(2u, infos.size()); |
| 99 EXPECT_TRUE(info2->enabled()); | 99 EXPECT_TRUE(info2->enabled()); |
| 100 | 100 |
| 101 manager_->Enable(1, false); | 101 manager_->Enable(1, false); |
| 102 ASSERT_EQ(1u, infos.size()); | 102 ASSERT_EQ(1u, infos.size()); |
| 103 EXPECT_FALSE(info1->enabled()); | 103 EXPECT_FALSE(info1->enabled()); |
| 104 | 104 |
| 105 manager_->Enable(3, false); | 105 manager_->Enable(3, false); |
| 106 ASSERT_EQ(0u, infos.size()); | 106 ASSERT_EQ(0u, infos.size()); |
| 107 EXPECT_FALSE(info2->enabled()); | 107 EXPECT_FALSE(info2->enabled()); |
| 108 } | 108 } |
| 109 | 109 |
| 110 TEST_F(VertexAttribManagerTest, SetAttribInfo) { | 110 TEST_F(VertexAttribManagerTest, SetAttribInfo) { |
| 111 BufferManager buffer_manager(NULL); | 111 BufferManager buffer_manager(NULL); |
| 112 buffer_manager.CreateBufferInfo(1, 2); | 112 buffer_manager.CreateBuffer(1, 2); |
| 113 BufferManager::BufferInfo* buffer = buffer_manager.GetBufferInfo(1); | 113 BufferManager::Buffer* buffer = buffer_manager.GetBuffer(1); |
| 114 ASSERT_TRUE(buffer != NULL); | 114 ASSERT_TRUE(buffer != NULL); |
| 115 | 115 |
| 116 VertexAttribManager::VertexAttribInfo* info = | 116 VertexAttrib* info = |
| 117 manager_->GetVertexAttribInfo(1); | 117 manager_->GetVertexAttrib(1); |
| 118 | 118 |
| 119 manager_->SetAttribInfo(1, buffer, 3, GL_SHORT, GL_TRUE, 32, 32, 4); | 119 manager_->SetAttribInfo(1, buffer, 3, GL_SHORT, GL_TRUE, 32, 32, 4); |
| 120 | 120 |
| 121 EXPECT_EQ(buffer, info->buffer()); | 121 EXPECT_EQ(buffer, info->buffer()); |
| 122 EXPECT_EQ(4, info->offset()); | 122 EXPECT_EQ(4, info->offset()); |
| 123 EXPECT_EQ(3, info->size()); | 123 EXPECT_EQ(3, info->size()); |
| 124 EXPECT_EQ(static_cast<GLenum>(GL_SHORT), info->type()); | 124 EXPECT_EQ(static_cast<GLenum>(GL_SHORT), info->type()); |
| 125 EXPECT_EQ(GL_TRUE, info->normalized()); | 125 EXPECT_EQ(GL_TRUE, info->normalized()); |
| 126 EXPECT_EQ(32, info->gl_stride()); | 126 EXPECT_EQ(32, info->gl_stride()); |
| 127 | 127 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 138 manager_->SetAttribInfo(3, NULL, 4, GL_FIXED, GL_FALSE, 0, 16, 0); | 138 manager_->SetAttribInfo(3, NULL, 4, GL_FIXED, GL_FALSE, 0, 16, 0); |
| 139 EXPECT_TRUE(manager_->HaveFixedAttribs()); | 139 EXPECT_TRUE(manager_->HaveFixedAttribs()); |
| 140 manager_->SetAttribInfo(1, NULL, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); | 140 manager_->SetAttribInfo(1, NULL, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); |
| 141 EXPECT_TRUE(manager_->HaveFixedAttribs()); | 141 EXPECT_TRUE(manager_->HaveFixedAttribs()); |
| 142 manager_->SetAttribInfo(3, NULL, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); | 142 manager_->SetAttribInfo(3, NULL, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); |
| 143 EXPECT_FALSE(manager_->HaveFixedAttribs()); | 143 EXPECT_FALSE(manager_->HaveFixedAttribs()); |
| 144 } | 144 } |
| 145 | 145 |
| 146 TEST_F(VertexAttribManagerTest, CanAccess) { | 146 TEST_F(VertexAttribManagerTest, CanAccess) { |
| 147 BufferManager buffer_manager(NULL); | 147 BufferManager buffer_manager(NULL); |
| 148 buffer_manager.CreateBufferInfo(1, 2); | 148 buffer_manager.CreateBuffer(1, 2); |
| 149 BufferManager::BufferInfo* buffer = buffer_manager.GetBufferInfo(1); | 149 BufferManager::Buffer* buffer = buffer_manager.GetBuffer(1); |
| 150 ASSERT_TRUE(buffer != NULL); | 150 ASSERT_TRUE(buffer != NULL); |
| 151 | 151 |
| 152 VertexAttribManager::VertexAttribInfo* info = | 152 VertexAttrib* info = |
| 153 manager_->GetVertexAttribInfo(1); | 153 manager_->GetVertexAttrib(1); |
| 154 | 154 |
| 155 EXPECT_TRUE(info->CanAccess(0)); | 155 EXPECT_TRUE(info->CanAccess(0)); |
| 156 manager_->Enable(1, true); | 156 manager_->Enable(1, true); |
| 157 EXPECT_FALSE(info->CanAccess(0)); | 157 EXPECT_FALSE(info->CanAccess(0)); |
| 158 | 158 |
| 159 manager_->SetAttribInfo(1, buffer, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); | 159 manager_->SetAttribInfo(1, buffer, 4, GL_FLOAT, GL_FALSE, 0, 16, 0); |
| 160 EXPECT_FALSE(info->CanAccess(0)); | 160 EXPECT_FALSE(info->CanAccess(0)); |
| 161 | 161 |
| 162 EXPECT_TRUE(buffer_manager.SetTarget(buffer, GL_ARRAY_BUFFER)); | 162 EXPECT_TRUE(buffer_manager.SetTarget(buffer, GL_ARRAY_BUFFER)); |
| 163 buffer_manager.SetInfo(buffer, 15, GL_STATIC_DRAW); | 163 buffer_manager.SetInfo(buffer, 15, GL_STATIC_DRAW); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 180 EXPECT_FALSE(info->CanAccess(1)); | 180 EXPECT_FALSE(info->CanAccess(1)); |
| 181 | 181 |
| 182 // The VertexAttribManager must be destroyed before the BufferManager | 182 // The VertexAttribManager must be destroyed before the BufferManager |
| 183 // so it releases its buffers. | 183 // so it releases its buffers. |
| 184 manager_ = NULL; | 184 manager_ = NULL; |
| 185 buffer_manager.Destroy(false); | 185 buffer_manager.Destroy(false); |
| 186 } | 186 } |
| 187 | 187 |
| 188 TEST_F(VertexAttribManagerTest, Unbind) { | 188 TEST_F(VertexAttribManagerTest, Unbind) { |
| 189 BufferManager buffer_manager(NULL); | 189 BufferManager buffer_manager(NULL); |
| 190 buffer_manager.CreateBufferInfo(1, 2); | 190 buffer_manager.CreateBuffer(1, 2); |
| 191 buffer_manager.CreateBufferInfo(3, 4); | 191 buffer_manager.CreateBuffer(3, 4); |
| 192 BufferManager::BufferInfo* buffer1 = buffer_manager.GetBufferInfo(1); | 192 BufferManager::Buffer* buffer1 = buffer_manager.GetBuffer(1); |
| 193 BufferManager::BufferInfo* buffer2 = buffer_manager.GetBufferInfo(3); | 193 BufferManager::Buffer* buffer2 = buffer_manager.GetBuffer(3); |
| 194 ASSERT_TRUE(buffer1 != NULL); | 194 ASSERT_TRUE(buffer1 != NULL); |
| 195 ASSERT_TRUE(buffer2 != NULL); | 195 ASSERT_TRUE(buffer2 != NULL); |
| 196 | 196 |
| 197 VertexAttribManager::VertexAttribInfo* info1 = | 197 VertexAttrib* info1 = |
| 198 manager_->GetVertexAttribInfo(1); | 198 manager_->GetVertexAttrib(1); |
| 199 VertexAttribManager::VertexAttribInfo* info3 = | 199 VertexAttrib* info3 = |
| 200 manager_->GetVertexAttribInfo(3); | 200 manager_->GetVertexAttrib(3); |
| 201 | 201 |
| 202 // Attach to 2 buffers. | 202 // Attach to 2 buffers. |
| 203 manager_->SetAttribInfo(1, buffer1, 3, GL_SHORT, GL_TRUE, 32, 32, 4); | 203 manager_->SetAttribInfo(1, buffer1, 3, GL_SHORT, GL_TRUE, 32, 32, 4); |
| 204 manager_->SetAttribInfo(3, buffer1, 3, GL_SHORT, GL_TRUE, 32, 32, 4); | 204 manager_->SetAttribInfo(3, buffer1, 3, GL_SHORT, GL_TRUE, 32, 32, 4); |
| 205 // Check they were attached. | 205 // Check they were attached. |
| 206 EXPECT_EQ(buffer1, info1->buffer()); | 206 EXPECT_EQ(buffer1, info1->buffer()); |
| 207 EXPECT_EQ(buffer1, info3->buffer()); | 207 EXPECT_EQ(buffer1, info3->buffer()); |
| 208 // Unbind unattached buffer. | 208 // Unbind unattached buffer. |
| 209 manager_->Unbind(buffer2); | 209 manager_->Unbind(buffer2); |
| 210 // Should be no-op. | 210 // Should be no-op. |
| 211 EXPECT_EQ(buffer1, info1->buffer()); | 211 EXPECT_EQ(buffer1, info1->buffer()); |
| 212 EXPECT_EQ(buffer1, info3->buffer()); | 212 EXPECT_EQ(buffer1, info3->buffer()); |
| 213 // Unbind buffer. | 213 // Unbind buffer. |
| 214 manager_->Unbind(buffer1); | 214 manager_->Unbind(buffer1); |
| 215 // Check they were detached | 215 // Check they were detached |
| 216 EXPECT_TRUE(NULL == info1->buffer()); | 216 EXPECT_TRUE(NULL == info1->buffer()); |
| 217 EXPECT_TRUE(NULL == info3->buffer()); | 217 EXPECT_TRUE(NULL == info3->buffer()); |
| 218 | 218 |
| 219 // The VertexAttribManager must be destroyed before the BufferManager | 219 // The VertexAttribManager must be destroyed before the BufferManager |
| 220 // so it releases its buffers. | 220 // so it releases its buffers. |
| 221 manager_ = NULL; | 221 manager_ = NULL; |
| 222 buffer_manager.Destroy(false); | 222 buffer_manager.Destroy(false); |
| 223 } | 223 } |
| 224 | 224 |
| 225 } // namespace gles2 | 225 } // namespace gles2 |
| 226 } // namespace gpu | 226 } // namespace gpu |
| 227 | 227 |
| 228 | 228 |
| OLD | NEW |