Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc

Issue 303543005: Fix a bug in gpu_unittests mock expectations for VAO. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/gles2_cmd_decoder_unittest_base.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 18 matching lines...) Expand all
29 using ::testing::InSequence; 29 using ::testing::InSequence;
30 using ::testing::MatcherCast; 30 using ::testing::MatcherCast;
31 using ::testing::Pointee; 31 using ::testing::Pointee;
32 using ::testing::Return; 32 using ::testing::Return;
33 using ::testing::SetArrayArgument; 33 using ::testing::SetArrayArgument;
34 using ::testing::SetArgPointee; 34 using ::testing::SetArgPointee;
35 using ::testing::SetArgumentPointee; 35 using ::testing::SetArgumentPointee;
36 using ::testing::StrEq; 36 using ::testing::StrEq;
37 using ::testing::StrictMock; 37 using ::testing::StrictMock;
38 38
39 namespace {
40
41 void NormalizeInitState(gpu::gles2::GLES2DecoderTestBase::InitState* init) {
42 CHECK(init);
43 const char* kVAOExtensions[] = {
44 "GL_OES_vertex_array_object",
45 "GL_ARB_vertex_array_object",
46 "GL_APPLE_vertex_array_object"
47 };
48 bool contains_vao_extension = false;
49 for (size_t ii = 0; ii < arraysize(kVAOExtensions); ++ii) {
50 if (init->extensions.find(kVAOExtensions[ii]) != std::string::npos) {
51 contains_vao_extension = true;
52 break;
53 }
54 }
55 if (init->use_native_vao) {
56 if (contains_vao_extension)
57 return;
58 if (!init->extensions.empty())
59 init->extensions += " ";
60 if (StartsWithASCII(init->gl_version, "opengl es", false)) {
61 init->extensions += kVAOExtensions[0];
62 } else {
63 #if !defined(OS_MACOSX)
64 init->extensions += kVAOExtensions[1];
65 #else
66 init->extensions += kVAOExtensions[2];
67 #endif // OS_MACOSX
68 }
69 } else {
70 // Make sure we don't set up an invalid InitState.
71 CHECK(!contains_vao_extension);
72 }
73 }
74
75 } // namespace Anonymous
76
39 namespace gpu { 77 namespace gpu {
40 namespace gles2 { 78 namespace gles2 {
41 79
42 GLES2DecoderTestBase::GLES2DecoderTestBase() 80 GLES2DecoderTestBase::GLES2DecoderTestBase()
43 : surface_(NULL), 81 : surface_(NULL),
44 context_(NULL), 82 context_(NULL),
45 memory_tracker_(NULL), 83 memory_tracker_(NULL),
46 client_buffer_id_(100), 84 client_buffer_id_(100),
47 client_framebuffer_id_(101), 85 client_framebuffer_id_(101),
48 client_program_id_(102), 86 client_program_id_(102),
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } 125 }
88 126
89 GLES2DecoderTestBase::InitState::InitState() 127 GLES2DecoderTestBase::InitState::InitState()
90 : has_alpha(false), 128 : has_alpha(false),
91 has_depth(false), 129 has_depth(false),
92 has_stencil(false), 130 has_stencil(false),
93 request_alpha(false), 131 request_alpha(false),
94 request_depth(false), 132 request_depth(false),
95 request_stencil(false), 133 request_stencil(false),
96 bind_generates_resource(false), 134 bind_generates_resource(false),
97 lose_context_when_out_of_memory(false) { 135 lose_context_when_out_of_memory(false),
136 use_native_vao(true) {
98 } 137 }
99 138
100 void GLES2DecoderTestBase::InitDecoder(const InitState& init) { 139 void GLES2DecoderTestBase::InitDecoder(const InitState& init) {
101 InitDecoderWithCommandLine(init, NULL); 140 InitDecoderWithCommandLine(init, NULL);
102 } 141 }
103 142
104 void GLES2DecoderTestBase::InitDecoderWithCommandLine( 143 void GLES2DecoderTestBase::InitDecoderWithCommandLine(
105 const InitState& init, 144 const InitState& init,
106 const base::CommandLine* command_line) { 145 const base::CommandLine* command_line) {
146 InitState normalized_init = init;
147 NormalizeInitState(&normalized_init);
107 Framebuffer::ClearFramebufferCompleteComboMap(); 148 Framebuffer::ClearFramebufferCompleteComboMap();
108 149
109 gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress); 150 gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress);
110 gfx::GLSurface::InitializeOneOffWithMockBindingsForTests(); 151 gfx::GLSurface::InitializeOneOffWithMockBindingsForTests();
111 152
112 gl_.reset(new StrictMock<MockGLInterface>()); 153 gl_.reset(new StrictMock<MockGLInterface>());
113 ::gfx::MockGLInterface::SetGLInterface(gl_.get()); 154 ::gfx::MockGLInterface::SetGLInterface(gl_.get());
114 155
115 // Only create stream texture manager if extension is requested. 156 // Only create stream texture manager if extension is requested.
116 std::vector<std::string> list; 157 std::vector<std::string> list;
117 base::SplitString(init.extensions, ' ', &list); 158 base::SplitString(normalized_init.extensions, ' ', &list);
118 scoped_refptr<FeatureInfo> feature_info; 159 scoped_refptr<FeatureInfo> feature_info;
119 if (command_line) 160 if (command_line)
120 feature_info = new FeatureInfo(*command_line); 161 feature_info = new FeatureInfo(*command_line);
121 group_ = scoped_refptr<ContextGroup>( 162 group_ = scoped_refptr<ContextGroup>(
122 new ContextGroup(NULL, 163 new ContextGroup(NULL,
123 NULL, 164 NULL,
124 memory_tracker_, 165 memory_tracker_,
125 new ShaderTranslatorCache, 166 new ShaderTranslatorCache,
126 feature_info.get(), 167 feature_info.get(),
127 init.bind_generates_resource)); 168 normalized_init.bind_generates_resource));
128 bool use_default_textures = init.bind_generates_resource; 169 bool use_default_textures = normalized_init.bind_generates_resource;
129 170
130 InSequence sequence; 171 InSequence sequence;
131 172
132 surface_ = new gfx::GLSurfaceStub; 173 surface_ = new gfx::GLSurfaceStub;
133 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight)); 174 surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight));
134 175
135 // Context needs to be created before initializing ContextGroup, which will 176 // Context needs to be created before initializing ContextGroup, which will
136 // in turn initialize FeatureInfo, which needs a context to determine 177 // in turn initialize FeatureInfo, which needs a context to determine
137 // extension support. 178 // extension support.
138 context_ = new gfx::GLContextStubWithExtensions; 179 context_ = new gfx::GLContextStubWithExtensions;
139 context_->AddExtensionsString(init.extensions.c_str()); 180 context_->AddExtensionsString(normalized_init.extensions.c_str());
140 context_->SetGLVersionString(init.gl_version.c_str()); 181 context_->SetGLVersionString(normalized_init.gl_version.c_str());
141 182
142 context_->MakeCurrent(surface_.get()); 183 context_->MakeCurrent(surface_.get());
143 gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_); 184 gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_);
144 185
145 TestHelper::SetupContextGroupInitExpectations(gl_.get(), 186 TestHelper::SetupContextGroupInitExpectations(
146 DisallowedFeatures(), 187 gl_.get(),
147 init.extensions.c_str(), 188 DisallowedFeatures(),
148 init.gl_version.c_str(), 189 normalized_init.extensions.c_str(),
149 init.bind_generates_resource); 190 normalized_init.gl_version.c_str(),
191 normalized_init.bind_generates_resource);
150 192
151 // We initialize the ContextGroup with a MockGLES2Decoder so that 193 // We initialize the ContextGroup with a MockGLES2Decoder so that
152 // we can use the ContextGroup to figure out how the real GLES2Decoder 194 // we can use the ContextGroup to figure out how the real GLES2Decoder
153 // will initialize itself. 195 // will initialize itself.
154 mock_decoder_.reset(new MockGLES2Decoder()); 196 mock_decoder_.reset(new MockGLES2Decoder());
155 EXPECT_TRUE( 197 EXPECT_TRUE(
156 group_->Initialize(mock_decoder_.get(), DisallowedFeatures())); 198 group_->Initialize(mock_decoder_.get(), DisallowedFeatures()));
157 199
158 if (group_->feature_info()->feature_flags().native_vertex_array_object) { 200 if (group_->feature_info()->feature_flags().native_vertex_array_object) {
159 EXPECT_CALL(*gl_, GenVertexArraysOES(1, _)).Times(1).RetiresOnSaturation(); 201 EXPECT_CALL(*gl_, GenVertexArraysOES(1, _))
202 .WillOnce(SetArgumentPointee<1>(kServiceVertexArrayId))
203 .RetiresOnSaturation();
160 EXPECT_CALL(*gl_, BindVertexArrayOES(_)).Times(1).RetiresOnSaturation(); 204 EXPECT_CALL(*gl_, BindVertexArrayOES(_)).Times(1).RetiresOnSaturation();
161 } 205 }
162 206
163 if (group_->feature_info()->workarounds().init_vertex_attributes) 207 if (group_->feature_info()->workarounds().init_vertex_attributes)
164 AddExpectationsForVertexAttribManager(); 208 AddExpectationsForVertexAttribManager();
165 209
166 AddExpectationsForBindVertexArrayOES(); 210 AddExpectationsForBindVertexArrayOES();
167 211
168 EXPECT_CALL(*gl_, EnableVertexAttribArray(0)) 212 EXPECT_CALL(*gl_, EnableVertexAttribArray(0))
169 .Times(1) 213 .Times(1)
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 .RetiresOnSaturation(); 276 .RetiresOnSaturation();
233 } 277 }
234 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)) 278 EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
235 .Times(1) 279 .Times(1)
236 .RetiresOnSaturation(); 280 .RetiresOnSaturation();
237 281
238 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0)) 282 EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, 0))
239 .Times(1) 283 .Times(1)
240 .RetiresOnSaturation(); 284 .RetiresOnSaturation();
241 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _)) 285 EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
242 .WillOnce(SetArgumentPointee<1>(init.has_alpha ? 8 : 0)) 286 .WillOnce(SetArgumentPointee<1>(normalized_init.has_alpha ? 8 : 0))
243 .RetiresOnSaturation(); 287 .RetiresOnSaturation();
244 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _)) 288 EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
245 .WillOnce(SetArgumentPointee<1>(init.has_depth ? 24 : 0)) 289 .WillOnce(SetArgumentPointee<1>(normalized_init.has_depth ? 24 : 0))
246 .RetiresOnSaturation(); 290 .RetiresOnSaturation();
247 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _)) 291 EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
248 .WillOnce(SetArgumentPointee<1>(init.has_stencil ? 8 : 0)) 292 .WillOnce(SetArgumentPointee<1>(normalized_init.has_stencil ? 8 : 0))
249 .RetiresOnSaturation(); 293 .RetiresOnSaturation();
250 294
251 EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE)) 295 EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE))
252 .Times(1) 296 .Times(1)
253 .RetiresOnSaturation(); 297 .RetiresOnSaturation();
254 298
255 EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE)) 299 EXPECT_CALL(*gl_, Enable(GL_POINT_SPRITE))
256 .Times(1) 300 .Times(1)
257 .RetiresOnSaturation(); 301 .RetiresOnSaturation();
258 302
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 scoped_refptr<gpu::Buffer> buffer = 342 scoped_refptr<gpu::Buffer> buffer =
299 engine_->GetSharedMemoryBuffer(kSharedMemoryId); 343 engine_->GetSharedMemoryBuffer(kSharedMemoryId);
300 shared_memory_offset_ = kSharedMemoryOffset; 344 shared_memory_offset_ = kSharedMemoryOffset;
301 shared_memory_address_ = 345 shared_memory_address_ =
302 reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_; 346 reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_;
303 shared_memory_id_ = kSharedMemoryId; 347 shared_memory_id_ = kSharedMemoryId;
304 shared_memory_base_ = buffer->memory(); 348 shared_memory_base_ = buffer->memory();
305 349
306 static const int32 kLoseContextWhenOutOfMemory = 0x10003; 350 static const int32 kLoseContextWhenOutOfMemory = 0x10003;
307 351
308 int32 attributes[] = {EGL_ALPHA_SIZE, 352 int32 attributes[] = {
309 init.request_alpha ? 8 : 0, 353 EGL_ALPHA_SIZE,
310 EGL_DEPTH_SIZE, 354 normalized_init.request_alpha ? 8 : 0,
311 init.request_depth ? 24 : 0, 355 EGL_DEPTH_SIZE,
312 EGL_STENCIL_SIZE, 356 normalized_init.request_depth ? 24 : 0,
313 init.request_stencil ? 8 : 0, 357 EGL_STENCIL_SIZE,
314 kLoseContextWhenOutOfMemory, 358 normalized_init.request_stencil ? 8 : 0,
315 init.lose_context_when_out_of_memory ? 1 : 0, }; 359 kLoseContextWhenOutOfMemory,
360 normalized_init.lose_context_when_out_of_memory ? 1 : 0, };
316 std::vector<int32> attribs(attributes, attributes + arraysize(attributes)); 361 std::vector<int32> attribs(attributes, attributes + arraysize(attributes));
317 362
318 decoder_.reset(GLES2Decoder::Create(group_.get())); 363 decoder_.reset(GLES2Decoder::Create(group_.get()));
319 decoder_->SetIgnoreCachedStateForTest(ignore_cached_state_for_test_); 364 decoder_->SetIgnoreCachedStateForTest(ignore_cached_state_for_test_);
320 decoder_->GetLogger()->set_log_synthesized_gl_errors(false); 365 decoder_->GetLogger()->set_log_synthesized_gl_errors(false);
321 decoder_->Initialize(surface_, 366 decoder_->Initialize(surface_,
322 context_, 367 context_,
323 false, 368 false,
324 surface_->GetSize(), 369 surface_->GetSize(),
325 DisallowedFeatures(), 370 DisallowedFeatures(),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 402
358 void GLES2DecoderTestBase::ResetDecoder() { 403 void GLES2DecoderTestBase::ResetDecoder() {
359 if (!decoder_.get()) 404 if (!decoder_.get())
360 return; 405 return;
361 // All Tests should have read all their GLErrors before getting here. 406 // All Tests should have read all their GLErrors before getting here.
362 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 407 EXPECT_EQ(GL_NO_ERROR, GetGLError());
363 408
364 EXPECT_CALL(*gl_, DeleteBuffersARB(1, _)) 409 EXPECT_CALL(*gl_, DeleteBuffersARB(1, _))
365 .Times(2) 410 .Times(2)
366 .RetiresOnSaturation(); 411 .RetiresOnSaturation();
412 if (group_->feature_info()->feature_flags().native_vertex_array_object) {
413 EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, Pointee(kServiceVertexArrayId)))
414 .Times(1)
415 .RetiresOnSaturation();
416 }
367 417
368 decoder_->EndDecoding(); 418 decoder_->EndDecoding();
369 decoder_->Destroy(true); 419 decoder_->Destroy(true);
370 decoder_.reset(); 420 decoder_.reset();
371 group_->Destroy(mock_decoder_.get(), false); 421 group_->Destroy(mock_decoder_.get(), false);
372 engine_.reset(); 422 engine_.reset();
373 ::gfx::MockGLInterface::SetGLInterface(NULL); 423 ::gfx::MockGLInterface::SetGLInterface(NULL);
374 gl_.reset(); 424 gl_.reset();
375 } 425 }
376 426
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 SetupDefaultProgram(); 1609 SetupDefaultProgram();
1560 } 1610 }
1561 1611
1562 // Include the auto-generated part of this file. We split this because it means 1612 // Include the auto-generated part of this file. We split this because it means
1563 // we can easily edit the non-auto generated parts right here in this file 1613 // we can easily edit the non-auto generated parts right here in this file
1564 // instead of having to edit some template or the code generator. 1614 // instead of having to edit some template or the code generator.
1565 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h" 1615 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h"
1566 1616
1567 } // namespace gles2 1617 } // namespace gles2
1568 } // namespace gpu 1618 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698