blob: 6ea332a0ae2ed098ebd8a56befbbc75e2d35be68 [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
16#ifdef SK_BUILD_FOR_WIN
17// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
18#pragma warning(push)
19#pragma warning(disable: 4250)
20#endif
21
22class GrVkImageView;
egdanielb2df0c22016-05-13 11:30:37 -070023struct GrVkImageInfo;
Greg Daniel164a9f02016-02-22 09:56:40 -050024
25class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget {
26public:
kkinnunen2e6055b2016-04-22 01:48:29 -070027 static GrVkTextureRenderTarget* CreateNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
28 const GrSurfaceDesc&,
Greg Daniel164a9f02016-02-22 09:56:40 -050029 const GrVkImage::ImageDesc&);
30
halcanary9d524f22016-03-29 09:03:52 -070031 static GrVkTextureRenderTarget* CreateWrappedTextureRenderTarget(GrVkGpu*,
Greg Daniel164a9f02016-02-22 09:56:40 -050032 const GrSurfaceDesc&,
kkinnunen2e6055b2016-04-22 01:48:29 -070033 GrWrapOwnership,
egdanielb2df0c22016-05-13 11:30:37 -070034 const GrVkImageInfo*);
Greg Daniel164a9f02016-02-22 09:56:40 -050035
36protected:
37 void onAbandon() override {
38 GrVkRenderTarget::onAbandon();
39 GrVkTexture::onAbandon();
40 }
41
42 void onRelease() override {
43 GrVkRenderTarget::onRelease();
44 GrVkTexture::onRelease();
45 }
46
47private:
48 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070049 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050050 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070051 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050052 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070053 const GrVkImageInfo& msaaInfo,
Greg Daniel164a9f02016-02-22 09:56:40 -050054 const GrVkImageView* colorAttachmentView,
55 const GrVkImageView* resolveAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070056 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070057 , GrVkImage(info, GrVkImage::kNot_Wrapped)
58 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
59 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
60 resolveAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070061 this->registerWithCache(budgeted);
Greg Daniel164a9f02016-02-22 09:56:40 -050062 }
63
64 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070065 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050066 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070067 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050068 const GrVkImageView* texView,
69 const GrVkImageView* colorAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070070 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070071 , GrVkImage(info, GrVkImage::kNot_Wrapped)
72 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
73 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070074 this->registerWithCache(budgeted);
75 }
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 GrVkImageInfo& msaaInfo,
kkinnunen2e6055b2016-04-22 01:48:29 -070081 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070082 const GrVkImageView* resolveAttachmentView,
83 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -070084 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070085 , GrVkImage(info, wrapped)
86 , GrVkTexture(gpu, desc, info, texView, wrapped)
87 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
88 resolveAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070089 this->registerWithCacheWrapped();
Greg Daniel164a9f02016-02-22 09:56:40 -050090 }
91
kkinnunen2e6055b2016-04-22 01:48:29 -070092 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070093 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070094 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070095 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070096 const GrVkImageView* colorAttachmentView,
97 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -070098 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070099 , GrVkImage(info, wrapped)
100 , GrVkTexture(gpu, desc, info, texView, wrapped)
101 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -0700102 this->registerWithCacheWrapped();
103 }
104
kkinnunen2e6055b2016-04-22 01:48:29 -0700105 static GrVkTextureRenderTarget* Create(GrVkGpu*,
kkinnunen2e6055b2016-04-22 01:48:29 -0700106 const GrSurfaceDesc&,
egdanielb2df0c22016-05-13 11:30:37 -0700107 const GrVkImageInfo&,
108 SkBudgeted budgeted,
109 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -0500110
111 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
112 size_t onGpuMemorySize() const override {
113 return GrVkRenderTarget::onGpuMemorySize();
114 }
115};
116
117#endif