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/memory_program_cache.h" | 5 #include "gpu/command_buffer/service/memory_program_cache.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 8 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
9 #include "gpu/command_buffer/service/gl_utils.h" | 9 #include "gpu/command_buffer/service/gl_utils.h" |
10 #include "gpu/command_buffer/service/gpu_service_test.h" | 10 #include "gpu/command_buffer/service/gpu_service_test.h" |
11 #include "gpu/command_buffer/service/shader_manager.h" | 11 #include "gpu/command_buffer/service/shader_manager.h" |
12 #include "gpu/command_buffer/service/shader_translator.h" | 12 #include "gpu/command_buffer/service/shader_translator.h" |
13 #include "gpu/command_buffer/service/test_helper.h" | 13 #include "gpu/command_buffer/service/test_helper.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "ui/gl/gl_bindings.h" | 15 #include "ui/gl/gl_bindings.h" |
16 #include "ui/gl/gl_mock.h" | 16 #include "ui/gl/gl_mock.h" |
17 | 17 |
18 using ::testing::_; | 18 using ::testing::_; |
19 using ::testing::ElementsAreArray; | 19 using ::testing::ElementsAreArray; |
20 using ::testing::Invoke; | 20 using ::testing::Invoke; |
21 using ::testing::SetArgPointee; | 21 using ::testing::SetArgPointee; |
22 using ::testing::SetArrayArgument; | 22 using ::testing::SetArrayArgument; |
23 | 23 |
24 namespace { | |
25 typedef gpu::gles2::ShaderTranslator::VariableMap VariableMap; | |
26 } // anonymous namespace | |
27 | |
28 namespace gpu { | 24 namespace gpu { |
29 namespace gles2 { | 25 namespace gles2 { |
30 | 26 |
31 class ProgramBinaryEmulator { | 27 class ProgramBinaryEmulator { |
32 public: | 28 public: |
33 ProgramBinaryEmulator(GLsizei length, | 29 ProgramBinaryEmulator(GLsizei length, |
34 GLenum format, | 30 GLenum format, |
35 const char* binary) | 31 const char* binary) |
36 : length_(length), | 32 : length_(length), |
37 format_(format), | 33 format_(format), |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 | 94 |
99 vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId, | 95 vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId, |
100 kVertexShaderServiceId, | 96 kVertexShaderServiceId, |
101 GL_VERTEX_SHADER); | 97 GL_VERTEX_SHADER); |
102 fragment_shader_ = shader_manager_.CreateShader( | 98 fragment_shader_ = shader_manager_.CreateShader( |
103 kFragmentShaderClientId, | 99 kFragmentShaderClientId, |
104 kFragmentShaderServiceId, | 100 kFragmentShaderServiceId, |
105 GL_FRAGMENT_SHADER); | 101 GL_FRAGMENT_SHADER); |
106 ASSERT_TRUE(vertex_shader_ != NULL); | 102 ASSERT_TRUE(vertex_shader_ != NULL); |
107 ASSERT_TRUE(fragment_shader_ != NULL); | 103 ASSERT_TRUE(fragment_shader_ != NULL); |
108 typedef ShaderTranslatorInterface::VariableInfo VariableInfo; | 104 AttributeMap vertex_attrib_map; |
109 typedef ShaderTranslator::VariableMap VariableMap; | 105 UniformMap vertex_uniform_map; |
110 VariableMap vertex_attrib_map; | 106 VaryingMap vertex_varying_map; |
111 VariableMap vertex_uniform_map; | 107 AttributeMap fragment_attrib_map; |
112 VariableMap vertex_varying_map; | 108 UniformMap fragment_uniform_map; |
113 VariableMap fragment_attrib_map; | 109 VaryingMap fragment_varying_map; |
114 VariableMap fragment_uniform_map; | |
115 VariableMap fragment_varying_map; | |
116 | 110 |
117 vertex_attrib_map["a"] = VariableInfo(1, 34, SH_PRECISION_LOWP, 0, "a"); | 111 vertex_attrib_map["a"] = TestHelper::ConstructAttribute( |
118 vertex_uniform_map["a"] = VariableInfo(0, 10, SH_PRECISION_MEDIUMP, 1, "a"); | 112 GL_FLOAT_VEC2, 34, GL_LOW_FLOAT, false, "a"); |
119 vertex_uniform_map["b"] = VariableInfo(2, 3114, SH_PRECISION_HIGHP, 1, "b"); | 113 vertex_uniform_map["a"] = TestHelper::ConstructUniform( |
120 vertex_varying_map["c"] = VariableInfo(3, 2, SH_PRECISION_HIGHP, 1, "c"); | 114 GL_FLOAT, 10, GL_MEDIUM_FLOAT, true, "a"); |
121 fragment_attrib_map["jjjbb"] = | 115 vertex_uniform_map["b"] = TestHelper::ConstructUniform( |
122 VariableInfo(463, 1114, SH_PRECISION_MEDIUMP, 0, "jjjbb"); | 116 GL_FLOAT_VEC3, 3114, GL_HIGH_FLOAT, true, "b"); |
123 fragment_uniform_map["k"] = | 117 vertex_varying_map["c"] = TestHelper::ConstructVarying( |
124 VariableInfo(10, 34413, SH_PRECISION_MEDIUMP, 1, "k"); | 118 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); |
125 fragment_varying_map["c"] = VariableInfo(3, 2, SH_PRECISION_HIGHP, 1, "c"); | 119 fragment_attrib_map["jjjbb"] = TestHelper::ConstructAttribute( |
| 120 GL_FLOAT_MAT4, 1114, GL_MEDIUM_FLOAT, false, "jjjbb"); |
| 121 fragment_uniform_map["k"] = TestHelper::ConstructUniform( |
| 122 GL_FLOAT_MAT2, 34413, GL_MEDIUM_FLOAT, true, "k"); |
| 123 fragment_varying_map["c"] = TestHelper::ConstructVarying( |
| 124 GL_FLOAT_VEC4, 2, GL_HIGH_FLOAT, true, "c"); |
126 | 125 |
127 vertex_shader_->set_source("bbbalsldkdkdkd"); | 126 vertex_shader_->set_source("bbbalsldkdkdkd"); |
128 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad"); | 127 fragment_shader_->set_source("bbbal sldkdkdkas 134 ad"); |
129 | 128 |
130 TestHelper::SetShaderStates( | 129 TestHelper::SetShaderStates( |
131 gl_.get(), vertex_shader_, true, NULL, NULL, | 130 gl_.get(), vertex_shader_, true, NULL, NULL, |
132 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map, | 131 &vertex_attrib_map, &vertex_uniform_map, &vertex_varying_map, |
133 NULL); | 132 NULL); |
134 TestHelper::SetShaderStates( | 133 TestHelper::SetShaderStates( |
135 gl_.get(), fragment_shader_, true, NULL, NULL, | 134 gl_.get(), fragment_shader_, true, NULL, NULL, |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 } | 253 } |
255 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 254 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
256 | 255 |
257 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 256 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
258 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, | 257 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, |
259 fragment_shader_, NULL, NULL, | 258 fragment_shader_, NULL, NULL, |
260 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 259 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
261 base::Unretained(this))); | 260 base::Unretained(this))); |
262 EXPECT_EQ(1, shader_cache_count()); | 261 EXPECT_EQ(1, shader_cache_count()); |
263 | 262 |
264 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 263 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); |
265 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 264 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); |
266 VariableMap vertex_varying_map = vertex_shader_->varying_map(); | 265 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); |
267 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 266 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); |
268 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 267 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); |
269 VariableMap fragment_varying_map = fragment_shader_->varying_map(); | 268 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); |
270 | 269 |
271 vertex_shader_->set_attrib_map(VariableMap()); | 270 vertex_shader_->set_attrib_map(AttributeMap()); |
272 vertex_shader_->set_uniform_map(VariableMap()); | 271 vertex_shader_->set_uniform_map(UniformMap()); |
273 vertex_shader_->set_varying_map(VariableMap()); | 272 vertex_shader_->set_varying_map(VaryingMap()); |
274 fragment_shader_->set_attrib_map(VariableMap()); | 273 fragment_shader_->set_attrib_map(AttributeMap()); |
275 fragment_shader_->set_uniform_map(VariableMap()); | 274 fragment_shader_->set_uniform_map(UniformMap()); |
276 fragment_shader_->set_varying_map(VariableMap()); | 275 fragment_shader_->set_varying_map(VaryingMap()); |
277 | 276 |
278 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 277 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
279 | 278 |
280 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 279 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
281 kProgramId, | 280 kProgramId, |
282 vertex_shader_, | 281 vertex_shader_, |
283 NULL, | 282 NULL, |
284 fragment_shader_, | 283 fragment_shader_, |
285 NULL, | 284 NULL, |
286 NULL, | 285 NULL, |
(...skipping 22 matching lines...) Expand all Loading... |
309 } | 308 } |
310 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); | 309 ProgramBinaryEmulator emulator(kBinaryLength, kFormat, test_binary); |
311 | 310 |
312 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); | 311 SetExpectationsForSaveLinkedProgram(kProgramId, &emulator); |
313 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, | 312 cache_->SaveLinkedProgram(kProgramId, vertex_shader_, NULL, |
314 fragment_shader_, NULL, NULL, | 313 fragment_shader_, NULL, NULL, |
315 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 314 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
316 base::Unretained(this))); | 315 base::Unretained(this))); |
317 EXPECT_EQ(1, shader_cache_count()); | 316 EXPECT_EQ(1, shader_cache_count()); |
318 | 317 |
319 VariableMap vertex_attrib_map = vertex_shader_->attrib_map(); | 318 AttributeMap vertex_attrib_map = vertex_shader_->attrib_map(); |
320 VariableMap vertex_uniform_map = vertex_shader_->uniform_map(); | 319 UniformMap vertex_uniform_map = vertex_shader_->uniform_map(); |
321 VariableMap vertex_varying_map = vertex_shader_->varying_map(); | 320 VaryingMap vertex_varying_map = vertex_shader_->varying_map(); |
322 VariableMap fragment_attrib_map = fragment_shader_->attrib_map(); | 321 AttributeMap fragment_attrib_map = fragment_shader_->attrib_map(); |
323 VariableMap fragment_uniform_map = fragment_shader_->uniform_map(); | 322 UniformMap fragment_uniform_map = fragment_shader_->uniform_map(); |
324 VariableMap fragment_varying_map = fragment_shader_->varying_map(); | 323 VaryingMap fragment_varying_map = fragment_shader_->varying_map(); |
325 | 324 |
326 vertex_shader_->set_attrib_map(VariableMap()); | 325 vertex_shader_->set_attrib_map(AttributeMap()); |
327 vertex_shader_->set_uniform_map(VariableMap()); | 326 vertex_shader_->set_uniform_map(UniformMap()); |
328 vertex_shader_->set_varying_map(VariableMap()); | 327 vertex_shader_->set_varying_map(VaryingMap()); |
329 fragment_shader_->set_attrib_map(VariableMap()); | 328 fragment_shader_->set_attrib_map(AttributeMap()); |
330 fragment_shader_->set_uniform_map(VariableMap()); | 329 fragment_shader_->set_uniform_map(UniformMap()); |
331 fragment_shader_->set_varying_map(VariableMap()); | 330 fragment_shader_->set_varying_map(VaryingMap()); |
332 | 331 |
333 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); | 332 SetExpectationsForLoadLinkedProgram(kProgramId, &emulator); |
334 | 333 |
335 cache_->Clear(); | 334 cache_->Clear(); |
336 cache_->LoadProgram(shader_cache_shader()); | 335 cache_->LoadProgram(shader_cache_shader()); |
337 | 336 |
338 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( | 337 EXPECT_EQ(ProgramCache::PROGRAM_LOAD_SUCCESS, cache_->LoadLinkedProgram( |
339 kProgramId, | 338 kProgramId, |
340 vertex_shader_, | 339 vertex_shader_, |
341 NULL, | 340 NULL, |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 NULL, | 626 NULL, |
628 fragment_shader_, | 627 fragment_shader_, |
629 NULL, | 628 NULL, |
630 NULL, | 629 NULL, |
631 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, | 630 base::Bind(&MemoryProgramCacheTest::ShaderCacheCb, |
632 base::Unretained(this)))); | 631 base::Unretained(this)))); |
633 } | 632 } |
634 | 633 |
635 } // namespace gles2 | 634 } // namespace gles2 |
636 } // namespace gpu | 635 } // namespace gpu |
OLD | NEW |