blob: bd3973c593d6f0dfc7297669d18108467584d903 [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
2 * Copyright 2015 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
9#ifndef GrVkTextureRenderTarget_DEFINED
10#define GrVkTextureRenderTarget_DEFINED
11
12#include "GrVkTexture.h"
13#include "GrVkRenderTarget.h"
Greg Daniel6ecc9112017-06-16 16:17:03 +000014
15class GrVkGpu;
Greg Daniel164a9f02016-02-22 09:56:40 -050016
17#ifdef SK_BUILD_FOR_WIN
18// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
19#pragma warning(push)
20#pragma warning(disable: 4250)
21#endif
22
23class GrVkImageView;
egdanielb2df0c22016-05-13 11:30:37 -070024struct GrVkImageInfo;
Greg Daniel164a9f02016-02-22 09:56:40 -050025
26class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget {
27public:
Greg Daniel475eb702018-09-28 14:16:50 -040028 static sk_sp<GrVkTextureRenderTarget> MakeNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
29 const GrSurfaceDesc&,
30 const GrVkImage::ImageDesc&,
31 GrMipMapsStatus);
Greg Daniel164a9f02016-02-22 09:56:40 -050032
bungeman6bd52842016-10-27 09:30:08 -070033 static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*,
34 const GrSurfaceDesc&,
35 GrWrapOwnership,
Greg Daniel52e16d92018-04-10 09:34:07 -040036 const GrVkImageInfo&,
37 sk_sp<GrVkImageLayout>);
Greg Daniel164a9f02016-02-22 09:56:40 -050038
egdaniel50ead532016-07-13 14:23:26 -070039 bool updateForMipmap(GrVkGpu* gpu, const GrVkImageInfo& newInfo);
40
Greg Daniel164a9f02016-02-22 09:56:40 -050041protected:
42 void onAbandon() override {
43 GrVkRenderTarget::onAbandon();
44 GrVkTexture::onAbandon();
45 }
46
47 void onRelease() override {
48 GrVkRenderTarget::onRelease();
49 GrVkTexture::onRelease();
50 }
51
52private:
53 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070054 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050055 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070056 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040057 sk_sp<GrVkImageLayout> layout,
Greg Daniel164a9f02016-02-22 09:56:40 -050058 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070059 const GrVkImageInfo& msaaInfo,
Greg Daniel52e16d92018-04-10 09:34:07 -040060 sk_sp<GrVkImageLayout> msaaLayout,
Greg Daniel164a9f02016-02-22 09:56:40 -050061 const GrVkImageView* colorAttachmentView,
Greg Daniel1591c382017-08-17 15:37:20 -040062 const GrVkImageView* resolveAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040063 GrMipMapsStatus,
64 GrBackendObjectOwnership);
Greg Daniel164a9f02016-02-22 09:56:40 -050065
66 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070067 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050068 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070069 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040070 sk_sp<GrVkImageLayout> layout,
Greg Daniel164a9f02016-02-22 09:56:40 -050071 const GrVkImageView* texView,
Greg Daniel1591c382017-08-17 15:37:20 -040072 const GrVkImageView* colorAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040073 GrMipMapsStatus,
74 GrBackendObjectOwnership);
Greg Daniel6ecc9112017-06-16 16:17:03 +000075
kkinnunen2e6055b2016-04-22 01:48:29 -070076 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070077 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070078 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040079 sk_sp<GrVkImageLayout> layout,
kkinnunen2e6055b2016-04-22 01:48:29 -070080 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070081 const GrVkImageInfo& msaaInfo,
Greg Daniel52e16d92018-04-10 09:34:07 -040082 sk_sp<GrVkImageLayout> msaaLayout,
kkinnunen2e6055b2016-04-22 01:48:29 -070083 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070084 const GrVkImageView* resolveAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040085 GrMipMapsStatus,
Greg Daniel1591c382017-08-17 15:37:20 -040086 GrBackendObjectOwnership);
Greg Daniel164a9f02016-02-22 09:56:40 -050087
kkinnunen2e6055b2016-04-22 01:48:29 -070088 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070089 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070090 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040091 sk_sp<GrVkImageLayout> layout,
kkinnunen2e6055b2016-04-22 01:48:29 -070092 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070093 const GrVkImageView* colorAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040094 GrMipMapsStatus,
Greg Daniel1591c382017-08-17 15:37:20 -040095 GrBackendObjectOwnership);
kkinnunen2e6055b2016-04-22 01:48:29 -070096
Robert Phillips67d52cf2017-06-05 13:38:13 -040097 static sk_sp<GrVkTextureRenderTarget> Make(GrVkGpu*,
98 const GrSurfaceDesc&,
99 const GrVkImageInfo&,
Greg Daniel52e16d92018-04-10 09:34:07 -0400100 sk_sp<GrVkImageLayout>,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -0400101 GrMipMapsStatus,
Robert Phillips67d52cf2017-06-05 13:38:13 -0400102 SkBudgeted budgeted,
Greg Daniel1591c382017-08-17 15:37:20 -0400103 GrBackendObjectOwnership,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -0400104 bool isWrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -0500105
106 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
Robert Phillips646e4292017-06-13 12:44:56 -0400107 size_t onGpuMemorySize() const override;
Greg Daniel164a9f02016-02-22 09:56:40 -0500108};
109
110#endif