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

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

Issue 1013463003: Update from https://crrev.com/320931 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 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
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/program_cache.h" 5 #include "gpu/command_buffer/service/program_cache.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "gpu/command_buffer/service/mocks.h" 8 #include "gpu/command_buffer/service/mocks.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
11 using ::testing::Return; 11 using ::testing::Return;
12 12
13 namespace gpu { 13 namespace gpu {
14 namespace gles2 { 14 namespace gles2 {
15 15
16 class NoBackendProgramCache : public ProgramCache { 16 class NoBackendProgramCache : public ProgramCache {
17 public: 17 public:
18 ProgramLoadResult LoadLinkedProgram( 18 ProgramLoadResult LoadLinkedProgram(
19 GLuint /* program */, 19 GLuint /* program */,
20 Shader* /* shader_a */, 20 Shader* /* shader_a */,
21 Shader* /* shader_b */, 21 Shader* /* shader_b */,
22 const LocationMap* /* bind_attrib_location_map */, 22 const LocationMap* /* bind_attrib_location_map */,
23 const std::vector<std::string>& /* transform_feedback_varyings */,
24 GLenum /* transform_feedback_buffer_mode */,
23 const ShaderCacheCallback& /* callback */) override { 25 const ShaderCacheCallback& /* callback */) override {
24 return PROGRAM_LOAD_SUCCESS; 26 return PROGRAM_LOAD_SUCCESS;
25 } 27 }
26 void SaveLinkedProgram(GLuint /* program */, 28 void SaveLinkedProgram(
27 const Shader* /* shader_a */, 29 GLuint /* program */,
28 const Shader* /* shader_b */, 30 const Shader* /* shader_a */,
29 const LocationMap* /* bind_attrib_location_map */, 31 const Shader* /* shader_b */,
30 const ShaderCacheCallback& /* callback */) override {} 32 const LocationMap* /* bind_attrib_location_map */,
33 const std::vector<std::string>& /* transform_feedback_varyings */,
34 GLenum /* transform_feedback_buffer_mode */,
35 const ShaderCacheCallback& /* callback */) override {}
31 36
32 void LoadProgram(const std::string& /* program */) override {} 37 void LoadProgram(const std::string& /* program */) override {}
33 38
34 void ClearBackend() override {} 39 void ClearBackend() override {}
35 40
36 void SaySuccessfullyCached(const std::string& shader1, 41 void SaySuccessfullyCached(const std::string& shader1,
37 const std::string& shader2, 42 const std::string& shader2,
38 std::map<std::string, GLint>* attrib_map) { 43 std::map<std::string, GLint>* attrib_map,
44 const std::vector<std::string>& varyings,
45 GLenum buffer_mode) {
39 char a_sha[kHashLength]; 46 char a_sha[kHashLength];
40 char b_sha[kHashLength]; 47 char b_sha[kHashLength];
41 ComputeShaderHash(shader1, a_sha); 48 ComputeShaderHash(shader1, a_sha);
42 ComputeShaderHash(shader2, b_sha); 49 ComputeShaderHash(shader2, b_sha);
43 50
44 char sha[kHashLength]; 51 char sha[kHashLength];
45 ComputeProgramHash(a_sha, 52 ComputeProgramHash(a_sha,
46 b_sha, 53 b_sha,
47 attrib_map, 54 attrib_map,
55 varyings,
56 buffer_mode,
48 sha); 57 sha);
49 const std::string shaString(sha, kHashLength); 58 const std::string shaString(sha, kHashLength);
50 59
51 LinkedProgramCacheSuccess(shaString); 60 LinkedProgramCacheSuccess(shaString);
52 } 61 }
53 62
54 void ComputeShaderHash(const std::string& shader, 63 void ComputeShaderHash(const std::string& shader,
55 char* result) const { 64 char* result) const {
56 ProgramCache::ComputeShaderHash(shader, result); 65 ProgramCache::ComputeShaderHash(shader, result);
57 } 66 }
58 67
59 void ComputeProgramHash(const char* hashed_shader_0, 68 void ComputeProgramHash(
60 const char* hashed_shader_1, 69 const char* hashed_shader_0,
61 const LocationMap* bind_attrib_location_map, 70 const char* hashed_shader_1,
62 char* result) const { 71 const LocationMap* bind_attrib_location_map,
72 const std::vector<std::string>& transform_feedback_varyings,
73 GLenum transform_feedback_buffer_mode,
74 char* result) const {
63 ProgramCache::ComputeProgramHash(hashed_shader_0, 75 ProgramCache::ComputeProgramHash(hashed_shader_0,
64 hashed_shader_1, 76 hashed_shader_1,
65 bind_attrib_location_map, 77 bind_attrib_location_map,
78 transform_feedback_varyings,
79 transform_feedback_buffer_mode,
66 result); 80 result);
67 } 81 }
68 82
69 void Evict(const std::string& program_hash) { 83 void Evict(const std::string& program_hash) {
70 ProgramCache::Evict(program_hash); 84 ProgramCache::Evict(program_hash);
71 } 85 }
72 }; 86 };
73 87
74 class ProgramCacheTest : public testing::Test { 88 class ProgramCacheTest : public testing::Test {
75 public: 89 public:
76 ProgramCacheTest() : 90 ProgramCacheTest() :
77 cache_(new NoBackendProgramCache()) { } 91 cache_(new NoBackendProgramCache()) { }
78 92
79 protected: 93 protected:
80 scoped_ptr<NoBackendProgramCache> cache_; 94 scoped_ptr<NoBackendProgramCache> cache_;
95 std::vector<std::string> varyings_;
81 }; 96 };
82 97
83 TEST_F(ProgramCacheTest, LinkStatusSave) { 98 TEST_F(ProgramCacheTest, LinkStatusSave) {
84 const std::string shader1 = "abcd1234"; 99 const std::string shader1 = "abcd1234";
85 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 100 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
86 { 101 {
87 std::string shader_a = shader1; 102 std::string shader_a = shader1;
88 std::string shader_b = shader2; 103 std::string shader_b = shader2;
89 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 104 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
90 cache_->GetLinkedProgramStatus( 105 cache_->GetLinkedProgramStatus(
91 shader_a, shader_b, NULL)); 106 shader_a, shader_b, NULL, varyings_, GL_NONE));
92 cache_->SaySuccessfullyCached(shader_a, shader_b, NULL); 107 cache_->SaySuccessfullyCached(shader_a, shader_b, NULL, varyings_, GL_NONE);
93 108
94 shader_a.clear(); 109 shader_a.clear();
95 shader_b.clear(); 110 shader_b.clear();
96 } 111 }
97 // make sure it was copied 112 // make sure it was copied
98 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, 113 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
99 cache_->GetLinkedProgramStatus( 114 cache_->GetLinkedProgramStatus(
100 shader1, shader2, NULL)); 115 shader1, shader2, NULL, varyings_, GL_NONE));
101 } 116 }
102 117
103 TEST_F(ProgramCacheTest, LinkUnknownOnFragmentSourceChange) { 118 TEST_F(ProgramCacheTest, LinkUnknownOnFragmentSourceChange) {
104 const std::string shader1 = "abcd1234"; 119 const std::string shader1 = "abcd1234";
105 std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 120 std::string shader2 = "abcda sda b1~#4 bbbbb1234";
106 cache_->SaySuccessfullyCached(shader1, shader2, NULL); 121 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE);
107 122
108 shader2 = "different!"; 123 shader2 = "different!";
109 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 124 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
110 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 125 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
126 varyings_, GL_NONE));
111 } 127 }
112 128
113 TEST_F(ProgramCacheTest, LinkUnknownOnVertexSourceChange) { 129 TEST_F(ProgramCacheTest, LinkUnknownOnVertexSourceChange) {
114 std::string shader1 = "abcd1234"; 130 std::string shader1 = "abcd1234";
115 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 131 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
116 cache_->SaySuccessfullyCached(shader1, shader2, NULL); 132 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE);
117 133
118 shader1 = "different!"; 134 shader1 = "different!";
119 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 135 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
120 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 136 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
137 varyings_, GL_NONE));
121 } 138 }
122 139
123 TEST_F(ProgramCacheTest, StatusEviction) { 140 TEST_F(ProgramCacheTest, StatusEviction) {
124 const std::string shader1 = "abcd1234"; 141 const std::string shader1 = "abcd1234";
125 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 142 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
126 cache_->SaySuccessfullyCached(shader1, shader2, NULL); 143 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE);
127 char a_sha[ProgramCache::kHashLength]; 144 char a_sha[ProgramCache::kHashLength];
128 char b_sha[ProgramCache::kHashLength]; 145 char b_sha[ProgramCache::kHashLength];
129 cache_->ComputeShaderHash(shader1, a_sha); 146 cache_->ComputeShaderHash(shader1, a_sha);
130 cache_->ComputeShaderHash(shader2, b_sha); 147 cache_->ComputeShaderHash(shader2, b_sha);
131 148
132 char sha[ProgramCache::kHashLength]; 149 char sha[ProgramCache::kHashLength];
133 cache_->ComputeProgramHash(a_sha, 150 cache_->ComputeProgramHash(a_sha,
134 b_sha, 151 b_sha,
135 NULL, 152 NULL,
153 varyings_,
154 GL_NONE,
136 sha); 155 sha);
137 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 156 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
138 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 157 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
139 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 158 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
159 varyings_, GL_NONE));
140 } 160 }
141 161
142 TEST_F(ProgramCacheTest, EvictionWithReusedShader) { 162 TEST_F(ProgramCacheTest, EvictionWithReusedShader) {
143 const std::string shader1 = "abcd1234"; 163 const std::string shader1 = "abcd1234";
144 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 164 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
145 const std::string shader3 = "asbjbbjj239a"; 165 const std::string shader3 = "asbjbbjj239a";
146 cache_->SaySuccessfullyCached(shader1, shader2, NULL); 166 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE);
147 cache_->SaySuccessfullyCached(shader1, shader3, NULL); 167 cache_->SaySuccessfullyCached(shader1, shader3, NULL, varyings_, GL_NONE);
148 168
149 char a_sha[ProgramCache::kHashLength]; 169 char a_sha[ProgramCache::kHashLength];
150 char b_sha[ProgramCache::kHashLength]; 170 char b_sha[ProgramCache::kHashLength];
151 char c_sha[ProgramCache::kHashLength]; 171 char c_sha[ProgramCache::kHashLength];
152 cache_->ComputeShaderHash(shader1, a_sha); 172 cache_->ComputeShaderHash(shader1, a_sha);
153 cache_->ComputeShaderHash(shader2, b_sha); 173 cache_->ComputeShaderHash(shader2, b_sha);
154 cache_->ComputeShaderHash(shader3, c_sha); 174 cache_->ComputeShaderHash(shader3, c_sha);
155 175
156 char sha[ProgramCache::kHashLength]; 176 char sha[ProgramCache::kHashLength];
157 cache_->ComputeProgramHash(a_sha, 177 cache_->ComputeProgramHash(a_sha,
158 b_sha, 178 b_sha,
159 NULL, 179 NULL,
180 varyings_,
181 GL_NONE,
160 sha); 182 sha);
161 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 183 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
162 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 184 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
163 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 185 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
186 varyings_, GL_NONE));
164 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED, 187 EXPECT_EQ(ProgramCache::LINK_SUCCEEDED,
165 cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); 188 cache_->GetLinkedProgramStatus(shader1, shader3, NULL,
189 varyings_, GL_NONE));
166 190
167 191
168 cache_->ComputeProgramHash(a_sha, 192 cache_->ComputeProgramHash(a_sha,
169 c_sha, 193 c_sha,
170 NULL, 194 NULL,
195 varyings_,
196 GL_NONE,
171 sha); 197 sha);
172 cache_->Evict(std::string(sha, ProgramCache::kHashLength)); 198 cache_->Evict(std::string(sha, ProgramCache::kHashLength));
173 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 199 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
174 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 200 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
201 varyings_, GL_NONE));
175 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 202 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
176 cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); 203 cache_->GetLinkedProgramStatus(shader1, shader3, NULL,
204 varyings_, GL_NONE));
177 } 205 }
178 206
179 TEST_F(ProgramCacheTest, StatusClear) { 207 TEST_F(ProgramCacheTest, StatusClear) {
180 const std::string shader1 = "abcd1234"; 208 const std::string shader1 = "abcd1234";
181 const std::string shader2 = "abcda sda b1~#4 bbbbb1234"; 209 const std::string shader2 = "abcda sda b1~#4 bbbbb1234";
182 const std::string shader3 = "asbjbbjj239a"; 210 const std::string shader3 = "asbjbbjj239a";
183 cache_->SaySuccessfullyCached(shader1, shader2, NULL); 211 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_, GL_NONE);
184 cache_->SaySuccessfullyCached(shader1, shader3, NULL); 212 cache_->SaySuccessfullyCached(shader1, shader3, NULL, varyings_, GL_NONE);
185 cache_->Clear(); 213 cache_->Clear();
186 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 214 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
187 cache_->GetLinkedProgramStatus(shader1, shader2, NULL)); 215 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
216 varyings_, GL_NONE));
188 EXPECT_EQ(ProgramCache::LINK_UNKNOWN, 217 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
189 cache_->GetLinkedProgramStatus(shader1, shader3, NULL)); 218 cache_->GetLinkedProgramStatus(shader1, shader3, NULL,
219 varyings_, GL_NONE));
220 }
221
222 TEST_F(ProgramCacheTest, LinkUnknownOnTransformFeedbackChange) {
223 const std::string shader1 = "abcd1234";
224 std::string shader2 = "abcda sda b1~#4 bbbbb1234";
225 varyings_.push_back("a");
226 cache_->SaySuccessfullyCached(shader1, shader2, NULL, varyings_,
227 GL_INTERLEAVED_ATTRIBS);
228
229 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
230 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
231 varyings_, GL_SEPARATE_ATTRIBS));
232
233 varyings_.push_back("b");
234 EXPECT_EQ(ProgramCache::LINK_UNKNOWN,
235 cache_->GetLinkedProgramStatus(shader1, shader2, NULL,
236 varyings_, GL_INTERLEAVED_ATTRIBS));
190 } 237 }
191 238
192 } // namespace gles2 239 } // namespace gles2
193 } // namespace gpu 240 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/program_cache.cc ('k') | gpu/command_buffer/service/program_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698