/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#if SK_SUPPORT_GPU

#include "GrContext.h"
#include "GrContextFactory.h"
#include "GrRenderTarget.h"
#include "GrTexture.h"
#include "SkTypes.h"
#include "Test.h"

DEF_GPUTEST(GrSurface, reporter, factory) {
    GrContext* context = factory->get(GrContextFactory::kNull_GLContextType);
    if (NULL != context) {
        GrTextureDesc desc;
        desc.fConfig = kSkia8888_GrPixelConfig;
        desc.fFlags = kRenderTarget_GrTextureFlagBit;
        desc.fWidth = 256;
        desc.fHeight = 256;
        desc.fSampleCnt = 0;
        GrSurface* texRT1 = context->createUncachedTexture(desc, NULL, 0);
        GrSurface* texRT2 = context->createUncachedTexture(desc, NULL, 0);
        desc.fFlags = kNone_GrTextureFlags;
        GrSurface* tex1 = context->createUncachedTexture(desc, NULL, 0);

        REPORTER_ASSERT(reporter, texRT1->isSameAs(texRT1));
        REPORTER_ASSERT(reporter, texRT1->isSameAs(texRT1->asRenderTarget()));
        REPORTER_ASSERT(reporter, texRT1->asRenderTarget()->isSameAs(texRT1));
        REPORTER_ASSERT(reporter, !texRT2->isSameAs(texRT1));
        REPORTER_ASSERT(reporter, !texRT2->asRenderTarget()->isSameAs(texRT1));
        REPORTER_ASSERT(reporter, !texRT2->isSameAs(texRT1->asRenderTarget()));
        REPORTER_ASSERT(reporter, !texRT2->isSameAs(tex1));
        REPORTER_ASSERT(reporter, !texRT2->asRenderTarget()->isSameAs(tex1));

        GrBackendTextureDesc backendDesc;
        backendDesc.fConfig = kSkia8888_GrPixelConfig;
        backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
        backendDesc.fWidth = 256;
        backendDesc.fHeight = 256;
        backendDesc.fSampleCnt = 0;
        backendDesc.fTextureHandle = 5;
        GrSurface* externalTexRT = context->wrapBackendTexture(backendDesc);
        REPORTER_ASSERT(reporter, externalTexRT->isSameAs(externalTexRT));
        REPORTER_ASSERT(reporter, externalTexRT->isSameAs(externalTexRT->asRenderTarget()));
        REPORTER_ASSERT(reporter, externalTexRT->asRenderTarget()->isSameAs(externalTexRT));
        REPORTER_ASSERT(reporter, !externalTexRT->isSameAs(texRT1));
        REPORTER_ASSERT(reporter, !externalTexRT->asRenderTarget()->isSameAs(texRT1));

        texRT1->unref();
        texRT2->unref();
        tex1->unref();
        externalTexRT->unref();
    }
}

#endif
