| Index: gpu/command_buffer/service/test_helper.cc
|
| diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
|
| index 4ea39188d985a6a1386105957480909b82de84d9..33a17036ab434e88ed2c220f060cea6ba1bff858 100644
|
| --- a/gpu/command_buffer/service/test_helper.cc
|
| +++ b/gpu/command_buffer/service/test_helper.cc
|
| @@ -12,6 +12,7 @@
|
| #include "gpu/command_buffer/service/program_manager.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +#include <algorithm>
|
| #include <string.h>
|
|
|
| using ::testing::_;
|
| @@ -368,6 +369,17 @@ void TestHelper::SetupExpectationsForClearingUniforms(
|
| }
|
| }
|
|
|
| +namespace {
|
| +
|
| +struct UniformInfoComparer {
|
| + bool operator()(const TestHelper::UniformInfo& lhs,
|
| + const TestHelper::UniformInfo& rhs) const {
|
| + return strcmp(lhs.name, rhs.name) < 0;
|
| + }
|
| +};
|
| +
|
| +} // anonymous namespace.
|
| +
|
| void TestHelper::SetupShader(
|
| ::gfx::MockGLInterface* gl,
|
| AttribInfo* attribs, size_t num_attribs,
|
| @@ -400,6 +412,7 @@ void TestHelper::SetupShader(
|
| GetProgramiv(service_id, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, _))
|
| .WillOnce(SetArgumentPointee<2>(max_attrib_len))
|
| .RetiresOnSaturation();
|
| +
|
| for (size_t ii = 0; ii < num_attribs; ++ii) {
|
| const AttribInfo& info = attribs[ii];
|
| EXPECT_CALL(*gl,
|
| @@ -422,6 +435,10 @@ void TestHelper::SetupShader(
|
| GetProgramiv(service_id, GL_ACTIVE_UNIFORMS, _))
|
| .WillOnce(SetArgumentPointee<2>(num_uniforms))
|
| .RetiresOnSaturation();
|
| +
|
| + scoped_array<UniformInfo> sorted_uniforms(new UniformInfo[num_uniforms]);
|
| + size_t num_valid_uniforms = 0;
|
| +
|
| size_t max_uniform_len = 0;
|
| for (size_t ii = 0; ii < num_uniforms; ++ii) {
|
| size_t len = strlen(uniforms[ii].name) + 1;
|
| @@ -444,28 +461,36 @@ void TestHelper::SetupShader(
|
| info.name + strlen(info.name) + 1)))
|
| .RetiresOnSaturation();
|
| if (!ProgramManager::IsInvalidPrefix(info.name, strlen(info.name))) {
|
| - EXPECT_CALL(*gl, GetUniformLocation(service_id, StrEq(info.name)))
|
| - .WillOnce(Return(info.real_location))
|
| - .RetiresOnSaturation();
|
| - if (info.size > 1) {
|
| - std::string base_name = info.name;
|
| - size_t array_pos = base_name.rfind("[0]");
|
| - if (base_name.size() > 3 && array_pos == base_name.size() - 3) {
|
| - base_name = base_name.substr(0, base_name.size() - 3);
|
| - }
|
| - for (GLsizei jj = 1; jj < info.size; ++jj) {
|
| - std::string element_name(
|
| - std::string(base_name) + "[" + base::IntToString(jj) + "]");
|
| - EXPECT_CALL(*gl, GetUniformLocation(service_id, StrEq(element_name)))
|
| - .WillOnce(Return(info.real_location + jj * 2))
|
| - .RetiresOnSaturation();
|
| - }
|
| + sorted_uniforms[num_valid_uniforms++] = uniforms[ii];
|
| + }
|
| + }
|
| +
|
| + std::sort(
|
| + &sorted_uniforms[0], &sorted_uniforms[num_valid_uniforms],
|
| + UniformInfoComparer());
|
| +
|
| + for (size_t ii = 0; ii < num_valid_uniforms; ++ii) {
|
| + const UniformInfo& info = sorted_uniforms[ii];
|
| + EXPECT_CALL(*gl, GetUniformLocation(service_id, StrEq(info.name)))
|
| + .WillOnce(Return(info.real_location))
|
| + .RetiresOnSaturation();
|
| + if (info.size > 1) {
|
| + std::string base_name = info.name;
|
| + size_t array_pos = base_name.rfind("[0]");
|
| + if (base_name.size() > 3 && array_pos == base_name.size() - 3) {
|
| + base_name = base_name.substr(0, base_name.size() - 3);
|
| + }
|
| + for (GLsizei jj = 1; jj < info.size; ++jj) {
|
| + std::string element_name(
|
| + std::string(base_name) + "[" + base::IntToString(jj) + "]");
|
| + EXPECT_CALL(*gl, GetUniformLocation(service_id, StrEq(element_name)))
|
| + .WillOnce(Return(info.real_location + jj * 2))
|
| + .RetiresOnSaturation();
|
| }
|
| }
|
| }
|
| }
|
|
|
| -
|
| } // namespace gles2
|
| } // namespace gpu
|
|
|
|
|