• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2021 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "tests/Test.h"
9 
10 #include "experimental/graphite/include/Context.h"
11 #include "experimental/graphite/src/ProgramCache.h"
12 #include "experimental/graphite/src/Recorder.h"
13 
14 using namespace skgpu;
15 
DEF_GRAPHITE_TEST_FOR_CONTEXTS(ProgramCacheTest,reporter,context)16 DEF_GRAPHITE_TEST_FOR_CONTEXTS(ProgramCacheTest, reporter, context) {
17     Recorder recorder(sk_ref_sp(context));
18 
19     auto cache = recorder.programCache();
20 
21     REPORTER_ASSERT(reporter, cache->count() == 0);
22 
23     // Add an initial unique program
24     sk_sp<ProgramCache::ProgramInfo> pi1;
25     {
26         Combination c1 { ShaderCombo::ShaderType::kNone, SkTileMode::kRepeat, SkBlendMode::kSrc };
27         pi1 = cache->findOrCreateProgram(c1);
28         REPORTER_ASSERT(reporter, pi1->id() != ProgramCache::kInvalidProgramID);
29         REPORTER_ASSERT(reporter, pi1->combo() == c1);
30         sk_sp<ProgramCache::ProgramInfo> lookup = cache->lookup(pi1->id());
31         REPORTER_ASSERT(reporter, lookup->id() == pi1->id());
32 
33         REPORTER_ASSERT(reporter, cache->count() == 1);
34     }
35 
36     // Try to add a duplicate program
37     {
38         Combination c2 { ShaderCombo::ShaderType::kNone, SkTileMode::kRepeat, SkBlendMode::kSrc };
39         sk_sp<ProgramCache::ProgramInfo> pi2 = cache->findOrCreateProgram(c2);
40         REPORTER_ASSERT(reporter, pi2->id() != ProgramCache::kInvalidProgramID);
41         REPORTER_ASSERT(reporter, pi2->id() == pi1->id());
42         REPORTER_ASSERT(reporter, pi2->combo() == c2);
43         sk_sp<ProgramCache::ProgramInfo> lookup = cache->lookup(pi2->id());
44         REPORTER_ASSERT(reporter, lookup->id() == pi2->id());
45 
46         REPORTER_ASSERT(reporter, cache->count() == 1);
47     }
48 
49     // Add a second unique program
50     {
51         Combination c3 { ShaderCombo::ShaderType::kLinearGradient,
52                          SkTileMode::kRepeat,
53                          SkBlendMode::kSrc };
54 
55         sk_sp<ProgramCache::ProgramInfo> pi3 = cache->findOrCreateProgram(c3);
56         REPORTER_ASSERT(reporter, pi3->id() != ProgramCache::kInvalidProgramID);
57         REPORTER_ASSERT(reporter, pi3->id() != pi1->id());
58         REPORTER_ASSERT(reporter, pi3->combo() == c3);
59         sk_sp<ProgramCache::ProgramInfo> lookup = cache->lookup(pi3->id());
60         REPORTER_ASSERT(reporter, lookup->id() == pi3->id());
61 
62         REPORTER_ASSERT(reporter, cache->count() == 2);
63     }
64 
65     // TODO(robertphillips): expand this test to exercise more program variations
66 
67 }
68