diff options
author | 2017-02-21 16:58:08 -0500 | |
---|---|---|
committer | 2017-02-22 13:32:56 +0000 | |
commit | 60c774db3ec46f3eb85f6390ba31e38c8d29e2d4 (patch) | |
tree | 0fd26132415dc9843b98b4db2e90ba1f44b3c32c /tests | |
parent | 22eb2f1aa09b0fb27c199c2cc96cd74b2098d502 (diff) |
Support shared GL contexts in GrContextFactory
Mostly plumbing, plus some minimal testing to make sure that
the platform APIs don't explode. I plan to add testing of
SkCrossContextImageData using this, which should verify that
textures are actually shared.
Also found a factory and some related code in the
CommandBuffer test context that was totally unused.
BUG=skia:
Change-Id: I05bbc22c4d1ef946b702a5cc7f67788785219c62
Reviewed-on: https://skia-review.googlesource.com/8808
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/GrContextFactoryTest.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/GrContextFactoryTest.cpp b/tests/GrContextFactoryTest.cpp index f7ddf36d91..8e6a96410d 100644 --- a/tests/GrContextFactoryTest.cpp +++ b/tests/GrContextFactoryTest.cpp @@ -96,4 +96,56 @@ DEF_GPUTEST(GrContextFactory_abandon, reporter, /*factory*/) { } } +DEF_GPUTEST(GrContextFactory_sharedContexts, reporter, /*factory*/) { + GrContextFactory testFactory; + GrContextFactory::ContextOverrides noOverrides = GrContextFactory::ContextOverrides::kNone; + + for (int i = 0; i < GrContextFactory::kContextTypeCnt; ++i) { + GrContextFactory::ContextType ctxType = static_cast<GrContextFactory::ContextType>(i); + ContextInfo info1 = testFactory.getContextInfo(ctxType); + if (!info1.grContext()) { + continue; + } + + // Ref for passing in. The API does not explicitly say that this stays alive. + info1.grContext()->ref(); + testFactory.abandonContexts(); + + // Test that creating a context in a share group with an abandoned context fails. + ContextInfo info2 = testFactory.getContextInfo(ctxType, noOverrides, info1.grContext()); + REPORTER_ASSERT(reporter, !info2.grContext()); + info1.grContext()->unref(); + + // Create a new base context + ContextInfo info3 = testFactory.getContextInfo(ctxType); + + // Creating a context in a share group may fail, but should never crash. + ContextInfo info4 = testFactory.getContextInfo(ctxType, noOverrides, info3.grContext()); + if (!info4.grContext()) { + continue; + } + REPORTER_ASSERT(reporter, info3.grContext() != info4.grContext()); + REPORTER_ASSERT(reporter, info3.testContext() != info4.testContext()); + + // Passing a different index should create a new (unique) context. + ContextInfo info5 = testFactory.getContextInfo(ctxType, noOverrides, info3.grContext(), 1); + REPORTER_ASSERT(reporter, info5.grContext()); + REPORTER_ASSERT(reporter, info5.testContext()); + REPORTER_ASSERT(reporter, info5.grContext() != info4.grContext()); + REPORTER_ASSERT(reporter, info5.testContext() != info4.testContext()); + + // Creating a shared context with a different type should always fail. + for (int j = 0; j < GrContextFactory::kContextTypeCnt; ++j) { + if (i == j) { + continue; + } + GrContextFactory::ContextType differentCtxType = + static_cast<GrContextFactory::ContextType>(j); + ContextInfo info6 = testFactory.getContextInfo(differentCtxType, noOverrides, + info3.grContext()); + REPORTER_ASSERT(reporter, !info6.grContext()); + } + } +} + #endif |