blob: 4b3e057005c5ec13e35c383e7c44f7e7efbc12db [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:
Robert Phillips67d52cf2017-06-05 13:38:13 -040028 static sk_sp<GrVkTextureRenderTarget> CreateNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
29 const GrSurfaceDesc&,
Greg Daniel834f1202017-10-09 15:06:20 -040030 const GrVkImage::ImageDesc&,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040031 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,
36 const GrVkImageInfo*);
Greg Daniel164a9f02016-02-22 09:56:40 -050037
egdaniel50ead532016-07-13 14:23:26 -070038 bool updateForMipmap(GrVkGpu* gpu, const GrVkImageInfo& newInfo);
39
Greg Daniel164a9f02016-02-22 09:56:40 -050040protected:
41 void onAbandon() override {
42 GrVkRenderTarget::onAbandon();
43 GrVkTexture::onAbandon();
44 }
45
46 void onRelease() override {
47 GrVkRenderTarget::onRelease();
48 GrVkTexture::onRelease();
49 }
50
51private:
52 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070053 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050054 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070055 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050056 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070057 const GrVkImageInfo& msaaInfo,
Greg Daniel164a9f02016-02-22 09:56:40 -050058 const GrVkImageView* colorAttachmentView,
Greg Daniel1591c382017-08-17 15:37:20 -040059 const GrVkImageView* resolveAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040060 GrMipMapsStatus,
61 GrBackendObjectOwnership);
Greg Daniel164a9f02016-02-22 09:56:40 -050062
63 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070064 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050065 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070066 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050067 const GrVkImageView* texView,
Greg Daniel1591c382017-08-17 15:37:20 -040068 const GrVkImageView* colorAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040069 GrMipMapsStatus,
70 GrBackendObjectOwnership);
Greg Daniel6ecc9112017-06-16 16:17:03 +000071
kkinnunen2e6055b2016-04-22 01:48:29 -070072 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070073 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070074 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070075 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070076 const GrVkImageInfo& msaaInfo,
kkinnunen2e6055b2016-04-22 01:48:29 -070077 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070078 const GrVkImageView* resolveAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040079 GrMipMapsStatus,
Greg Daniel1591c382017-08-17 15:37:20 -040080 GrBackendObjectOwnership);
Greg Daniel164a9f02016-02-22 09:56:40 -050081
kkinnunen2e6055b2016-04-22 01:48:29 -070082 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070083 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070084 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070085 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070086 const GrVkImageView* colorAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040087 GrMipMapsStatus,
Greg Daniel1591c382017-08-17 15:37:20 -040088 GrBackendObjectOwnership);
kkinnunen2e6055b2016-04-22 01:48:29 -070089
Robert Phillips67d52cf2017-06-05 13:38:13 -040090 static sk_sp<GrVkTextureRenderTarget> Make(GrVkGpu*,
91 const GrSurfaceDesc&,
92 const GrVkImageInfo&,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040093 GrMipMapsStatus,
Robert Phillips67d52cf2017-06-05 13:38:13 -040094 SkBudgeted budgeted,
Greg Daniel1591c382017-08-17 15:37:20 -040095 GrBackendObjectOwnership,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040096 bool isWrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -050097
98 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
Robert Phillips646e4292017-06-13 12:44:56 -040099 size_t onGpuMemorySize() const override;
Greg Daniel164a9f02016-02-22 09:56:40 -0500100};
101
102#endif