blob: 044480b23e23c842951a46cb59e0b152a8468e85 [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 Phillipsbac46722019-08-01 15:09:17 -040033#if GR_TEST_UTILS
34class SkString;
35#endif
36
Robert Phillips8caf85f2018-04-05 09:30:38 -040037#if !SK_SUPPORT_GPU
38
39// SkSurface and SkImage rely on a minimal version of these always being available
40class SK_API GrBackendTexture {
41public:
42 GrBackendTexture() {}
43
44 bool isValid() const { return false; }
45};
46
47class SK_API GrBackendRenderTarget {
48public:
49 GrBackendRenderTarget() {}
50
51 bool isValid() const { return false; }
52};
53#else
54
Robert Phillipsfc711a22018-02-13 17:03:00 -050055class SK_API GrBackendFormat {
56public:
57 // Creates an invalid backend format.
Robert Phillipsb2adbef2019-07-02 16:33:05 -040058 GrBackendFormat() {}
59
60 GrBackendFormat(const GrBackendFormat& src);
Robert Phillipsfc711a22018-02-13 17:03:00 -050061
62 static GrBackendFormat MakeGL(GrGLenum format, GrGLenum target) {
63 return GrBackendFormat(format, target);
64 }
65
Greg Daniela8d92112018-03-09 12:05:04 -050066 static GrBackendFormat MakeVk(VkFormat format) {
Greg Daniel7e000222018-12-03 10:08:21 -050067 return GrBackendFormat(format, GrVkYcbcrConversionInfo());
Robert Phillipsfc711a22018-02-13 17:03:00 -050068 }
Robert Phillipsfc711a22018-02-13 17:03:00 -050069
Greg Daniel7e000222018-12-03 10:08:21 -050070 // This is used for external textures and the VkFormat is assumed to be VK_FORMAT_UNDEFINED.
71 // This call is only supported on Android since the GrVkYcbcrConvesionInfo contains an android
72 // external format.
73 static GrBackendFormat MakeVk(const GrVkYcbcrConversionInfo& ycbcrInfo);
74
Stephen White985741a2019-07-18 11:43:45 -040075#ifdef SK_DAWN
76 static GrBackendFormat MakeDawn(dawn::TextureFormat format) {
77 return GrBackendFormat(format);
78 }
79#endif
80
Timothy Liang4e85e802018-06-28 16:37:18 -040081#ifdef SK_METAL
82 static GrBackendFormat MakeMtl(GrMTLPixelFormat format) {
83 return GrBackendFormat(format);
84 }
85#endif
86
Greg Daniele877dce2019-07-11 10:52:43 -040087 static GrBackendFormat MakeMock(GrColorType colorType) {
88 return GrBackendFormat(colorType);
Robert Phillipsfc711a22018-02-13 17:03:00 -050089 }
90
Greg Daniel45723ac2018-11-30 10:12:43 -050091 bool operator==(const GrBackendFormat& that) const;
92 bool operator!=(const GrBackendFormat& that) const { return !(*this == that); }
93
Greg Daniel4065d452018-11-16 15:43:41 -050094 GrBackendApi backend() const { return fBackend; }
95 GrTextureType textureType() const { return fTextureType; }
Robert Phillipsfc711a22018-02-13 17:03:00 -050096
97 // If the backend API is GL, these return a pointer to the format and target. Otherwise
Robert Phillipsa5e78be2019-07-09 12:34:38 -040098 // they return nullptr.
Robert Phillipsfc711a22018-02-13 17:03:00 -050099 const GrGLenum* getGLFormat() const;
100 const GrGLenum* getGLTarget() const;
101
Robert Phillipsfc711a22018-02-13 17:03:00 -0500102 // If the backend API is Vulkan, this returns a pointer to a VkFormat. Otherwise
103 // it returns nullptr
104 const VkFormat* getVkFormat() const;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500105
Greg Daniel7e000222018-12-03 10:08:21 -0500106 const GrVkYcbcrConversionInfo* getVkYcbcrConversionInfo() const;
107
Stephen White985741a2019-07-18 11:43:45 -0400108#ifdef SK_DAWN
109 const dawn::TextureFormat* getDawnFormat() const;
110#endif
111
Timothy Liang4e85e802018-06-28 16:37:18 -0400112#ifdef SK_METAL
113 // If the backend API is Metal, this returns a pointer to a GrMTLPixelFormat. Otherwise
114 // it returns nullptr
115 const GrMTLPixelFormat* getMtlFormat() const;
116#endif
117
Greg Daniele877dce2019-07-11 10:52:43 -0400118 // If the backend API is Mock, this returns a pointer to the colorType.
119 // Otherwise it returns nullptr.
Robert Phillipsa5e78be2019-07-09 12:34:38 -0400120 const GrColorType* getMockColorType() const;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500121
Greg Daniel387ec9a2019-03-07 16:44:54 -0500122 // If possible, copies the GrBackendFormat and forces the texture type to be Texture2D. If the
123 // GrBackendFormat was for Vulkan and it originally had a GrVkYcbcrConversionInfo, we will
124 // remove the conversion and set the format to be VK_FORMAT_R8G8B8A8_UNORM.
Greg Daniel4065d452018-11-16 15:43:41 -0500125 GrBackendFormat makeTexture2D() const;
126
Robert Phillipsfc711a22018-02-13 17:03:00 -0500127 // Returns true if the backend format has been initialized.
128 bool isValid() const { return fValid; }
129
Robert Phillipsbac46722019-08-01 15:09:17 -0400130#if GR_TEST_UTILS
131 SkString toStr() const;
132#endif
133
Robert Phillipsfc711a22018-02-13 17:03:00 -0500134private:
135 GrBackendFormat(GrGLenum format, GrGLenum target);
136
Greg Daniel7e000222018-12-03 10:08:21 -0500137 GrBackendFormat(const VkFormat vkFormat, const GrVkYcbcrConversionInfo&);
Robert Phillipsfc711a22018-02-13 17:03:00 -0500138
Stephen White985741a2019-07-18 11:43:45 -0400139#ifdef SK_DAWN
140 GrBackendFormat(dawn::TextureFormat format);
141#endif
142
Timothy Liang4e85e802018-06-28 16:37:18 -0400143#ifdef SK_METAL
144 GrBackendFormat(const GrMTLPixelFormat mtlFormat);
145#endif
146
Greg Daniele877dce2019-07-11 10:52:43 -0400147 GrBackendFormat(GrColorType colorType);
Robert Phillipsfc711a22018-02-13 17:03:00 -0500148
Robert Phillipsb2adbef2019-07-02 16:33:05 -0400149 GrBackendApi fBackend = GrBackendApi::kMock;
150 bool fValid = false;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500151
152 union {
Greg Daniel4065d452018-11-16 15:43:41 -0500153 GrGLenum fGLFormat; // the sized, internal format of the GL resource
Greg Daniel7e000222018-12-03 10:08:21 -0500154 struct {
155 VkFormat fFormat;
156 GrVkYcbcrConversionInfo fYcbcrConversionInfo;
Robert Phillips9dbcdcc2019-05-13 10:40:06 -0400157 } fVk;
Stephen White985741a2019-07-18 11:43:45 -0400158#ifdef SK_DAWN
159 dawn::TextureFormat fDawnFormat;
160#endif
161
Timothy Liang4e85e802018-06-28 16:37:18 -0400162#ifdef SK_METAL
163 GrMTLPixelFormat fMtlFormat;
164#endif
Greg Daniele877dce2019-07-11 10:52:43 -0400165 GrColorType fMockColorType;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500166 };
Robert Phillipsb2adbef2019-07-02 16:33:05 -0400167 GrTextureType fTextureType = GrTextureType::kNone;
Robert Phillipsfc711a22018-02-13 17:03:00 -0500168};
169
Brian Salomonec045b42017-07-07 10:34:40 -0400170class SK_API GrBackendTexture {
Greg Daniel94403452017-04-18 15:52:36 -0400171public:
Brian Salomon8fe24272017-07-07 12:56:11 -0400172 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400173 GrBackendTexture() : fIsValid(false) {}
Brian Salomon8fe24272017-07-07 12:56:11 -0400174
Greg Daniele7d8da42017-12-04 11:23:19 -0500175 // The GrGLTextureInfo must have a valid fFormat.
176 GrBackendTexture(int width,
177 int height,
178 GrMipMapped,
179 const GrGLTextureInfo& glInfo);
180
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000181 GrBackendTexture(int width,
182 int height,
183 const GrVkImageInfo& vkInfo);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000184
Timothy Liang4e85e802018-06-28 16:37:18 -0400185#ifdef SK_METAL
186 GrBackendTexture(int width,
187 int height,
188 GrMipMapped,
189 const GrMtlTextureInfo& mtlInfo);
190#endif
191
Stephen White985741a2019-07-18 11:43:45 -0400192#ifdef SK_DAWN
193 GrBackendTexture(int width,
194 int height,
195 const GrDawnImageInfo& dawnInfo);
196#endif
197
Brian Salomon8fe24272017-07-07 12:56:11 -0400198 GrBackendTexture(int width,
199 int height,
Greg Daniel177e6952017-10-12 12:27:11 -0400200 GrMipMapped,
201 const GrMockTextureInfo& mockInfo);
202
Greg Daniel52e16d92018-04-10 09:34:07 -0400203 GrBackendTexture(const GrBackendTexture& that);
204
205 ~GrBackendTexture();
206
207 GrBackendTexture& operator=(const GrBackendTexture& that);
208
Greg Daniel94403452017-04-18 15:52:36 -0400209 int width() const { return fWidth; }
210 int height() const { return fHeight; }
Greg Daniel177e6952017-10-12 12:27:11 -0400211 bool hasMipMaps() const { return GrMipMapped::kYes == fMipMapped; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400212 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400213
Greg Daniel52e16d92018-04-10 09:34:07 -0400214 // If the backend API is GL, copies a snapshot of the GrGLTextureInfo struct into the passed in
215 // pointer and returns true. Otherwise returns false if the backend API is not GL.
216 bool getGLTextureInfo(GrGLTextureInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400217
Brian Salomone2826ab2019-06-04 15:58:31 -0400218 // Call this to indicate that the texture parameters have been modified in the GL context
219 // externally to GrContext.
220 void glTextureParametersModified();
221
Stephen White985741a2019-07-18 11:43:45 -0400222#ifdef SK_DAWN
223 // If the backend API is Dawn, copies a snapshot of the GrDawnImageInfo struct into the passed
224 // in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
225 bool getDawnImageInfo(GrDawnImageInfo*) const;
226#endif
227
Greg Daniel323fbcf2018-04-10 13:46:30 -0400228 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
Greg Daniel52e16d92018-04-10 09:34:07 -0400229 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
230 // state. Otherwise returns false if the backend API is not Vulkan.
231 bool getVkImageInfo(GrVkImageInfo*) const;
232
Greg Daniel323fbcf2018-04-10 13:46:30 -0400233 // Anytime the client changes the VkImageLayout of the VkImage captured by this
234 // GrBackendTexture, they must call this function to notify Skia of the changed layout.
Greg Daniel52e16d92018-04-10 09:34:07 -0400235 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000236
Timothy Liang4e85e802018-06-28 16:37:18 -0400237#ifdef SK_METAL
238 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
239 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
240 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
241#endif
242
Brian Salomonf391d0f2018-12-14 09:18:50 -0500243 // Get the GrBackendFormat for this texture (or an invalid format if this is not valid).
244 GrBackendFormat getBackendFormat() const;
245
Greg Daniel52e16d92018-04-10 09:34:07 -0400246 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
247 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
248 bool getMockTextureInfo(GrMockTextureInfo*) const;
Brian Salomon8fe24272017-07-07 12:56:11 -0400249
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400250 // Returns true if we are working with protected content.
Brian Salomon4456a0d2019-07-18 15:05:11 -0400251 bool isProtected() const;
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400252
Eric Karl914a36b2017-10-12 12:44:50 -0700253 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400254 bool isValid() const { return fIsValid; }
Brian Salomon8fe24272017-07-07 12:56:11 -0400255
Brian Salomonaad83152019-05-24 10:16:35 -0400256 // Returns true if both textures are valid and refer to the same API texture.
257 bool isSameTexture(const GrBackendTexture&);
258
Robert Phillipsc5509952018-04-04 15:54:55 -0400259#if GR_TEST_UTILS
Robert Phillipsc5509952018-04-04 15:54:55 -0400260 static bool TestingOnly_Equals(const GrBackendTexture& , const GrBackendTexture&);
261#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500262
Eric Karl914a36b2017-10-12 12:44:50 -0700263private:
Greg Daniel5254ccc2017-11-13 11:05:52 -0500264
Brian Salomone2826ab2019-06-04 15:58:31 -0400265#ifdef SK_GL
266 friend class GrGLTexture;
Robert Phillips62221e72019-07-24 15:07:38 -0400267 friend class GrGLGpu; // for getGLTextureParams
Brian Salomone2826ab2019-06-04 15:58:31 -0400268 GrBackendTexture(int width,
269 int height,
270 GrMipMapped,
271 const GrGLTextureInfo,
272 sk_sp<GrGLTextureParameters>);
273 sk_sp<GrGLTextureParameters> getGLTextureParams() const;
274#endif
Greg Daniel52e16d92018-04-10 09:34:07 -0400275
Greg Danielb4d89562018-10-03 18:44:49 +0000276#ifdef SK_VULKAN
Brian Salomone2826ab2019-06-04 15:58:31 -0400277 friend class GrVkTexture;
Robert Phillips62221e72019-07-24 15:07:38 -0400278 friend class GrVkGpu; // for getGrVkImageLayout
Brian Salomone2826ab2019-06-04 15:58:31 -0400279 GrBackendTexture(int width,
280 int height,
281 const GrVkImageInfo& vkInfo,
282 sk_sp<GrVkImageLayout> layout);
283 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
Greg Daniel52e16d92018-04-10 09:34:07 -0400284#endif
285
286 // Free and release and resources being held by the GrBackendTexture.
287 void cleanup();
288
Greg Daniel9ca30652018-04-06 09:27:20 -0400289 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400290 int fWidth; //<! width in pixels
291 int fHeight; //<! height in pixels
Greg Daniel177e6952017-10-12 12:27:11 -0400292 GrMipMapped fMipMapped;
Greg Danielbdf12ad2018-10-12 09:31:11 -0400293 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400294
295 union {
Brian Salomone2826ab2019-06-04 15:58:31 -0400296#ifdef SK_GL
297 GrGLBackendTextureInfo fGLInfo;
298#endif
Greg Daniel52e16d92018-04-10 09:34:07 -0400299 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon8fe24272017-07-07 12:56:11 -0400300 GrMockTextureInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400301 };
Jim Van Verthdac1e552019-05-31 09:10:55 -0400302#ifdef SK_METAL
303 GrMtlTextureInfo fMtlInfo;
304#endif
Stephen White985741a2019-07-18 11:43:45 -0400305#ifdef SK_DAWN
306 GrDawnImageInfo fDawnInfo;
307#endif
Greg Daniel94403452017-04-18 15:52:36 -0400308};
309
Brian Salomonec045b42017-07-07 10:34:40 -0400310class SK_API GrBackendRenderTarget {
Greg Daniel94403452017-04-18 15:52:36 -0400311public:
Robert Phillips57e08282017-11-16 14:59:48 -0500312 // Creates an invalid backend texture.
Greg Daniel9ca30652018-04-06 09:27:20 -0400313 GrBackendRenderTarget() : fIsValid(false) {}
Robert Phillips57e08282017-11-16 14:59:48 -0500314
Greg Danielfaa095e2017-12-19 13:15:02 -0500315 // The GrGLTextureInfo must have a valid fFormat.
316 GrBackendRenderTarget(int width,
317 int height,
318 int sampleCnt,
319 int stencilBits,
320 const GrGLFramebufferInfo& glInfo);
321
Stephen White985741a2019-07-18 11:43:45 -0400322#ifdef SK_DAWN
323 GrBackendRenderTarget(int width,
324 int height,
325 int sampleCnt,
326 int stencilBits,
327 const GrDawnImageInfo& dawnInfo);
328#endif
329
Brian Salomonafdc6b12018-03-09 12:02:32 -0500330 /** Deprecated, use version that does not take stencil bits. */
Greg Daniel94403452017-04-18 15:52:36 -0400331 GrBackendRenderTarget(int width,
332 int height,
333 int sampleCnt,
334 int stencilBits,
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000335 const GrVkImageInfo& vkInfo);
Brian Salomonafdc6b12018-03-09 12:02:32 -0500336 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo);
Greg Daniel94403452017-04-18 15:52:36 -0400337
Timothy Liang4e85e802018-06-28 16:37:18 -0400338#ifdef SK_METAL
339 GrBackendRenderTarget(int width,
340 int height,
341 int sampleCnt,
342 const GrMtlTextureInfo& mtlInfo);
343#endif
344
Brian Salomon0c51eea2018-03-09 17:02:09 -0500345 GrBackendRenderTarget(int width,
346 int height,
347 int sampleCnt,
348 int stencilBits,
349 const GrMockRenderTargetInfo& mockInfo);
350
Greg Daniel323fbcf2018-04-10 13:46:30 -0400351 ~GrBackendRenderTarget();
352
353 GrBackendRenderTarget(const GrBackendRenderTarget& that);
354 GrBackendRenderTarget& operator=(const GrBackendRenderTarget&);
355
Greg Daniel94403452017-04-18 15:52:36 -0400356 int width() const { return fWidth; }
357 int height() const { return fHeight; }
358 int sampleCnt() const { return fSampleCnt; }
359 int stencilBits() const { return fStencilBits; }
Greg Danielbdf12ad2018-10-12 09:31:11 -0400360 GrBackendApi backend() const {return fBackend; }
Greg Daniel94403452017-04-18 15:52:36 -0400361
Greg Daniel323fbcf2018-04-10 13:46:30 -0400362 // If the backend API is GL, copies a snapshot of the GrGLFramebufferInfo struct into the passed
363 // in pointer and returns true. Otherwise returns false if the backend API is not GL.
364 bool getGLFramebufferInfo(GrGLFramebufferInfo*) const;
Greg Danielc0f8e422017-06-13 13:47:53 -0400365
Stephen White985741a2019-07-18 11:43:45 -0400366#ifdef SK_DAWN
367 // If the backend API is Dawn, copies a snapshot of the GrDawnImageInfo struct into the passed
368 // in pointer and returns true. Otherwise returns false if the backend API is not Dawn.
369 bool getDawnImageInfo(GrDawnImageInfo*) const;
370#endif
371
Greg Daniel323fbcf2018-04-10 13:46:30 -0400372 // If the backend API is Vulkan, copies a snapshot of the GrVkImageInfo struct into the passed
373 // in pointer and returns true. This snapshot will set the fImageLayout to the current layout
374 // state. Otherwise returns false if the backend API is not Vulkan.
375 bool getVkImageInfo(GrVkImageInfo*) const;
376
377 // Anytime the client changes the VkImageLayout of the VkImage captured by this
378 // GrBackendRenderTarget, they must call this function to notify Skia of the changed layout.
379 void setVkImageLayout(VkImageLayout);
Robert Phillipsfcd5fdd2017-06-14 01:43:29 +0000380
Timothy Liang4e85e802018-06-28 16:37:18 -0400381#ifdef SK_METAL
382 // If the backend API is Metal, copies a snapshot of the GrMtlTextureInfo struct into the passed
383 // in pointer and returns true. Otherwise returns false if the backend API is not Metal.
384 bool getMtlTextureInfo(GrMtlTextureInfo*) const;
385#endif
386
Robert Phillipsf209e882019-06-25 15:59:50 -0400387 // Get the GrBackendFormat for this render target (or an invalid format if this is not valid).
388 GrBackendFormat getBackendFormat() const;
389
Greg Daniel323fbcf2018-04-10 13:46:30 -0400390 // If the backend API is Mock, copies a snapshot of the GrMockTextureInfo struct into the passed
391 // in pointer and returns true. Otherwise returns false if the backend API is not Mock.
392 bool getMockRenderTargetInfo(GrMockRenderTargetInfo*) const;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500393
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400394 // Returns true if we are working with protected content.
Brian Salomon4456a0d2019-07-18 15:05:11 -0400395 bool isProtected() const;
Emircan Uysaler23ca4e72019-06-24 10:53:09 -0400396
Robert Phillips57e08282017-11-16 14:59:48 -0500397 // Returns true if the backend texture has been initialized.
Greg Daniel9ca30652018-04-06 09:27:20 -0400398 bool isValid() const { return fIsValid; }
Robert Phillips57e08282017-11-16 14:59:48 -0500399
Robert Phillips8caf85f2018-04-05 09:30:38 -0400400
401#if GR_TEST_UTILS
Robert Phillips8caf85f2018-04-05 09:30:38 -0400402 static bool TestingOnly_Equals(const GrBackendRenderTarget&, const GrBackendRenderTarget&);
403#endif
Greg Daniel2a303902018-02-20 10:25:54 -0500404
Greg Daniel94403452017-04-18 15:52:36 -0400405private:
Robert Phillips62221e72019-07-24 15:07:38 -0400406 friend class GrVkGpu; // for getGrVkImageLayout
Brian Salomon4456a0d2019-07-18 15:05:11 -0400407 sk_sp<GrVkImageLayout> getGrVkImageLayout() const;
Greg Daniel323fbcf2018-04-10 13:46:30 -0400408
Brian Salomon4456a0d2019-07-18 15:05:11 -0400409 friend class GrVkRenderTarget;
410 GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo,
411 sk_sp<GrVkImageLayout> layout);
Greg Daniel323fbcf2018-04-10 13:46:30 -0400412
413 // Free and release and resources being held by the GrBackendTexture.
414 void cleanup();
415
Greg Daniel9ca30652018-04-06 09:27:20 -0400416 bool fIsValid;
Greg Daniel94403452017-04-18 15:52:36 -0400417 int fWidth; //<! width in pixels
418 int fHeight; //<! height in pixels
419
420 int fSampleCnt;
421 int fStencilBits;
Jim Van Verth7730d7c2019-05-28 03:03:45 +0000422
Greg Danielbdf12ad2018-10-12 09:31:11 -0400423 GrBackendApi fBackend;
Greg Daniel94403452017-04-18 15:52:36 -0400424
425 union {
Robert Phillipsf209e882019-06-25 15:59:50 -0400426#ifdef SK_GL
Robert Phillipsfad9e3f2017-06-13 22:16:08 +0000427 GrGLFramebufferInfo fGLInfo;
Robert Phillipsf209e882019-06-25 15:59:50 -0400428#endif
Greg Daniel323fbcf2018-04-10 13:46:30 -0400429 GrVkBackendSurfaceInfo fVkInfo;
Brian Salomon0c51eea2018-03-09 17:02:09 -0500430 GrMockRenderTargetInfo fMockInfo;
Greg Daniel94403452017-04-18 15:52:36 -0400431 };
Jim Van Verthdac1e552019-05-31 09:10:55 -0400432#ifdef SK_METAL
433 GrMtlTextureInfo fMtlInfo;
434#endif
Stephen White985741a2019-07-18 11:43:45 -0400435#ifdef SK_DAWN
436 GrDawnImageInfo fDawnInfo;
437#endif
Greg Daniel94403452017-04-18 15:52:36 -0400438};
439
440#endif
441
Robert Phillips8caf85f2018-04-05 09:30:38 -0400442#endif
443