Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2011 Google Inc.
      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 "SkTypes.h"
      9 
     10 #if SK_SUPPORT_GPU
     11 
     12 #include "GrContextFactory.h"
     13 #include "GrCaps.h"
     14 #include "Test.h"
     15 
     16 DEF_GPUTEST(GrContextFactory_NVPRContextOptionHasPathRenderingSupport, reporter, /*factory*/) {
     17     // Test that if NVPR is requested, the context always has path rendering
     18     // or the context creation fails.
     19     GrContextFactory testFactory;
     20     // Test that if NVPR is possible, caps are in sync.
     21     for (int i = 0; i < GrContextFactory::kGLContextTypeCnt; ++i) {
     22         GrContextFactory::GLContextType glCtxType = static_cast<GrContextFactory::GLContextType>(i);
     23         GrContext* context = testFactory.get(glCtxType,
     24                                              GrContextFactory::kEnableNVPR_GLContextOptions);
     25         if (!context) {
     26             continue;
     27         }
     28         REPORTER_ASSERT(
     29             reporter,
     30             context->caps()->shaderCaps()->pathRenderingSupport());
     31     }
     32 }
     33 
     34 DEF_GPUTEST(GrContextFactory_NoPathRenderingUnlessNVPRRequested, reporter, /*factory*/) {
     35     // Test that if NVPR is not requested, the context never has path rendering support.
     36 
     37     GrContextFactory testFactory;
     38     for (int i = 0; i <= GrContextFactory::kLastGLContextType; ++i) {
     39         GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLContextType)i;
     40         GrContext* context = testFactory.get(glCtxType);
     41         if (context) {
     42             REPORTER_ASSERT(
     43                 reporter,
     44                 !context->caps()->shaderCaps()->pathRenderingSupport());
     45         }
     46     }
     47 }
     48 
     49 DEF_GPUTEST(GrContextFactory_abandon, reporter, /*factory*/) {
     50     GrContextFactory testFactory;
     51     for (int i = 0; i < GrContextFactory::kGLContextTypeCnt; ++i) {
     52         GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLContextType) i;
     53         GrContextFactory::ContextInfo info1 =
     54                 testFactory.getContextInfo(glCtxType);
     55         if (!info1.fGrContext) {
     56             continue;
     57         }
     58         REPORTER_ASSERT(reporter, info1.fGLContext);
     59          // Ref for comparison. The API does not explicitly say that this stays alive.
     60         info1.fGrContext->ref();
     61         testFactory.abandonContexts();
     62 
     63         // Test that we get different context after abandon.
     64         GrContextFactory::ContextInfo info2 =
     65                 testFactory.getContextInfo(glCtxType);
     66         REPORTER_ASSERT(reporter, info2.fGrContext);
     67         REPORTER_ASSERT(reporter, info2.fGLContext);
     68         REPORTER_ASSERT(reporter, info1.fGrContext != info2.fGrContext);
     69         // fGLContext should also change, but it also could get the same address.
     70 
     71         info1.fGrContext->unref();
     72     }
     73 }
     74 
     75 #endif
     76