blob: 312cc01b6c5b1ba6babe08b12d9f2cbe4a86d145 [file] [log] [blame]
jvanverthfd359ca2016-03-18 11:57:24 -07001/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8// This is a GPU-backend specific test. It relies on static intializers to work
9
10#include "SkTypes.h"
11
Brian Osmanc7ad40f2018-05-31 14:27:17 -040012#if defined(SK_VULKAN)
jvanverthfd359ca2016-03-18 11:57:24 -070013
Robert Phillipsf35fd8d2018-01-22 10:48:15 -050014#include "GrContextPriv.h"
jvanverthfd359ca2016-03-18 11:57:24 -070015#include "GrContextFactory.h"
Robert Phillips2890fbf2017-07-26 15:48:41 -040016#include "GrRenderTarget.h"
jvanverthfd359ca2016-03-18 11:57:24 -070017#include "GrTest.h"
Robert Phillips646e4292017-06-13 12:44:56 -040018#include "GrTexture.h"
19
jvanverthfd359ca2016-03-18 11:57:24 -070020#include "Test.h"
21#include "vk/GrVkCaps.h"
22#include "vk/GrVkGpu.h"
23#include "vk/GrVkMemory.h"
24#include "vk/GrVkTypes.h"
25
kkinnunen2ae4b2e2016-03-31 08:08:20 -070026using sk_gpu_test::GrContextFactory;
27
jvanverthfd359ca2016-03-18 11:57:24 -070028const int kW = 1024;
29const int kH = 1024;
30const GrPixelConfig kPixelConfig = kRGBA_8888_GrPixelConfig;
31
32void wrap_tex_test(skiatest::Reporter* reporter, GrContext* context) {
33
Robert Phillipsf35fd8d2018-01-22 10:48:15 -050034 GrVkGpu* gpu = static_cast<GrVkGpu*>(context->contextPriv().getGpu());
jvanverthfd359ca2016-03-18 11:57:24 -070035
Robert Phillipsd21b2a52017-12-12 13:01:25 -050036 GrBackendTexture origBackendTex = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH,
37 kPixelConfig, false,
38 GrMipMapped::kNo);
Greg Daniel52e16d92018-04-10 09:34:07 -040039 GrVkImageInfo imageInfo;
40 SkAssertResult(origBackendTex.getVkImageInfo(&imageInfo));
jvanverthfd359ca2016-03-18 11:57:24 -070041
Robert Phillipsd21b2a52017-12-12 13:01:25 -050042 sk_sp<GrTexture> tex = gpu->wrapBackendTexture(origBackendTex, kBorrow_GrWrapOwnership);
jvanverthfd359ca2016-03-18 11:57:24 -070043 REPORTER_ASSERT(reporter, tex);
jvanverthfd359ca2016-03-18 11:57:24 -070044
45 // image is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -050046 {
Greg Daniel52e16d92018-04-10 09:34:07 -040047 GrVkImageInfo backendCopy = imageInfo;
Robert Phillipsd21b2a52017-12-12 13:01:25 -050048 backendCopy.fImage = VK_NULL_HANDLE;
49 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -040050 backendTex.setPixelConfig(kPixelConfig);
Robert Phillipsd21b2a52017-12-12 13:01:25 -050051 tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership);
52 REPORTER_ASSERT(reporter, !tex);
53 tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
54 REPORTER_ASSERT(reporter, !tex);
55 }
jvanverthfd359ca2016-03-18 11:57:24 -070056
57 // alloc is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -050058 {
Greg Daniel52e16d92018-04-10 09:34:07 -040059 GrVkImageInfo backendCopy = imageInfo;
Greg Daniel8385a8a2018-02-26 13:29:37 -050060 backendCopy.fAlloc = GrVkAlloc();
Robert Phillipsd21b2a52017-12-12 13:01:25 -050061 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -040062 backendTex.setPixelConfig(kPixelConfig);
Robert Phillipsd21b2a52017-12-12 13:01:25 -050063 tex = gpu->wrapBackendTexture(backendTex, kBorrow_GrWrapOwnership);
64 REPORTER_ASSERT(reporter, !tex);
65 tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
66 REPORTER_ASSERT(reporter, !tex);
67 }
68
Stan Iliev7fa5c312017-04-19 00:23:39 +000069 // check adopt creation
Robert Phillipsd21b2a52017-12-12 13:01:25 -050070 {
Greg Daniel52e16d92018-04-10 09:34:07 -040071 GrVkImageInfo backendCopy = imageInfo;
Robert Phillipsd21b2a52017-12-12 13:01:25 -050072 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -040073 backendTex.setPixelConfig(kPixelConfig);
Robert Phillipsd21b2a52017-12-12 13:01:25 -050074 tex = gpu->wrapBackendTexture(backendTex, kAdopt_GrWrapOwnership);
Greg Daniel7ef28f32017-04-20 16:41:55 +000075
Robert Phillipsd21b2a52017-12-12 13:01:25 -050076 REPORTER_ASSERT(reporter, tex);
77 }
jvanverthfd359ca2016-03-18 11:57:24 -070078}
79
80void wrap_rt_test(skiatest::Reporter* reporter, GrContext* context) {
Robert Phillipsf35fd8d2018-01-22 10:48:15 -050081 GrVkGpu* gpu = static_cast<GrVkGpu*>(context->contextPriv().getGpu());
jvanverthfd359ca2016-03-18 11:57:24 -070082
Greg Daniel8a3f55c2018-03-14 17:32:12 +000083 GrBackendTexture origBackendTex = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH,
84 kPixelConfig, true,
85 GrMipMapped::kNo);
Greg Daniel108bb232018-07-03 16:18:29 -040086
Greg Daniel52e16d92018-04-10 09:34:07 -040087 GrVkImageInfo imageInfo;
88 SkAssertResult(origBackendTex.getVkImageInfo(&imageInfo));
jvanverthfd359ca2016-03-18 11:57:24 -070089
Greg Daniel52e16d92018-04-10 09:34:07 -040090 GrBackendRenderTarget origBackendRT(kW, kH, 1, 0, imageInfo);
Greg Daniel108bb232018-07-03 16:18:29 -040091 origBackendRT.setPixelConfig(kPixelConfig);
Greg Danielbcf612b2017-05-01 13:50:58 +000092
Robert Phillipsd21b2a52017-12-12 13:01:25 -050093 sk_sp<GrRenderTarget> rt = gpu->wrapBackendRenderTarget(origBackendRT);
jvanverthfd359ca2016-03-18 11:57:24 -070094 REPORTER_ASSERT(reporter, rt);
jvanverthfd359ca2016-03-18 11:57:24 -070095
96 // image is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -050097 {
Greg Daniel52e16d92018-04-10 09:34:07 -040098 GrVkImageInfo backendCopy = imageInfo;
Robert Phillipsd21b2a52017-12-12 13:01:25 -050099 backendCopy.fImage = VK_NULL_HANDLE;
Brian Salomonbdecacf2018-02-02 20:32:49 -0500100 GrBackendRenderTarget backendRT(kW, kH, 1, 0, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -0400101 backendRT.setPixelConfig(kPixelConfig);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500102 rt = gpu->wrapBackendRenderTarget(backendRT);
103 REPORTER_ASSERT(reporter, !rt);
104 }
jvanverthfd359ca2016-03-18 11:57:24 -0700105
106 // alloc is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500107 {
Greg Daniel52e16d92018-04-10 09:34:07 -0400108 GrVkImageInfo backendCopy = imageInfo;
Greg Daniel8385a8a2018-02-26 13:29:37 -0500109 backendCopy.fAlloc = GrVkAlloc();
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500110 // can wrap null alloc
Brian Salomonbdecacf2018-02-02 20:32:49 -0500111 GrBackendRenderTarget backendRT(kW, kH, 1, 0, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -0400112 backendRT.setPixelConfig(kPixelConfig);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500113 rt = gpu->wrapBackendRenderTarget(backendRT);
114 REPORTER_ASSERT(reporter, rt);
115 }
jvanverthfd359ca2016-03-18 11:57:24 -0700116
Greg Daniel8a3f55c2018-03-14 17:32:12 +0000117 // When we wrapBackendRenderTarget it is always borrowed, so we must make sure to free the
118 // resource when we're done.
119 gpu->deleteTestingOnlyBackendTexture(origBackendTex);
jvanverthfd359ca2016-03-18 11:57:24 -0700120}
121
122void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) {
Robert Phillipsf35fd8d2018-01-22 10:48:15 -0500123 GrVkGpu* gpu = static_cast<GrVkGpu*>(context->contextPriv().getGpu());
jvanverthfd359ca2016-03-18 11:57:24 -0700124
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500125 GrBackendTexture origBackendTex = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH,
126 kPixelConfig, true,
127 GrMipMapped::kNo);
Greg Daniel52e16d92018-04-10 09:34:07 -0400128 GrVkImageInfo imageInfo;
129 SkAssertResult(origBackendTex.getVkImageInfo(&imageInfo));
jvanverthfd359ca2016-03-18 11:57:24 -0700130
Brian Salomonbdecacf2018-02-02 20:32:49 -0500131 sk_sp<GrTexture> tex =
132 gpu->wrapRenderableBackendTexture(origBackendTex, 1, kBorrow_GrWrapOwnership);
jvanverthfd359ca2016-03-18 11:57:24 -0700133 REPORTER_ASSERT(reporter, tex);
jvanverthfd359ca2016-03-18 11:57:24 -0700134
135 // image is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500136 {
Greg Daniel52e16d92018-04-10 09:34:07 -0400137 GrVkImageInfo backendCopy = imageInfo;
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500138 backendCopy.fImage = VK_NULL_HANDLE;
139 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -0400140 backendTex.setPixelConfig(kPixelConfig);
Brian Salomonbdecacf2018-02-02 20:32:49 -0500141 tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kBorrow_GrWrapOwnership);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500142 REPORTER_ASSERT(reporter, !tex);
Brian Salomonbdecacf2018-02-02 20:32:49 -0500143 tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500144 REPORTER_ASSERT(reporter, !tex);
145 }
jvanverthfd359ca2016-03-18 11:57:24 -0700146
147 // alloc is null
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500148 {
Greg Daniel52e16d92018-04-10 09:34:07 -0400149 GrVkImageInfo backendCopy = imageInfo;
Greg Daniel8385a8a2018-02-26 13:29:37 -0500150 backendCopy.fAlloc = GrVkAlloc();
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500151 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -0400152 backendTex.setPixelConfig(kPixelConfig);
Brian Salomonbdecacf2018-02-02 20:32:49 -0500153 tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kBorrow_GrWrapOwnership);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500154 REPORTER_ASSERT(reporter, !tex);
Brian Salomonbdecacf2018-02-02 20:32:49 -0500155 tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500156 REPORTER_ASSERT(reporter, !tex);
157 }
jvanverthfd359ca2016-03-18 11:57:24 -0700158
159 // check adopt creation
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500160 {
Greg Daniel52e16d92018-04-10 09:34:07 -0400161 GrVkImageInfo backendCopy = imageInfo;
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500162 GrBackendTexture backendTex = GrBackendTexture(kW, kH, backendCopy);
Greg Daniel108bb232018-07-03 16:18:29 -0400163 backendTex.setPixelConfig(kPixelConfig);
Brian Salomonbdecacf2018-02-02 20:32:49 -0500164 tex = gpu->wrapRenderableBackendTexture(backendTex, 1, kAdopt_GrWrapOwnership);
Robert Phillipsd21b2a52017-12-12 13:01:25 -0500165 REPORTER_ASSERT(reporter, tex);
166 }
jvanverthfd359ca2016-03-18 11:57:24 -0700167}
168
bsalomondc0fcd42016-04-11 14:21:33 -0700169DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkWrapTests, reporter, ctxInfo) {
bsalomon8b7451a2016-05-11 06:33:06 -0700170 wrap_tex_test(reporter, ctxInfo.grContext());
171 wrap_rt_test(reporter, ctxInfo.grContext());
172 wrap_trt_test(reporter, ctxInfo.grContext());
jvanverthfd359ca2016-03-18 11:57:24 -0700173}
174
175#endif