Skip to content

Commit

Permalink
Always cache SkSL when using the Metal backend. (#17468)
Browse files Browse the repository at this point in the history
There is no ability to compile shaders online and cache those binaries when
using the Metal backend. SkSL caching must always be used.
  • Loading branch information
chinmaygarde committed Apr 2, 2020
1 parent f56e678 commit 0b3f2d3
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions shell/platform/darwin/ios/ios_context_metal.mm
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,22 @@
#include "flutter/shell/platform/darwin/ios/ios_context_metal.h"

#include "flutter/fml/logging.h"
#include "flutter/shell/common/persistent_cache.h"
#include "flutter/shell/platform/darwin/ios/ios_external_texture_metal.h"
#include "third_party/skia/include/gpu/GrContextOptions.h"

namespace flutter {

static GrContextOptions CreateMetalGrContextOptions() {
GrContextOptions options = {};
if (PersistentCache::cache_sksl()) {
options.fShaderCacheStrategy = GrContextOptions::ShaderCacheStrategy::kSkSL;
}
PersistentCache::MarkStrategySet();
options.fPersistentCache = PersistentCache::GetCacheForProcess();
return options;
}

IOSContextMetal::IOSContextMetal() {
device_.reset([MTLCreateSystemDefaultDevice() retain]);
if (!device_) {
Expand All @@ -25,16 +37,20 @@

[main_queue_ setLabel:@"Flutter Main Queue"];

const auto& context_options = CreateMetalGrContextOptions();

// Skia expect arguments to `MakeMetal` transfer ownership of the reference in for release later
// when the GrContext is collected.
main_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain]);
resource_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain]);
main_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain], context_options);
resource_context_ = GrContext::MakeMetal([device_ retain], [main_queue_ retain], context_options);

if (!main_context_ || !resource_context_) {
FML_DLOG(ERROR) << "Could not create Skia Metal contexts.";
return;
}

resource_context_->setResourceCacheLimits(0u, 0u);

CVMetalTextureCacheRef texture_cache_raw = NULL;
auto cv_return = CVMetalTextureCacheCreate(kCFAllocatorDefault, // allocator
NULL, // cache attributes (NULL default)
Expand Down

0 comments on commit 0b3f2d3

Please sign in to comment.