blob: 9dc7574730c529b174ae81535fa7a5374058a258 [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&,
30 const GrVkImage::ImageDesc&);
Greg Daniel164a9f02016-02-22 09:56:40 -050031
bungeman6bd52842016-10-27 09:30:08 -070032 static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*,
33 const GrSurfaceDesc&,
34 GrWrapOwnership,
35 const GrVkImageInfo*);
Greg Daniel164a9f02016-02-22 09:56:40 -050036
egdaniel50ead532016-07-13 14:23:26 -070037 bool updateForMipmap(GrVkGpu* gpu, const GrVkImageInfo& newInfo);
38
Greg Daniel164a9f02016-02-22 09:56:40 -050039protected:
40 void onAbandon() override {
41 GrVkRenderTarget::onAbandon();
42 GrVkTexture::onAbandon();
43 }
44
45 void onRelease() override {
46 GrVkRenderTarget::onRelease();
47 GrVkTexture::onRelease();
48 }
49
50private:
51 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070052 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050053 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070054 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050055 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070056 const GrVkImageInfo& msaaInfo,
Greg Daniel164a9f02016-02-22 09:56:40 -050057 const GrVkImageView* colorAttachmentView,
Greg Daniel6ecc9112017-06-16 16:17:03 +000058 const GrVkImageView* resolveAttachmentView);
Greg Daniel164a9f02016-02-22 09:56:40 -050059
60 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070061 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050062 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070063 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050064 const GrVkImageView* texView,
Greg Daniel6ecc9112017-06-16 16:17:03 +000065 const GrVkImageView* colorAttachmentView);
66
kkinnunen2e6055b2016-04-22 01:48:29 -070067 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070068 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070069 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070070 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070071 const GrVkImageInfo& msaaInfo,
kkinnunen2e6055b2016-04-22 01:48:29 -070072 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070073 const GrVkImageView* resolveAttachmentView,
Greg Daniel6ecc9112017-06-16 16:17:03 +000074 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -050075
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,
kkinnunen2e6055b2016-04-22 01:48:29 -070079 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070080 const GrVkImageView* colorAttachmentView,
Greg Daniel6ecc9112017-06-16 16:17:03 +000081 GrVkImage::Wrapped wrapped);
kkinnunen2e6055b2016-04-22 01:48:29 -070082
Robert Phillips67d52cf2017-06-05 13:38:13 -040083 static sk_sp<GrVkTextureRenderTarget> Make(GrVkGpu*,
84 const GrSurfaceDesc&,
85 const GrVkImageInfo&,
86 SkBudgeted budgeted,
87 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -050088
89 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
Robert Phillips646e4292017-06-13 12:44:56 -040090 size_t onGpuMemorySize() const override;
Greg Daniel164a9f02016-02-22 09:56:40 -050091};
92
93#endif