blob: 077143195e5613bd8a71a04a66a31ab407206a85 [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
Mike Kleinc0bd9f92019-04-23 12:05:21 -050012#include "include/gpu/vk/GrVkTypes.h"
13#include "src/gpu/vk/GrVkRenderTarget.h"
14#include "src/gpu/vk/GrVkTexture.h"
Greg Daniel6ecc9112017-06-16 16:17:03 +000015
16class GrVkGpu;
Greg Daniel164a9f02016-02-22 09:56:40 -050017
18#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:
Greg Daniel475eb702018-09-28 14:16:50 -040029 static sk_sp<GrVkTextureRenderTarget> MakeNewTextureRenderTarget(GrVkGpu*, SkBudgeted,
30 const GrSurfaceDesc&,
Brian Salomon27b4d8d2019-07-22 14:23:45 -040031 int sampleCnt,
Greg Daniel475eb702018-09-28 14:16:50 -040032 const GrVkImage::ImageDesc&,
33 GrMipMapsStatus);
Greg Daniel164a9f02016-02-22 09:56:40 -050034
bungeman6bd52842016-10-27 09:30:08 -070035 static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*,
36 const GrSurfaceDesc&,
Brian Salomon27b4d8d2019-07-22 14:23:45 -040037 int sampleCnt,
bungeman6bd52842016-10-27 09:30:08 -070038 GrWrapOwnership,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050039 GrWrapCacheable,
Greg Daniel52e16d92018-04-10 09:34:07 -040040 const GrVkImageInfo&,
41 sk_sp<GrVkImageLayout>);
Greg Daniel164a9f02016-02-22 09:56:40 -050042
Greg Daniel4065d452018-11-16 15:43:41 -050043 GrBackendFormat backendFormat() const override { return this->getBackendFormat(); }
44
Greg Daniel164a9f02016-02-22 09:56:40 -050045protected:
46 void onAbandon() override {
Brian Salomon9bc76d92019-01-24 12:18:33 -050047 // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
Greg Daniel164a9f02016-02-22 09:56:40 -050048 GrVkTexture::onAbandon();
Brian Salomon9bc76d92019-01-24 12:18:33 -050049 GrVkRenderTarget::onAbandon();
Greg Daniel164a9f02016-02-22 09:56:40 -050050 }
51
52 void onRelease() override {
Brian Salomon9bc76d92019-01-24 12:18:33 -050053 // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
Greg Daniel164a9f02016-02-22 09:56:40 -050054 GrVkTexture::onRelease();
Brian Salomon9bc76d92019-01-24 12:18:33 -050055 GrVkRenderTarget::onRelease();
Greg Daniel164a9f02016-02-22 09:56:40 -050056 }
57
58private:
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050059 // MSAA, not-wrapped
Greg Daniel164a9f02016-02-22 09:56:40 -050060 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070061 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050062 const GrSurfaceDesc& desc,
Brian Salomon27b4d8d2019-07-22 14:23:45 -040063 int sampleCnt,
egdanielb2df0c22016-05-13 11:30:37 -070064 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040065 sk_sp<GrVkImageLayout> layout,
Greg Daniel164a9f02016-02-22 09:56:40 -050066 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070067 const GrVkImageInfo& msaaInfo,
Greg Daniel52e16d92018-04-10 09:34:07 -040068 sk_sp<GrVkImageLayout> msaaLayout,
Greg Daniel164a9f02016-02-22 09:56:40 -050069 const GrVkImageView* colorAttachmentView,
Greg Daniel1591c382017-08-17 15:37:20 -040070 const GrVkImageView* resolveAttachmentView,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050071 GrMipMapsStatus);
Greg Daniel164a9f02016-02-22 09:56:40 -050072
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050073 // non-MSAA, not-wrapped
Greg Daniel164a9f02016-02-22 09:56:40 -050074 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070075 SkBudgeted budgeted,
Greg Daniel164a9f02016-02-22 09:56:40 -050076 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -070077 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040078 sk_sp<GrVkImageLayout> layout,
Greg Daniel164a9f02016-02-22 09:56:40 -050079 const GrVkImageView* texView,
Greg Daniel1591c382017-08-17 15:37:20 -040080 const GrVkImageView* colorAttachmentView,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050081 GrMipMapsStatus);
Greg Daniel6ecc9112017-06-16 16:17:03 +000082
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050083 // MSAA, wrapped
kkinnunen2e6055b2016-04-22 01:48:29 -070084 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -070085 const GrSurfaceDesc& desc,
Brian Salomon27b4d8d2019-07-22 14:23:45 -040086 int sampleCnt,
egdanielb2df0c22016-05-13 11:30:37 -070087 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -040088 sk_sp<GrVkImageLayout> layout,
kkinnunen2e6055b2016-04-22 01:48:29 -070089 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -070090 const GrVkImageInfo& msaaInfo,
Greg Daniel52e16d92018-04-10 09:34:07 -040091 sk_sp<GrVkImageLayout> msaaLayout,
kkinnunen2e6055b2016-04-22 01:48:29 -070092 const GrVkImageView* colorAttachmentView,
egdanielb2df0c22016-05-13 11:30:37 -070093 const GrVkImageView* resolveAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -040094 GrMipMapsStatus,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050095 GrBackendObjectOwnership,
96 GrWrapCacheable);
Greg Daniel164a9f02016-02-22 09:56:40 -050097
Brian Salomonaa6ca0a2019-01-24 16:03:07 -050098 // non-MSAA, wrapped
kkinnunen2e6055b2016-04-22 01:48:29 -070099 GrVkTextureRenderTarget(GrVkGpu* gpu,
kkinnunen2e6055b2016-04-22 01:48:29 -0700100 const GrSurfaceDesc& desc,
egdanielb2df0c22016-05-13 11:30:37 -0700101 const GrVkImageInfo& info,
Greg Daniel52e16d92018-04-10 09:34:07 -0400102 sk_sp<GrVkImageLayout> layout,
kkinnunen2e6055b2016-04-22 01:48:29 -0700103 const GrVkImageView* texView,
egdanielb2df0c22016-05-13 11:30:37 -0700104 const GrVkImageView* colorAttachmentView,
Greg Daniel0fc4d2d2017-10-12 11:23:36 -0400105 GrMipMapsStatus,
Brian Salomonaa6ca0a2019-01-24 16:03:07 -0500106 GrBackendObjectOwnership,
107 GrWrapCacheable);
Greg Daniel164a9f02016-02-22 09:56:40 -0500108
109 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory.
Robert Phillips646e4292017-06-13 12:44:56 -0400110 size_t onGpuMemorySize() const override;
Greg Daniel2d35a1c2019-02-01 14:48:10 -0500111
112 // In Vulkan we call the release proc after we are finished with the underlying
113 // GrVkImage::Resource object (which occurs after the GPU has finished all work on it).
Brian Salomonb2c5dae2019-03-04 10:25:17 -0500114 void onSetRelease(sk_sp<GrRefCntedCallback> releaseHelper) override {
Greg Daniel2d35a1c2019-02-01 14:48:10 -0500115 // Forward the release proc on to GrVkImage
116 this->setResourceRelease(std::move(releaseHelper));
117 }
Greg Daniel164a9f02016-02-22 09:56:40 -0500118};
119
120#endif