blob: 225951106612350fc82012f8e189aa3bab23895c [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
egdaniel50ead532016-07-13 14:23:26 -070036 bool updateForMipmap(GrVkGpu* gpu, const GrVkImageInfo& newInfo);
37
Greg Daniel164a9f02016-02-22 09:56:40 -050038protected:
39 void onAbandon() override {
40 GrVkRenderTarget::onAbandon();
41 GrVkTexture::onAbandon();
42 }
43
44 void onRelease() override {
45 GrVkRenderTarget::onRelease();
46 GrVkTexture::onRelease();
47 }
48
49private:
50 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070051 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050052 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070053 const GrVkImageInfo& info,
Greg Daniel164a9f02016-02-22 09:56:40 -050054 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070055 const GrVkImageInfo& msaaInfo,
Greg Daniel164a9f02016-02-22 09:56:40 -050056 const GrVkImageView* colorAttachmentView,
57 const GrVkImageView* resolveAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070058 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070059 , GrVkImage(info, GrVkImage::kNot_Wrapped)
60 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
61 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
62 resolveAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070063 this->registerWithCache(budgeted);
Greg Daniel164a9f02016-02-22 09:56:40 -050064 }
65
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 Daniel164a9f02016-02-22 09:56:40 -050070 const GrVkImageView* texView,
71 const GrVkImageView* colorAttachmentView)
kkinnunen2e6055b2016-04-22 01:48:29 -070072 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070073 , GrVkImage(info, GrVkImage::kNot_Wrapped)
74 , GrVkTexture(gpu, desc, info, texView, GrVkImage::kNot_Wrapped)
75 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, GrVkImage::kNot_Wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070076 this->registerWithCache(budgeted);
77 }
kkinnunen2e6055b2016-04-22 01:48:29 -070078 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070079 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070080 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070081 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070082 const GrVkImageInfo& msaaInfo,
kkinnunen2e6055b2016-04-22 01:48:29 -070083 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070084 const GrVkImageView* resolveAttachmentView,
85 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -070086 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -070087 , GrVkImage(info, wrapped)
88 , GrVkTexture(gpu, desc, info, texView, wrapped)
89 , GrVkRenderTarget(gpu, desc, info, msaaInfo, colorAttachmentView,
90 resolveAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -070091 this->registerWithCacheWrapped();
Greg Daniel164a9f02016-02-22 09:56:40 -050092 }
93
kkinnunen2e6055b2016-04-22 01:48:29 -070094 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070095 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070096 const GrVkImageInfo& info,
kkinnunen2e6055b2016-04-22 01:48:29 -070097 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070098 const GrVkImageView* colorAttachmentView,
99 GrVkImage::Wrapped wrapped)
kkinnunen2e6055b2016-04-22 01:48:29 -0700100 : GrSurface(gpu, desc)
egdanielb2df0c22016-05-13 11:30:37 -0700101 , GrVkImage(info, wrapped)
102 , GrVkTexture(gpu, desc, info, texView, wrapped)
103 , GrVkRenderTarget(gpu, desc, info, colorAttachmentView, wrapped) {
kkinnunen2e6055b2016-04-22 01:48:29 -0700104 this->registerWithCacheWrapped();
105 }
106
kkinnunen2e6055b2016-04-22 01:48:29 -0700107 static GrVkTextureRenderTarget* Create(GrVkGpu*,
kkinnunen2e6055b2016-04-22 01:48:29 -0700108 const GrSurfaceDesc&,
egdanielb2df0c22016-05-13 11:30:37 -0700109 const GrVkImageInfo&,
110 SkBudgeted budgeted,
111 GrVkImage::Wrapped wrapped);
Greg Daniel164a9f02016-02-22 09:56:40 -0500112
113 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
114 size_t onGpuMemorySize() const override {
115 return GrVkRenderTarget::onGpuMemorySize();
116 }
117};
118
119#endif