aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-02-21 16:58:08 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-22 13:32:56 +0000
commit60c774db3ec46f3eb85f6390ba31e38c8d29e2d4 (patch)
tree0fd26132415dc9843b98b4db2e90ba1f44b3c32c /tests
parent22eb2f1aa09b0fb27c199c2cc96cd74b2098d502 (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.cpp52
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