Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2013 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 "GrContext.h"
     13 #include "GrContextFactory.h"
     14 #include "GrRenderTarget.h"
     15 #include "GrTexture.h"
     16 #include "GrSurfacePriv.h"
     17 #include "Test.h"
     18 
     19 // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture
     20 // and render targets to GrSurface all work as expected.
     21 DEF_GPUTEST(GrSurface, reporter, factory) {
     22     GrContext* context = factory->get(GrContextFactory::kNull_GLContextType);
     23     if (context) {
     24         GrSurfaceDesc desc;
     25         desc.fConfig = kSkia8888_GrPixelConfig;
     26         desc.fFlags = kRenderTarget_GrSurfaceFlag;
     27         desc.fWidth = 256;
     28         desc.fHeight = 256;
     29         desc.fSampleCnt = 0;
     30         GrSurface* texRT1 = context->textureProvider()->createTexture(desc, false, NULL, 0);
     31 
     32         REPORTER_ASSERT(reporter, texRT1 == texRT1->asRenderTarget());
     33         REPORTER_ASSERT(reporter, texRT1 == texRT1->asTexture());
     34         REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT1->asRenderTarget()) ==
     35                                   texRT1->asTexture());
     36         REPORTER_ASSERT(reporter, texRT1->asRenderTarget() ==
     37                                   static_cast<GrSurface*>(texRT1->asTexture()));
     38         REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT1->asRenderTarget()) ==
     39                                   static_cast<GrSurface*>(texRT1->asTexture()));
     40 
     41         desc.fFlags = kNone_GrSurfaceFlags;
     42         GrSurface* tex1 = context->textureProvider()->createTexture(desc, false, NULL, 0);
     43         REPORTER_ASSERT(reporter, NULL == tex1->asRenderTarget());
     44         REPORTER_ASSERT(reporter, tex1 == tex1->asTexture());
     45         REPORTER_ASSERT(reporter, static_cast<GrSurface*>(tex1) == tex1->asTexture());
     46 
     47         GrBackendTextureDesc backendDesc;
     48         backendDesc.fConfig = kSkia8888_GrPixelConfig;
     49         backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
     50         backendDesc.fWidth = 256;
     51         backendDesc.fHeight = 256;
     52         backendDesc.fSampleCnt = 0;
     53         backendDesc.fTextureHandle = 5;
     54         GrSurface* texRT2 = context->textureProvider()->wrapBackendTexture(backendDesc);
     55         REPORTER_ASSERT(reporter, texRT2 == texRT2->asRenderTarget());
     56         REPORTER_ASSERT(reporter, texRT2 == texRT2->asTexture());
     57         REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget()) ==
     58                                   texRT2->asTexture());
     59         REPORTER_ASSERT(reporter, texRT2->asRenderTarget() ==
     60                                   static_cast<GrSurface*>(texRT2->asTexture()));
     61         REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget()) ==
     62                                    static_cast<GrSurface*>(texRT2->asTexture()));
     63 
     64         texRT1->unref();
     65         texRT2->unref();
     66         tex1->unref();
     67     }
     68 }
     69 
     70 #endif
     71