diff options
author | jvanverth <jvanverth@google.com> | 2016-03-18 11:57:24 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-18 11:57:24 -0700 |
commit | fd359caf0cbdefd759d1c788d72faba3f65a6386 (patch) | |
tree | 541034405d63060f5b336bd9d739dd60cb13f99b /tests/VkWrapTests.cpp | |
parent | 89edf7a95ea694ba2c0a33adedf553c4183cdc19 (diff) |
Implement Vulkan GrBackendObject for textures.
BUG=skia:5043
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1808263002
Review URL: https://codereview.chromium.org/1808263002
Diffstat (limited to 'tests/VkWrapTests.cpp')
-rwxr-xr-x | tests/VkWrapTests.cpp | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp new file mode 100755 index 0000000000..fe954fa2c2 --- /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 |