blob: 58c7697fd68af20d2c94f9fa0a59cb8be30be752 [file] [log] [blame]
Greg Daniel94403452017-04-18 15:52:36 -04001/*
2 * Copyright 2017 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#ifndef GrBackendSurface_DEFINED
9#define GrBackendSurface_DEFINED
10
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "include/gpu/GrTypes.h"
12#include "include/gpu/gl/GrGLTypes.h"
13#include "include/gpu/mock/GrMockTypes.h"
14#include "include/gpu/vk/GrVkTypes.h"
15#include "include/private/GrVkTypesPriv.h"
Greg Daniel52e16d92018-04-10 09:34:07 -040016
17class GrVkImageLayout;
Greg Daniel94403452017-04-18 15:52:36 -040018
Timothy Liang4e85e802018-06-28 16:37:18 -040019#ifdef SK_METAL
Mike Kleinc0bd9f92019-04-23 12:05:21 -050020#include "include/gpu/mtl/GrMtlTypes.h"
Christopher Cameron186a2952019-05-24 13:22:32 -070021#include "include/private/GrMtlTypesPriv.h"
Timothy Liang4e85e802018-06-28 16:37:18 -040022#endif
23
Robert Phillips8caf85f2018-04-05 09:30:38 -040024#if !SK_SUPPORT_GPU
25
26// SkSurface and SkImage rely on a minimal version of these always being available
27class SK_API GrBackendTexture {
28public:
29 GrBackendTexture() {}
30
31 bool isValid() const { return false; }
32};
33
34class SK_API GrBackendRenderTarget {
35public:
36 GrBackendRenderTarget() {}
37
38 bool isValid() const { return false; }
39};
40#else
41
Robert Phillipsfc711a22018-02-13 17:03:00 -050042class SK_API GrBackendFormat {
43public:
44 // Creates an invalid backend format.
45 GrBackendFormat() : fValid(false) {}
46
47 static GrBackendFormat MakeGL(GrGLenum format, GrGLenum target) {
48 return GrBackendFormat(format, target);
49 }
50
Greg Daniela8d92112018-03-09 12:05:04 -050051 static GrBackendFormat MakeVk(VkFormat format) {
Greg Daniel7e000222018-12-03 10:08:21 -050052 return GrBackendFormat(format, GrVkYcbcrConversionInfo());
Robert Phillipsfc711a22018-02-13 17:03:00 -050053 }
Robert Phillipsfc711a22018-02-13 17:03:00 -050054
Greg Daniel7e000222018-12-03 10:08:21 -050055 // This is used for external textures and the VkFormat is assumed to be VK_FORMAT_UNDEFINED.
56 // This call is only supported on Android since the GrVkYcbcrConvesionInfo contains an android
57 // external format.
58 static GrBackendFormat MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo);
59
Timothy Liang4e85e802018-06-28 16:37:18 -040060#ifdef SK_METAL
61 static GrBackendFormat MakeMtl(GrMTLPixelFormat format) {
62 return GrBackendFormat(format);
63 }
64#endif
65
Robert Phillipsfc711a22018-02-13 17:03:00 -050066 static GrBackendFormat MakeMock(GrPixelConfig config) {
67 return GrBackendFormat(config);
68 }
69
Greg Daniel45723ac2018-11-30 10:12:43 -050070 bool operator==(const GrBackendFormat& that) const;
71 bool operator!=(const GrBackendFormat& that) const { return !(*this == that); }
72
Greg Daniel4065d452018-11-16 15:43:41 -050073 GrBackendApi backend() const { return fBackend; }
74 GrTextureType textureType() const { return fTextureType; }
Robert Phillipsfc711a22018-02-13 17:03:00 -050075
76 // If the backend API is GL, these return a pointer to the format and target. Otherwise
77 // it returns nullptr.
78 const GrGLenum* getGLFormat() const;
79 const GrGLenum* getGLTarget() const;
80
Robert Phillipsfc711a22018-02-13 17:03:00 -050081 // If the backend API is Vulkan, this returns a pointer to a VkFormat. Otherwise
82 // it returns nullptr
83 const VkFormat* getVkFormat() const;
Robert Phillipsfc711a22018-02-13 17:03:00 -050084
Greg Daniel7e000222018-12-03 10:08:21 -050085 const GrVkYcbcrConversionInfo* getVkYcbcrConversionInfo() const;
86
Timothy Liang4e85e802018-06-28 16:37:18 -040087#ifdef SK_METAL
88 // If the backend API is Metal, this returns a pointer to a GrMTLPixelFormat. Otherwise
89 // it returns nullptr
90 const GrMTLPixelFormat* getMtlFormat() const;
91#endif
92
Robert Phillipsfc711a22018-02-13 17:03:00 -050093 // If the backend API is Mock, this returns a pointer to a GrPixelConfig. Otherwise
94 // it returns nullptr.
95 const GrPixelConfig* getMockFormat() const;
96
Greg Daniel387ec9a2019-03-07 16:44:54 -050097 // If possible, copies the GrBackendFormat and forces the texture type to be Texture2D. If the
98 // GrBackendFormat was for Vulkan and it originally had a GrVkYcbcrConversionInfo, we will
99 // remove the conversion and set the format to be VK_FORMAT_R8G8B8A8_UNORM.
Greg Daniel4065d452018-11-16 15:43:41 -0500100 GrBackendFormat makeTexture2D() const;
101
Robert Phillipsfc711a22018-02-13 17:03:00 -0500102 // Returns true if the backend format has been initialized.
103 bool isValid() const { return fValid; }
104
105private:
106 GrBackendFormat(GrGLenum format, GrGLenum target);
107
Greg Daniel7e000222018-12-03 10:08:21 -0500108 GrBackendFormat(const VkFormat vkFormat, const GrVkYcbcrConversionInfo&);
Robert Phillipsfc711a22018-02-13 17:03:00 -0500109
Timothy Liang4e85e802018-06-28 16:37:18 -0400110#ifdef SK_METAL
111 GrBackendFormat(const GrMTLPixelFormat mtlFormat);
112#endif
113
Robert Phillipsfc711a22018-02-13 17:03:00 -0500114 GrBackendFormat(const GrPixelConfig config);
115
Greg Danielbdf12ad2018-10-12 09:31:11 -0400116 GrBackendApi fBackend;
Robert Phillips9dbcdcc2019-05-13 10:40:06 -0400117 bool fValid;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500118
119 union {
Greg Daniel4065d452018-11-16 15:43:41 -0500120 GrGLenum fGLFormat; // the sized, internal format of the GL resource
Greg Daniel7e000222018-12-03 10:08:21 -0500121 struct {
122 VkFormat fFormat;
123 GrVkYcbcrConversionInfo fYcbcrConversionInfo;
Robert Phillips9dbcdcc2019-05-13 10:40:06 -0400124 } fVk;
Timothy Liang4e85e802018-06-28 16:37:18 -0400125#ifdef SK_METAL
126 GrMTLPixelFormat fMtlFormat;
127#endif
128 GrPixelConfig fMockFormat;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500129 };
Greg Daniel4065d452018-11-16 15:43:41 -0500130 GrTextureType fTextureType;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500131};
132
Brian Salomonec045b42017-07-07 10:34:40 -0400133class SK_API GrBackendTexture {
Greg Daniel94403452017-04-18 15:52:36 -0400134public:
Brian Salomon8fe24272017-07-07 12:56:11 -0400135 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400136 GrBackendTexture() : fIsValid(false) {}
Brian Salomon8fe24272017-07-07 12:56:11 -0400137
Greg Daniele7d8da42017-12-04 11:23:19 -0500138 // The GrGLTextureInfo must have a valid fFormat.
139 GrBackendTexture(int width,
140 int height,
141 GrMipMapped,
142 const GrGLTextureInfo& glInfo);
143
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000144 GrBackendTexture(int width,
145 int height,
146 const GrVkImageInfo& vkInfo);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000147
Timothy Liang4e85e802018-06-28 16:37:18 -0400148#ifdef SK_METAL
Christopher Cameron186a2952019-05-24 13:22:32 -0700149 // This will take a strong reference to the MTLTexture in mtlInfo.
Timothy Liang4e85e802018-06-28 16:37:18 -0400150 GrBackendTexture(int width,
151 int height,
152 GrMipMapped,
153 const GrMtlTextureInfo& mtlInfo);
154#endif
155
Brian Salomon8fe24272017-07-07 12:56:11 -0400156 GrBackendTexture(int width,
157 int height,
Greg Daniel177e6952017-10-12 12:27:11 -0400158 GrMipMapped,
159 const GrMockTextureInfo& mockInfo);
160
Greg Daniel52e16d92018-04-10 09:34:07 -0400161 GrBackendTexture(const GrBackendTexture& that);
162
163 ~GrBackendTexture();
164
165 GrBackendTexture& operator=(const GrBackendTexture& that);
166
Greg Daniel94403452017-04-18 15:52:36 -0400167 int width() const { return fWidth; }
168 int height() const { return fHeight; }
Greg Daniel177e6952017-10-12 12:27:11 -0400169 bool hasMipMaps() const { return GrMipMapped::kYes == fMipMapped; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400170 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400171
Greg Daniel52e16d92018-04-10 09:34:07 -0400172 // If the backend API is GL, copies a snapshot of the GrGLTextureInfo struct into the passed in
173 // pointer and returns true. Otherwise returns false if the backend API is not GL.
174 bool getGLTextureInfo(GrGLTextureInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400175
Greg Daniel323fbcf2018-04-10 13:46:30 -0400176 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
Greg Daniel52e16d92018-04-10 09:34:07 -0400177 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
178 // state. Otherwise returns false if the backend API is not Vulkan.
179 bool getVkImageInfo(GrVkImageInfo*) const;
180
Greg Daniel323fbcf2018-04-10 13:46:30 -0400181 // Anytime the client changes the VkImageLayout of the VkImage captured by this
182 // GrBackendTexture, they must call this function to notify Skia of the changed layout.
Greg Daniel52e16d92018-04-10 09:34:07 -0400183 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000184
Timothy Liang4e85e802018-06-28 16:37:18 -0400185#ifdef SK_METAL
186 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
187 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
188 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
189#endif
190
Brian Salomonf391d0f2018-12-14 09:18:50 -0500191 // Get the GrBackendFormat for this texture (or an invalid format if this is not valid).
192 GrBackendFormat getBackendFormat() const;
193
Greg Daniel52e16d92018-04-10 09:34:07 -0400194 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
195 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
196 bool getMockTextureInfo(GrMockTextureInfo*) const;
Brian Salomon8fe24272017-07-07 12:56:11 -0400197
Eric Karl914a36b2017-10-12 12:44:50 -0700198 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400199 bool isValid() const { return fIsValid; }
Brian Salomon8fe24272017-07-07 12:56:11 -0400200
Brian Salomonaad83152019-05-24 10:16:35 -0400201 // Returns true if both textures are valid and refer to the same API texture.
202 bool isSameTexture(const GrBackendTexture&);
203
Robert Phillipsc5509952018-04-04 15:54:55 -0400204#if GR_TEST_UTILS
Greg Daniel108bb232018-07-03 16:18:29 -0400205 // We can remove the pixelConfig getter and setter once we remove the GrPixelConfig from the
206 // GrBackendTexture and plumb the GrPixelconfig manually throughout our code (or remove all use
207 // of GrPixelConfig in general).
208 GrPixelConfig pixelConfig() const { return fConfig; }
209 void setPixelConfig(GrPixelConfig config) { fConfig = config; }
210
Robert Phillipsc5509952018-04-04 15:54:55 -0400211 static bool TestingOnly_Equals(const GrBackendTexture& , const GrBackendTexture&);
212#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500213
Eric Karl914a36b2017-10-12 12:44:50 -0700214private:
Greg Daniel5254ccc2017-11-13 11:05:52 -0500215 // Friending for access to the GrPixelConfig
Greg Danielfaa095e2017-12-19 13:15:02 -0500216 friend class SkImage;
Brian Salomon6a426c12018-03-15 12:16:02 -0400217 friend class SkImage_Gpu;
Jim Van Verth8bbce0e2018-10-08 14:34:52 -0400218 friend class SkImage_GpuBase;
Jim Van Verthf49262d2018-10-02 12:07:20 -0400219 friend class SkImage_GpuYUVA;
Jim Van Verth8bbce0e2018-10-08 14:34:52 -0400220 friend class SkPromiseImageHelper;
Greg Daniel5254ccc2017-11-13 11:05:52 -0500221 friend class SkSurface;
Brian Salomonaad83152019-05-24 10:16:35 -0400222 friend class SkSurface_Gpu;
Greg Daniel108bb232018-07-03 16:18:29 -0400223 friend class GrAHardwareBufferImageGenerator;
Greg Daniele728f672018-01-17 10:52:04 -0500224 friend class GrBackendTextureImageGenerator;
Greg Danielf2336e42018-01-23 16:38:14 -0500225 friend class GrProxyProvider;
Greg Daniel5254ccc2017-11-13 11:05:52 -0500226 friend class GrGpu;
227 friend class GrGLGpu;
228 friend class GrVkGpu;
Timothy Liang4e85e802018-06-28 16:37:18 -0400229 friend class GrMtlGpu;
Greg Daniel057627f2018-03-14 15:51:58 -0400230 friend class PromiseImageHelper;
Robert Phillipsc5509952018-04-04 15:54:55 -0400231
Greg Daniel5254ccc2017-11-13 11:05:52 -0500232 GrPixelConfig config() const { return fConfig; }
233
Greg Daniel52e16d92018-04-10 09:34:07 -0400234 // Requires friending of GrVkGpu (done above already)
235 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
236
237 friend class GrVkTexture;
Greg Danielb4d89562018-10-03 18:44:49 +0000238#ifdef SK_VULKAN
Greg Daniel52e16d92018-04-10 09:34:07 -0400239 GrBackendTexture(int width,
240 int height,
241 const GrVkImageInfo& vkInfo,
242 sk_sp<GrVkImageLayout> layout);
243#endif
244
245 // Free and release and resources being held by the GrBackendTexture.
246 void cleanup();
247
Greg Daniel9ca30652018-04-06 09:27:20 -0400248 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400249 int fWidth; //<! width in pixels
250 int fHeight; //<! height in pixels
251 GrPixelConfig fConfig;
Greg Daniel177e6952017-10-12 12:27:11 -0400252 GrMipMapped fMipMapped;
Greg Danielbdf12ad2018-10-12 09:31:11 -0400253 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400254
255 union {
Robert Phillipsfad9e3f2017-06-13 22:16:08 +0000256 GrGLTextureInfo fGLInfo;
Greg Daniel52e16d92018-04-10 09:34:07 -0400257 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon8fe24272017-07-07 12:56:11 -0400258 GrMockTextureInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400259 };
Christopher Cameron186a2952019-05-24 13:22:32 -0700260#ifdef SK_METAL
261 GrMtlBackendSurfaceInfo fMtlInfo;
262#endif
Greg Daniel94403452017-04-18 15:52:36 -0400263};
264
Brian Salomonec045b42017-07-07 10:34:40 -0400265class SK_API GrBackendRenderTarget {
Greg Daniel94403452017-04-18 15:52:36 -0400266public:
Robert Phillips57e08282017-11-16 14:59:48 -0500267 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400268 GrBackendRenderTarget() : fIsValid(false) {}
Robert Phillips57e08282017-11-16 14:59:48 -0500269
Greg Danielfaa095e2017-12-19 13:15:02 -0500270 // The GrGLTextureInfo must have a valid fFormat.
271 GrBackendRenderTarget(int width,
272 int height,
273 int sampleCnt,
274 int stencilBits,
275 const GrGLFramebufferInfo& glInfo);
276
Brian Salomonafdc6b12018-03-09 12:02:32 -0500277 /** Deprecated, use version that does not take stencil bits. */
Greg Daniel94403452017-04-18 15:52:36 -0400278 GrBackendRenderTarget(int width,
279 int height,
280 int sampleCnt,
281 int stencilBits,
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000282 const GrVkImageInfo& vkInfo);
Brian Salomonafdc6b12018-03-09 12:02:32 -0500283 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo);
Greg Daniel94403452017-04-18 15:52:36 -0400284
Timothy Liang4e85e802018-06-28 16:37:18 -0400285#ifdef SK_METAL
Christopher Cameron186a2952019-05-24 13:22:32 -0700286 // This will take a strong reference to the MTLTexture in mtlInfo.
Timothy Liang4e85e802018-06-28 16:37:18 -0400287 GrBackendRenderTarget(int width,
288 int height,
289 int sampleCnt,
290 const GrMtlTextureInfo& mtlInfo);
291#endif
292
Brian Salomon0c51eea2018-03-09 17:02:09 -0500293 GrBackendRenderTarget(int width,
294 int height,
295 int sampleCnt,
296 int stencilBits,
297 const GrMockRenderTargetInfo& mockInfo);
298
Greg Daniel323fbcf2018-04-10 13:46:30 -0400299 ~GrBackendRenderTarget();
300
301 GrBackendRenderTarget(const GrBackendRenderTarget& that);
302 GrBackendRenderTarget& operator=(const GrBackendRenderTarget&);
303
Greg Daniel94403452017-04-18 15:52:36 -0400304 int width() const { return fWidth; }
305 int height() const { return fHeight; }
306 int sampleCnt() const { return fSampleCnt; }
307 int stencilBits() const { return fStencilBits; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400308 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400309
Greg Daniel323fbcf2018-04-10 13:46:30 -0400310 // If the backend API is GL, copies a snapshot of the GrGLFramebufferInfo struct into the passed
311 // in pointer and returns true. Otherwise returns false if the backend API is not GL.
312 bool getGLFramebufferInfo(GrGLFramebufferInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400313
Greg Daniel323fbcf2018-04-10 13:46:30 -0400314 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
315 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
316 // state. Otherwise returns false if the backend API is not Vulkan.
317 bool getVkImageInfo(GrVkImageInfo*) const;
318
319 // Anytime the client changes the VkImageLayout of the VkImage captured by this
320 // GrBackendRenderTarget, they must call this function to notify Skia of the changed layout.
321 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000322
Timothy Liang4e85e802018-06-28 16:37:18 -0400323#ifdef SK_METAL
324 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
325 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
326 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
327#endif
328
Greg Daniel323fbcf2018-04-10 13:46:30 -0400329 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
330 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
331 bool getMockRenderTargetInfo(GrMockRenderTargetInfo*) const;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500332
Robert Phillips57e08282017-11-16 14:59:48 -0500333 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400334 bool isValid() const { return fIsValid; }
Robert Phillips57e08282017-11-16 14:59:48 -0500335
Robert Phillips8caf85f2018-04-05 09:30:38 -0400336
337#if GR_TEST_UTILS
Greg Daniel108bb232018-07-03 16:18:29 -0400338 // We can remove the pixelConfig getter and setter once we remove the pixel config from the
339 // GrBackendRenderTarget and plumb the pixel config manually throughout our code (or remove all
340 // use of GrPixelConfig in general).
341 GrPixelConfig pixelConfig() const { return fConfig; }
342 void setPixelConfig(GrPixelConfig config) { fConfig = config; }
343
Robert Phillips8caf85f2018-04-05 09:30:38 -0400344 static bool TestingOnly_Equals(const GrBackendRenderTarget&, const GrBackendRenderTarget&);
345#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500346
Greg Daniel94403452017-04-18 15:52:36 -0400347private:
Greg Daniel5254ccc2017-11-13 11:05:52 -0500348 // Friending for access to the GrPixelConfig
349 friend class SkSurface;
Greg Danielfaa095e2017-12-19 13:15:02 -0500350 friend class SkSurface_Gpu;
351 friend class SkImage_Gpu;
Greg Daniel5254ccc2017-11-13 11:05:52 -0500352 friend class GrGpu;
353 friend class GrGLGpu;
Greg Daniel2a303902018-02-20 10:25:54 -0500354 friend class GrProxyProvider;
Greg Daniel5254ccc2017-11-13 11:05:52 -0500355 friend class GrVkGpu;
Timothy Liang4e85e802018-06-28 16:37:18 -0400356 friend class GrMtlGpu;
Greg Daniel5254ccc2017-11-13 11:05:52 -0500357 GrPixelConfig config() const { return fConfig; }
358
Greg Daniel323fbcf2018-04-10 13:46:30 -0400359 // Requires friending of GrVkGpu (done above already)
360 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
361
362 friend class GrVkRenderTarget;
363 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo,
364 sk_sp<GrVkImageLayout> layout);
Greg Daniel323fbcf2018-04-10 13:46:30 -0400365
366 // Free and release and resources being held by the GrBackendTexture.
367 void cleanup();
368
Greg Daniel9ca30652018-04-06 09:27:20 -0400369 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400370 int fWidth; //<! width in pixels
371 int fHeight; //<! height in pixels
372
373 int fSampleCnt;
374 int fStencilBits;
375 GrPixelConfig fConfig;
Greg Danielbdf12ad2018-10-12 09:31:11 -0400376 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400377
378 union {
Robert Phillipsfad9e3f2017-06-13 22:16:08 +0000379 GrGLFramebufferInfo fGLInfo;
Greg Daniel323fbcf2018-04-10 13:46:30 -0400380 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500381 GrMockRenderTargetInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400382 };
Christopher Cameron186a2952019-05-24 13:22:32 -0700383#ifdef SK_METAL
384 GrMtlBackendSurfaceInfo fMtlInfo;
385#endif
Greg Daniel94403452017-04-18 15:52:36 -0400386};
387
388#endif
389
Robert Phillips8caf85f2018-04-05 09:30:38 -0400390#endif
391