aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/VkWrapTests.cpp
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2016-03-18 11:57:24 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-03-18 11:57:24 -0700
commitfd359caf0cbdefd759d1c788d72faba3f65a6386 (patch)
tree541034405d63060f5b336bd9d739dd60cb13f99b /tests/VkWrapTests.cpp
parent89edf7a95ea694ba2c0a33adedf553c4183cdc19 (diff)
Implement Vulkan GrBackendObject for textures.
Diffstat (limited to 'tests/VkWrapTests.cpp')
-rwxr-xr-xtests/VkWrapTests.cpp179
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