blob: 101c998b98f66674ee80fb9c5d7343f09cc062a5 [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"
Brian Salomone2826ab2019-06-04 15:58:31 -040015#include "include/private/GrGLTypesPriv.h"
Mike Kleinc0bd9f92019-04-23 12:05:21 -050016#include "include/private/GrVkTypesPriv.h"
Greg Daniel52e16d92018-04-10 09:34:07 -040017
Stephen White985741a2019-07-18 11:43:45 -040018#ifdef SK_DAWN
19#include "include/gpu/dawn/GrDawnTypes.h"
20#endif
21
Greg Daniel52e16d92018-04-10 09:34:07 -040022class GrVkImageLayout;
Brian Salomone2826ab2019-06-04 15:58:31 -040023class GrGLTextureParameters;
Greg Daniel94403452017-04-18 15:52:36 -040024
Stephen White985741a2019-07-18 11:43:45 -040025#ifdef SK_DAWN
26#include "dawn/dawncpp.h"
27#endif
28
Timothy Liang4e85e802018-06-28 16:37:18 -040029#ifdef SK_METAL
Mike Kleinc0bd9f92019-04-23 12:05:21 -050030#include "include/gpu/mtl/GrMtlTypes.h"
Timothy Liang4e85e802018-06-28 16:37:18 -040031#endif
32
Robert Phillips8caf85f2018-04-05 09:30:38 -040033#if !SK_SUPPORT_GPU
34
35// SkSurface and SkImage rely on a minimal version of these always being available
36class SK_API GrBackendTexture {
37public:
38 GrBackendTexture() {}
39
40 bool isValid() const { return false; }
41};
42
43class SK_API GrBackendRenderTarget {
44public:
45 GrBackendRenderTarget() {}
46
47 bool isValid() const { return false; }
48};
49#else
50
Robert Phillipsfc711a22018-02-13 17:03:00 -050051class SK_API GrBackendFormat {
52public:
53 // Creates an invalid backend format.
Robert Phillipsb2adbef2019-07-02 16:33:05 -040054 GrBackendFormat() {}
55
56 GrBackendFormat(const GrBackendFormat& src);
Robert Phillipsfc711a22018-02-13 17:03:00 -050057
58 static GrBackendFormat MakeGL(GrGLenum format, GrGLenum target) {
59 return GrBackendFormat(format, target);
60 }
61
Greg Daniela8d92112018-03-09 12:05:04 -050062 static GrBackendFormat MakeVk(VkFormat format) {
Greg Daniel7e000222018-12-03 10:08:21 -050063 return GrBackendFormat(format, GrVkYcbcrConversionInfo());
Robert Phillipsfc711a22018-02-13 17:03:00 -050064 }
Robert Phillipsfc711a22018-02-13 17:03:00 -050065
Greg Daniel7e000222018-12-03 10:08:21 -050066 // This is used for external textures and the VkFormat is assumed to be VK_FORMAT_UNDEFINED.
67 // This call is only supported on Android since the GrVkYcbcrConvesionInfo contains an android
68 // external format.
69 static GrBackendFormat MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo);
70
Stephen White985741a2019-07-18 11:43:45 -040071#ifdef SK_DAWN
72 static GrBackendFormat MakeDawn(dawn::TextureFormat format) {
73 return GrBackendFormat(format);
74 }
75#endif
76
Timothy Liang4e85e802018-06-28 16:37:18 -040077#ifdef SK_METAL
78 static GrBackendFormat MakeMtl(GrMTLPixelFormat format) {
79 return GrBackendFormat(format);
80 }
81#endif
82
Greg Daniele877dce2019-07-11 10:52:43 -040083 static GrBackendFormat MakeMock(GrColorType colorType) {
84 return GrBackendFormat(colorType);
Robert Phillipsfc711a22018-02-13 17:03:00 -050085 }
86
Greg Daniel45723ac2018-11-30 10:12:43 -050087 bool operator==(const GrBackendFormat& that) const;
88 bool operator!=(const GrBackendFormat& that) const { return !(*this == that); }
89
Greg Daniel4065d452018-11-16 15:43:41 -050090 GrBackendApi backend() const { return fBackend; }
91 GrTextureType textureType() const { return fTextureType; }
Robert Phillipsfc711a22018-02-13 17:03:00 -050092
93 // If the backend API is GL, these return a pointer to the format and target. Otherwise
Robert Phillipsa5e78be2019-07-09 12:34:38 -040094 // they return nullptr.
Robert Phillipsfc711a22018-02-13 17:03:00 -050095 const GrGLenum* getGLFormat() const;
96 const GrGLenum* getGLTarget() const;
97
Robert Phillipsfc711a22018-02-13 17:03:00 -050098 // If the backend API is Vulkan, this returns a pointer to a VkFormat. Otherwise
99 // it returns nullptr
100 const VkFormat* getVkFormat() const;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500101
Greg Daniel7e000222018-12-03 10:08:21 -0500102 const GrVkYcbcrConversionInfo* getVkYcbcrConversionInfo() const;
103
Stephen White985741a2019-07-18 11:43:45 -0400104#ifdef SK_DAWN
105 const dawn::TextureFormat* getDawnFormat() const;
106#endif
107
Timothy Liang4e85e802018-06-28 16:37:18 -0400108#ifdef SK_METAL
109 // If the backend API is Metal, this returns a pointer to a GrMTLPixelFormat. Otherwise
110 // it returns nullptr
111 const GrMTLPixelFormat* getMtlFormat() const;
112#endif
113
Greg Daniele877dce2019-07-11 10:52:43 -0400114 // If the backend API is Mock, this returns a pointer to the colorType.
115 // Otherwise it returns nullptr.
Robert Phillipsa5e78be2019-07-09 12:34:38 -0400116 const GrColorType* getMockColorType() const;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500117
Greg Daniel387ec9a2019-03-07 16:44:54 -0500118 // If possible, copies the GrBackendFormat and forces the texture type to be Texture2D. If the
119 // GrBackendFormat was for Vulkan and it originally had a GrVkYcbcrConversionInfo, we will
120 // remove the conversion and set the format to be VK_FORMAT_R8G8B8A8_UNORM.
Greg Daniel4065d452018-11-16 15:43:41 -0500121 GrBackendFormat makeTexture2D() const;
122
Robert Phillipsfc711a22018-02-13 17:03:00 -0500123 // Returns true if the backend format has been initialized.
124 bool isValid() const { return fValid; }
125
126private:
127 GrBackendFormat(GrGLenum format, GrGLenum target);
128
Greg Daniel7e000222018-12-03 10:08:21 -0500129 GrBackendFormat(const VkFormat vkFormat, const GrVkYcbcrConversionInfo&);
Robert Phillipsfc711a22018-02-13 17:03:00 -0500130
Stephen White985741a2019-07-18 11:43:45 -0400131#ifdef SK_DAWN
132 GrBackendFormat(dawn::TextureFormat format);
133#endif
134
Timothy Liang4e85e802018-06-28 16:37:18 -0400135#ifdef SK_METAL
136 GrBackendFormat(const GrMTLPixelFormat mtlFormat);
137#endif
138
Greg Daniele877dce2019-07-11 10:52:43 -0400139 GrBackendFormat(GrColorType colorType);
Robert Phillipsfc711a22018-02-13 17:03:00 -0500140
Robert Phillipsb2adbef2019-07-02 16:33:05 -0400141 GrBackendApi fBackend = GrBackendApi::kMock;
142 bool fValid = false;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500143
144 union {
Greg Daniel4065d452018-11-16 15:43:41 -0500145 GrGLenum fGLFormat; // the sized, internal format of the GL resource
Greg Daniel7e000222018-12-03 10:08:21 -0500146 struct {
147 VkFormat fFormat;
148 GrVkYcbcrConversionInfo fYcbcrConversionInfo;
Robert Phillips9dbcdcc2019-05-13 10:40:06 -0400149 } fVk;
Stephen White985741a2019-07-18 11:43:45 -0400150#ifdef SK_DAWN
151 dawn::TextureFormat fDawnFormat;
152#endif
153
Timothy Liang4e85e802018-06-28 16:37:18 -0400154#ifdef SK_METAL
155 GrMTLPixelFormat fMtlFormat;
156#endif
Greg Daniele877dce2019-07-11 10:52:43 -0400157 GrColorType fMockColorType;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500158 };
Robert Phillipsb2adbef2019-07-02 16:33:05 -0400159 GrTextureType fTextureType = GrTextureType::kNone;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500160};
161
Brian Salomonec045b42017-07-07 10:34:40 -0400162class SK_API GrBackendTexture {
Greg Daniel94403452017-04-18 15:52:36 -0400163public:
Brian Salomon8fe24272017-07-07 12:56:11 -0400164 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400165 GrBackendTexture() : fIsValid(false) {}
Brian Salomon8fe24272017-07-07 12:56:11 -0400166
Greg Daniele7d8da42017-12-04 11:23:19 -0500167 // The GrGLTextureInfo must have a valid fFormat.
168 GrBackendTexture(int width,
169 int height,
170 GrMipMapped,
171 const GrGLTextureInfo& glInfo);
172
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000173 GrBackendTexture(int width,
174 int height,
175 const GrVkImageInfo& vkInfo);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000176
Timothy Liang4e85e802018-06-28 16:37:18 -0400177#ifdef SK_METAL
178 GrBackendTexture(int width,
179 int height,
180 GrMipMapped,
181 const GrMtlTextureInfo& mtlInfo);
182#endif
183
Stephen White985741a2019-07-18 11:43:45 -0400184#ifdef SK_DAWN
185 GrBackendTexture(int width,
186 int height,
187 const GrDawnImageInfo& dawnInfo);
188#endif
189
Brian Salomon8fe24272017-07-07 12:56:11 -0400190 GrBackendTexture(int width,
191 int height,
Greg Daniel177e6952017-10-12 12:27:11 -0400192 GrMipMapped,
193 const GrMockTextureInfo& mockInfo);
194
Greg Daniel52e16d92018-04-10 09:34:07 -0400195 GrBackendTexture(const GrBackendTexture& that);
196
197 ~GrBackendTexture();
198
199 GrBackendTexture& operator=(const GrBackendTexture& that);
200
Greg Daniel94403452017-04-18 15:52:36 -0400201 int width() const { return fWidth; }
202 int height() const { return fHeight; }
Greg Daniel177e6952017-10-12 12:27:11 -0400203 bool hasMipMaps() const { return GrMipMapped::kYes == fMipMapped; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400204 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400205
Greg Daniel52e16d92018-04-10 09:34:07 -0400206 // If the backend API is GL, copies a snapshot of the GrGLTextureInfo struct into the passed in
207 // pointer and returns true. Otherwise returns false if the backend API is not GL.
208 bool getGLTextureInfo(GrGLTextureInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400209
Brian Salomone2826ab2019-06-04 15:58:31 -0400210 // Call this to indicate that the texture parameters have been modified in the GL context
211 // externally to GrContext.
212 void glTextureParametersModified();
213
Stephen White985741a2019-07-18 11:43:45 -0400214#ifdef SK_DAWN
215 // If the backend API is Dawn, copies a snapshot of the GrDawnImageInfo struct into the passed
216 // in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
217 bool getDawnImageInfo(GrDawnImageInfo*) const;
218#endif
219
Greg Daniel323fbcf2018-04-10 13:46:30 -0400220 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
Greg Daniel52e16d92018-04-10 09:34:07 -0400221 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
222 // state. Otherwise returns false if the backend API is not Vulkan.
223 bool getVkImageInfo(GrVkImageInfo*) const;
224
Greg Daniel323fbcf2018-04-10 13:46:30 -0400225 // Anytime the client changes the VkImageLayout of the VkImage captured by this
226 // GrBackendTexture, they must call this function to notify Skia of the changed layout.
Greg Daniel52e16d92018-04-10 09:34:07 -0400227 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000228
Timothy Liang4e85e802018-06-28 16:37:18 -0400229#ifdef SK_METAL
230 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
231 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
232 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
233#endif
234
Brian Salomonf391d0f2018-12-14 09:18:50 -0500235 // Get the GrBackendFormat for this texture (or an invalid format if this is not valid).
236 GrBackendFormat getBackendFormat() const;
237
Greg Daniel52e16d92018-04-10 09:34:07 -0400238 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
239 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
240 bool getMockTextureInfo(GrMockTextureInfo*) const;
Brian Salomon8fe24272017-07-07 12:56:11 -0400241
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400242 // Returns true if we are working with protected content.
Brian Salomon4456a0d2019-07-18 15:05:11 -0400243 bool isProtected() const;
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400244
Eric Karl914a36b2017-10-12 12:44:50 -0700245 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400246 bool isValid() const { return fIsValid; }
Brian Salomon8fe24272017-07-07 12:56:11 -0400247
Brian Salomonaad83152019-05-24 10:16:35 -0400248 // Returns true if both textures are valid and refer to the same API texture.
249 bool isSameTexture(const GrBackendTexture&);
250
Robert Phillipsc5509952018-04-04 15:54:55 -0400251#if GR_TEST_UTILS
Robert Phillipsc5509952018-04-04 15:54:55 -0400252 static bool TestingOnly_Equals(const GrBackendTexture& , const GrBackendTexture&);
253#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500254
Eric Karl914a36b2017-10-12 12:44:50 -0700255private:
Greg Daniel5254ccc2017-11-13 11:05:52 -0500256
Brian Salomone2826ab2019-06-04 15:58:31 -0400257#ifdef SK_GL
258 friend class GrGLTexture;
Robert Phillips62221e72019-07-24 15:07:38 -0400259 friend class GrGLGpu; // for getGLTextureParams
Brian Salomone2826ab2019-06-04 15:58:31 -0400260 GrBackendTexture(int width,
261 int height,
262 GrMipMapped,
263 const GrGLTextureInfo,
264 sk_sp<GrGLTextureParameters>);
265 sk_sp<GrGLTextureParameters> getGLTextureParams() const;
266#endif
Greg Daniel52e16d92018-04-10 09:34:07 -0400267
Greg Danielb4d89562018-10-03 18:44:49 +0000268#ifdef SK_VULKAN
Brian Salomone2826ab2019-06-04 15:58:31 -0400269 friend class GrVkTexture;
Robert Phillips62221e72019-07-24 15:07:38 -0400270 friend class GrVkGpu; // for getGrVkImageLayout
Brian Salomone2826ab2019-06-04 15:58:31 -0400271 GrBackendTexture(int width,
272 int height,
273 const GrVkImageInfo& vkInfo,
274 sk_sp<GrVkImageLayout> layout);
275 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
Greg Daniel52e16d92018-04-10 09:34:07 -0400276#endif
277
278 // Free and release and resources being held by the GrBackendTexture.
279 void cleanup();
280
Greg Daniel9ca30652018-04-06 09:27:20 -0400281 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400282 int fWidth; //<! width in pixels
283 int fHeight; //<! height in pixels
Greg Daniel177e6952017-10-12 12:27:11 -0400284 GrMipMapped fMipMapped;
Greg Danielbdf12ad2018-10-12 09:31:11 -0400285 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400286
287 union {
Brian Salomone2826ab2019-06-04 15:58:31 -0400288#ifdef SK_GL
289 GrGLBackendTextureInfo fGLInfo;
290#endif
Greg Daniel52e16d92018-04-10 09:34:07 -0400291 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon8fe24272017-07-07 12:56:11 -0400292 GrMockTextureInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400293 };
Jim Van Verthdac1e552019-05-31 09:10:55 -0400294#ifdef SK_METAL
295 GrMtlTextureInfo fMtlInfo;
296#endif
Stephen White985741a2019-07-18 11:43:45 -0400297#ifdef SK_DAWN
298 GrDawnImageInfo fDawnInfo;
299#endif
Greg Daniel94403452017-04-18 15:52:36 -0400300};
301
Brian Salomonec045b42017-07-07 10:34:40 -0400302class SK_API GrBackendRenderTarget {
Greg Daniel94403452017-04-18 15:52:36 -0400303public:
Robert Phillips57e08282017-11-16 14:59:48 -0500304 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400305 GrBackendRenderTarget() : fIsValid(false) {}
Robert Phillips57e08282017-11-16 14:59:48 -0500306
Greg Danielfaa095e2017-12-19 13:15:02 -0500307 // The GrGLTextureInfo must have a valid fFormat.
308 GrBackendRenderTarget(int width,
309 int height,
310 int sampleCnt,
311 int stencilBits,
312 const GrGLFramebufferInfo& glInfo);
313
Stephen White985741a2019-07-18 11:43:45 -0400314#ifdef SK_DAWN
315 GrBackendRenderTarget(int width,
316 int height,
317 int sampleCnt,
318 int stencilBits,
319 const GrDawnImageInfo& dawnInfo);
320#endif
321
Brian Salomonafdc6b12018-03-09 12:02:32 -0500322 /** Deprecated, use version that does not take stencil bits. */
Greg Daniel94403452017-04-18 15:52:36 -0400323 GrBackendRenderTarget(int width,
324 int height,
325 int sampleCnt,
326 int stencilBits,
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000327 const GrVkImageInfo& vkInfo);
Brian Salomonafdc6b12018-03-09 12:02:32 -0500328 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo);
Greg Daniel94403452017-04-18 15:52:36 -0400329
Timothy Liang4e85e802018-06-28 16:37:18 -0400330#ifdef SK_METAL
331 GrBackendRenderTarget(int width,
332 int height,
333 int sampleCnt,
334 const GrMtlTextureInfo& mtlInfo);
335#endif
336
Brian Salomon0c51eea2018-03-09 17:02:09 -0500337 GrBackendRenderTarget(int width,
338 int height,
339 int sampleCnt,
340 int stencilBits,
341 const GrMockRenderTargetInfo& mockInfo);
342
Greg Daniel323fbcf2018-04-10 13:46:30 -0400343 ~GrBackendRenderTarget();
344
345 GrBackendRenderTarget(const GrBackendRenderTarget& that);
346 GrBackendRenderTarget& operator=(const GrBackendRenderTarget&);
347
Greg Daniel94403452017-04-18 15:52:36 -0400348 int width() const { return fWidth; }
349 int height() const { return fHeight; }
350 int sampleCnt() const { return fSampleCnt; }
351 int stencilBits() const { return fStencilBits; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400352 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400353
Greg Daniel323fbcf2018-04-10 13:46:30 -0400354 // If the backend API is GL, copies a snapshot of the GrGLFramebufferInfo struct into the passed
355 // in pointer and returns true. Otherwise returns false if the backend API is not GL.
356 bool getGLFramebufferInfo(GrGLFramebufferInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400357
Stephen White985741a2019-07-18 11:43:45 -0400358#ifdef SK_DAWN
359 // If the backend API is Dawn, copies a snapshot of the GrDawnImageInfo struct into the passed
360 // in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
361 bool getDawnImageInfo(GrDawnImageInfo*) const;
362#endif
363
Greg Daniel323fbcf2018-04-10 13:46:30 -0400364 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
365 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
366 // state. Otherwise returns false if the backend API is not Vulkan.
367 bool getVkImageInfo(GrVkImageInfo*) const;
368
369 // Anytime the client changes the VkImageLayout of the VkImage captured by this
370 // GrBackendRenderTarget, they must call this function to notify Skia of the changed layout.
371 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000372
Timothy Liang4e85e802018-06-28 16:37:18 -0400373#ifdef SK_METAL
374 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
375 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
376 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
377#endif
378
Robert Phillipsf209e882019-06-25 15:59:50 -0400379 // Get the GrBackendFormat for this render target (or an invalid format if this is not valid).
380 GrBackendFormat getBackendFormat() const;
381
Greg Daniel323fbcf2018-04-10 13:46:30 -0400382 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
383 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
384 bool getMockRenderTargetInfo(GrMockRenderTargetInfo*) const;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500385
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400386 // Returns true if we are working with protected content.
Brian Salomon4456a0d2019-07-18 15:05:11 -0400387 bool isProtected() const;
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400388
Robert Phillips57e08282017-11-16 14:59:48 -0500389 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400390 bool isValid() const { return fIsValid; }
Robert Phillips57e08282017-11-16 14:59:48 -0500391
Robert Phillips8caf85f2018-04-05 09:30:38 -0400392
393#if GR_TEST_UTILS
Robert Phillips8caf85f2018-04-05 09:30:38 -0400394 static bool TestingOnly_Equals(const GrBackendRenderTarget&, const GrBackendRenderTarget&);
395#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500396
Greg Daniel94403452017-04-18 15:52:36 -0400397private:
Robert Phillips62221e72019-07-24 15:07:38 -0400398 friend class GrVkGpu; // for getGrVkImageLayout
Brian Salomon4456a0d2019-07-18 15:05:11 -0400399 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
Greg Daniel323fbcf2018-04-10 13:46:30 -0400400
Brian Salomon4456a0d2019-07-18 15:05:11 -0400401 friend class GrVkRenderTarget;
402 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo,
403 sk_sp<GrVkImageLayout> layout);
Greg Daniel323fbcf2018-04-10 13:46:30 -0400404
405 // Free and release and resources being held by the GrBackendTexture.
406 void cleanup();
407
Greg Daniel9ca30652018-04-06 09:27:20 -0400408 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400409 int fWidth; //<! width in pixels
410 int fHeight; //<! height in pixels
411
412 int fSampleCnt;
413 int fStencilBits;
Jim Van Verth7730d7c2019-05-28 03:03:45 +0000414
Greg Danielbdf12ad2018-10-12 09:31:11 -0400415 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400416
417 union {
Robert Phillipsf209e882019-06-25 15:59:50 -0400418#ifdef SK_GL
Robert Phillipsfad9e3f2017-06-13 22:16:08 +0000419 GrGLFramebufferInfo fGLInfo;
Robert Phillipsf209e882019-06-25 15:59:50 -0400420#endif
Greg Daniel323fbcf2018-04-10 13:46:30 -0400421 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500422 GrMockRenderTargetInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400423 };
Jim Van Verthdac1e552019-05-31 09:10:55 -0400424#ifdef SK_METAL
425 GrMtlTextureInfo fMtlInfo;
426#endif
Stephen White985741a2019-07-18 11:43:45 -0400427#ifdef SK_DAWN
428 GrDawnImageInfo fDawnInfo;
429#endif
Greg Daniel94403452017-04-18 15:52:36 -0400430};
431
432#endif
433
Robert Phillips8caf85f2018-04-05 09:30:38 -0400434#endif
435