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

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

Issue 2615573002: Add disable_program_caching_for_transform_feedback workaround. (Closed)
Patch Set: Created 3 years, 11 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/memory_program_cache.h" 5 #include "gpu/command_buffer/service/memory_program_cache.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 std::string shader; 195 std::string shader;
196 proto->SerializeToString(&shader); 196 proto->SerializeToString(&shader);
197 197
198 std::string key; 198 std::string key;
199 base::Base64Encode(sha_string, &key); 199 base::Base64Encode(sha_string, &key);
200 callback.Run(key, shader); 200 callback.Run(key, shader);
201 } 201 }
202 202
203 } // namespace 203 } // namespace
204 204
205 MemoryProgramCache::MemoryProgramCache(size_t max_cache_size_bytes, 205 MemoryProgramCache::MemoryProgramCache(
206 bool disable_gpu_shader_disk_cache) 206 size_t max_cache_size_bytes,
207 bool disable_gpu_shader_disk_cache,
208 bool disable_program_caching_for_transform_feedback)
207 : max_size_bytes_(max_cache_size_bytes), 209 : max_size_bytes_(max_cache_size_bytes),
208 disable_gpu_shader_disk_cache_(disable_gpu_shader_disk_cache), 210 disable_gpu_shader_disk_cache_(disable_gpu_shader_disk_cache),
211 disable_program_caching_for_transform_feedback_(
212 disable_program_caching_for_transform_feedback),
209 curr_size_bytes_(0), 213 curr_size_bytes_(0),
210 store_(ProgramMRUCache::NO_AUTO_EVICT) { 214 store_(ProgramMRUCache::NO_AUTO_EVICT) {
211 } 215 }
212 216
213 MemoryProgramCache::~MemoryProgramCache() {} 217 MemoryProgramCache::~MemoryProgramCache() {}
214 218
215 void MemoryProgramCache::ClearBackend() { 219 void MemoryProgramCache::ClearBackend() {
216 store_.Clear(); 220 store_.Clear();
217 DCHECK_EQ(0U, curr_size_bytes_); 221 DCHECK_EQ(0U, curr_size_bytes_);
218 } 222 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 } 288 }
285 289
286 void MemoryProgramCache::SaveLinkedProgram( 290 void MemoryProgramCache::SaveLinkedProgram(
287 GLuint program, 291 GLuint program,
288 const Shader* shader_a, 292 const Shader* shader_a,
289 const Shader* shader_b, 293 const Shader* shader_b,
290 const LocationMap* bind_attrib_location_map, 294 const LocationMap* bind_attrib_location_map,
291 const std::vector<std::string>& transform_feedback_varyings, 295 const std::vector<std::string>& transform_feedback_varyings,
292 GLenum transform_feedback_buffer_mode, 296 GLenum transform_feedback_buffer_mode,
293 const ShaderCacheCallback& shader_callback) { 297 const ShaderCacheCallback& shader_callback) {
298 if (disable_program_caching_for_transform_feedback_ &&
299 !transform_feedback_varyings.empty()) {
300 return;
301 }
294 GLenum format; 302 GLenum format;
295 GLsizei length = 0; 303 GLsizei length = 0;
296 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length); 304 glGetProgramiv(program, GL_PROGRAM_BINARY_LENGTH_OES, &length);
297 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) { 305 if (length == 0 || static_cast<unsigned int>(length) > max_size_bytes_) {
298 return; 306 return;
299 } 307 }
300 std::unique_ptr<char[]> binary(new char[length]); 308 std::unique_ptr<char[]> binary(new char[length]);
301 glGetProgramBinary(program, 309 glGetProgramBinary(program,
302 length, 310 length,
303 NULL, 311 NULL,
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 program_cache_->LinkedProgramCacheSuccess(program_hash); 489 program_cache_->LinkedProgramCacheSuccess(program_hash);
482 } 490 }
483 491
484 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() { 492 MemoryProgramCache::ProgramCacheValue::~ProgramCacheValue() {
485 program_cache_->curr_size_bytes_ -= length_; 493 program_cache_->curr_size_bytes_ -= length_;
486 program_cache_->Evict(program_hash_); 494 program_cache_->Evict(program_hash_);
487 } 495 }
488 496
489 } // namespace gles2 497 } // namespace gles2
490 } // namespace gpu 498 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/memory_program_cache.h ('k') | gpu/command_buffer/service/memory_program_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698