| Index: tests/VkWrapTests.cpp
|
| diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..fe954fa2c23a649207872e43c28ba89baaf0136c
|
| --- /dev/null
|
| +++ b/tests/VkWrapTests.cpp
|
| @@ -0,0 +1,179 @@
|
| +
|
| +/*
|
| + * Copyright 2016 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +// This is a GPU-backend specific test. It relies on static intializers to work
|
| +
|
| +#include "SkTypes.h"
|
| +
|
| +#if SK_SUPPORT_GPU && SK_ALLOW_STATIC_GLOBAL_INITIALIZERS && defined(SK_VULKAN)
|
| +
|
| +#include "GrContextFactory.h"
|
| +#include "GrTest.h"
|
| +#include "Test.h"
|
| +#include "vk/GrVkCaps.h"
|
| +#include "vk/GrVkGpu.h"
|
| +#include "vk/GrVkMemory.h"
|
| +#include "vk/GrVkTypes.h"
|
| +
|
| +const int kW = 1024;
|
| +const int kH = 1024;
|
| +const GrPixelConfig kPixelConfig = kRGBA_8888_GrPixelConfig;
|
| +
|
| +void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
|
| +
|
| + GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu());
|
| +
|
| + GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig);
|
| + const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj);
|
| +
|
| + // check basic borrowed creation
|
| + GrBackendTextureDesc desc;
|
| + desc.fConfig = kPixelConfig;
|
| + desc.fWidth = kW;
|
| + desc.fHeight = kH;
|
| + desc.fTextureHandle = backendObj;
|
| + GrTexture* tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, tex);
|
| + tex->unref();
|
| +
|
| + // image is null
|
| + GrVkTextureInfo backendCopy = *backendTex;
|
| + backendCopy.fImage = VK_NULL_HANDLE;
|
| + desc.fTextureHandle = (GrBackendObject) &backendCopy;
|
| + tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| +
|
| + // alloc is null
|
| + backendCopy.fImage = backendTex->fImage;
|
| + backendCopy.fAlloc = VK_NULL_HANDLE;
|
| + tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| +
|
| + // check adopt creation
|
| + backendCopy.fAlloc = backendTex->fAlloc;
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, tex);
|
| + tex->unref();
|
| +
|
| + gpu->deleteTestingOnlyBackendTexture(backendObj, true);
|
| +}
|
| +
|
| +void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) {
|
| + GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu());
|
| +
|
| + GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig);
|
| + const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj);
|
| +
|
| + // check basic borrowed creation
|
| + GrBackendRenderTargetDesc desc;
|
| + desc.fWidth = kW;
|
| + desc.fHeight = kH;
|
| + desc.fConfig = kPixelConfig;
|
| + desc.fOrigin = kTopLeft_GrSurfaceOrigin;
|
| + desc.fSampleCnt = 0;
|
| + desc.fStencilBits = 0;
|
| + desc.fRenderTargetHandle = backendObj;
|
| + GrRenderTarget* rt = gpu->wrapBackendRenderTarget(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, rt);
|
| + rt->unref();
|
| +
|
| + // image is null
|
| + GrVkTextureInfo backendCopy = *backendTex;
|
| + backendCopy.fImage = VK_NULL_HANDLE;
|
| + desc.fRenderTargetHandle = (GrBackendObject)&backendCopy;
|
| + rt = gpu->wrapBackendRenderTarget(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !rt);
|
| + rt = gpu->wrapBackendRenderTarget(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !rt);
|
| +
|
| + // alloc is null
|
| + backendCopy.fImage = backendTex->fImage;
|
| + backendCopy.fAlloc = VK_NULL_HANDLE;
|
| + // can wrap null alloc if borrowing
|
| + rt = gpu->wrapBackendRenderTarget(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, rt);
|
| + // but not if adopting
|
| + rt = gpu->wrapBackendRenderTarget(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !rt);
|
| +
|
| + // check adopt creation
|
| + backendCopy.fAlloc = backendTex->fAlloc;
|
| + rt = gpu->wrapBackendRenderTarget(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, rt);
|
| + rt->unref();
|
| +
|
| + gpu->deleteTestingOnlyBackendTexture(backendObj, true);
|
| +}
|
| +
|
| +void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
|
| + GrVkGpu* gpu = static_cast<GrVkGpu*>(context->getGpu());
|
| +
|
| + GrBackendObject backendObj = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kPixelConfig);
|
| + const GrVkTextureInfo* backendTex = reinterpret_cast<const GrVkTextureInfo*>(backendObj);
|
| +
|
| + // check basic borrowed creation
|
| + GrBackendTextureDesc desc;
|
| + desc.fFlags = kRenderTarget_GrBackendTextureFlag;
|
| + desc.fConfig = kPixelConfig;
|
| + desc.fWidth = kW;
|
| + desc.fHeight = kH;
|
| + desc.fTextureHandle = backendObj;
|
| + GrTexture* tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, tex);
|
| + tex->unref();
|
| +
|
| + // image is null
|
| + GrVkTextureInfo backendCopy = *backendTex;
|
| + backendCopy.fImage = VK_NULL_HANDLE;
|
| + desc.fTextureHandle = (GrBackendObject)&backendCopy;
|
| + tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| +
|
| + // alloc is null
|
| + backendCopy.fImage = backendTex->fImage;
|
| + backendCopy.fAlloc = VK_NULL_HANDLE;
|
| + tex = gpu->wrapBackendTexture(desc, kBorrow_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, !tex);
|
| +
|
| + // check adopt creation
|
| + backendCopy.fAlloc = backendTex->fAlloc;
|
| + tex = gpu->wrapBackendTexture(desc, kAdopt_GrWrapOwnership);
|
| + REPORTER_ASSERT(reporter, tex);
|
| + tex->unref();
|
| +
|
| + gpu->deleteTestingOnlyBackendTexture(backendObj, true);
|
| +}
|
| +
|
| +DEF_GPUTEST(VkWrapTests, reporter, factory) {
|
| + GrContextOptions opts;
|
| + opts.fSuppressPrints = true;
|
| + GrContextFactory debugFactory(opts);
|
| + for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
|
| + if (static_cast<GrContextFactory::GLContextType>(type) !=
|
| + GrContextFactory::kNative_GLContextType) {
|
| + continue;
|
| + }
|
| + GrContext* context = debugFactory.get(static_cast<GrContextFactory::GLContextType>(type));
|
| + if (context) {
|
| + wrap_tex_test(reporter, context);
|
| + wrap_rt_test(reporter, context);
|
| + wrap_trt_test(reporter, context);
|
| + }
|
| +
|
| + }
|
| +}
|
| +
|
| +#endif
|
|
|