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 |