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 |