blob: 7639dc06ac316f2f774c2e5bb612a7b5eda968c6 [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"
14#include "GrVkGpu.h"
15
Robert Phillipsd6214d42016-11-07 08:23:48 -050016#include "GrTexturePriv.h"
17
Greg Daniel164a9f02016-02-22 09:56:40 -050018#ifdef SK_BUILD_FOR_WIN
19// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
20#pragma warning(push)
21#pragma warning(disable: 4250)
22#endif
23
24class GrVkImageView;
egdanielb2df0c22016-05-13 11:30:37 -070025struct GrVkImageInfo;
Greg Daniel164a9f02016-02-22 09:56:40 -050026
27class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget {
28public:
Robert Phillips67d52cf2017-06-05 13:38:13 -040029 static sk_sp<GrVkTextureRenderTarget> CreateNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
30 const GrSurfaceDesc&,
31 const GrVkImage::ImageDesc&);
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,
59 const GrVkImageView* resolveAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070060 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070061 , GrVkImage(info, GrVkImage::kNot_Wrapped)
62 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
63 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
64 resolveAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070065 this->registerWithCache(budgeted);
Greg Daniel164a9f02016-02-22 09:56:40 -050066 }
67
68 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070069 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050070 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070071 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050072 const GrVkImageView* texView,
73 const GrVkImageView* colorAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070074 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070075 , GrVkImage(info, GrVkImage::kNot_Wrapped)
76 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
77 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070078 this->registerWithCache(budgeted);
79 }
kkinnunen2e6055b2016-04-22 01:48:29 -070080 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070081 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070082 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070083 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070084 const GrVkImageInfo& msaaInfo,
kkinnunen2e6055b2016-04-22 01:48:29 -070085 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070086 const GrVkImageView* resolveAttachmentView,
87 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -070088 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070089 , GrVkImage(info, wrapped)
90 , GrVkTexture(gpu, desc, info, texView, wrapped)
91 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
92 resolveAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070093 this->registerWithCacheWrapped();
Greg Daniel164a9f02016-02-22 09:56:40 -050094 }
95
kkinnunen2e6055b2016-04-22 01:48:29 -070096 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070097 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070098 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070099 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -0700100 const GrVkImageView* colorAttachmentView,
101 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -0700102 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -0700103 , GrVkImage(info, wrapped)
104 , GrVkTexture(gpu, desc, info, texView, wrapped)
105 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -0700106 this->registerWithCacheWrapped();
107 }
108
Robert Phillips67d52cf2017-06-05 13:38:13 -0400109 static sk_sp<GrVkTextureRenderTarget> Make(GrVkGpu*,
110 const GrSurfaceDesc&,
111 const GrVkImageInfo&,
112 SkBudgeted budgeted,
113 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -0500114
115 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
116 size_t onGpuMemorySize() const override {
Robert Phillipsd6214d42016-11-07 08:23:48 -0500117 // The plus 1 is to account for the resolve texture.
Brian Salomonbb5711a2017-05-17 13:49:59 -0400118 int numColorSamples = this->numColorSamples() + 1;
119 return GrSurface::ComputeSize(this->config(), this->width(), this->height(),
120 numColorSamples, // TODO: this still correct?
Robert Phillipsd6214d42016-11-07 08:23:48 -0500121 this->texturePriv().hasMipMaps());
Greg Daniel164a9f02016-02-22 09:56:40 -0500122 }
123};
124
125#endif