• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
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 "include/gpu/vk/GrVkTypes.h"
13 #include "src/gpu/ganesh/vk/GrVkRenderTarget.h"
14 #include "src/gpu/ganesh/vk/GrVkTexture.h"
15 
16 class GrVkGpu;
17 
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 
24 class GrVkImageView;
25 struct GrVkImageInfo;
26 
27 class GrVkTextureRenderTarget: public GrVkTexture, public GrVkRenderTarget {
28 public:
29     static sk_sp<GrVkTextureRenderTarget> MakeNewTextureRenderTarget(GrVkGpu* gpu,
30                                                                      skgpu::Budgeted budgeted,
31                                                                      SkISize dimensions,
32                                                                      VkFormat format,
33                                                                      uint32_t mipLevels,
34                                                                      int sampleCnt,
35                                                                      GrMipmapStatus mipmapStatus,
36                                                                      GrProtected isProtected,
37                                                                      std::string_view label);
38 
39     static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(
40             GrVkGpu*,
41             SkISize dimensions,
42             int sampleCnt,
43             GrWrapOwnership,
44             GrWrapCacheable,
45             const GrVkImageInfo&,
46             sk_sp<skgpu::MutableTextureStateRef>);
47 
backendFormat()48     GrBackendFormat backendFormat() const override { return GrVkTexture::backendFormat(); }
49 
50 protected:
onAbandon()51     void onAbandon() override {
52         // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
53         GrVkTexture::onAbandon();
54         GrVkRenderTarget::onAbandon();
55     }
56 
onRelease()57     void onRelease() override {
58         // In order to correctly handle calling texture idle procs, GrVkTexture must go first.
59         GrVkTexture::onRelease();
60         GrVkRenderTarget::onRelease();
61     }
62 
63 private:
64     GrVkTextureRenderTarget(GrVkGpu* gpu,
65                             skgpu::Budgeted budgeted,
66                             SkISize dimensions,
67                             sk_sp<GrVkImage> texture,
68                             sk_sp<GrVkImage> colorAttachment,
69                             sk_sp<GrVkImage> resolveAttachment,
70                             GrMipmapStatus,
71                             std::string_view label);
72 
73     GrVkTextureRenderTarget(GrVkGpu* gpu,
74                             SkISize dimensions,
75                             sk_sp<GrVkImage> texture,
76                             sk_sp<GrVkImage> colorAttachment,
77                             sk_sp<GrVkImage> resolveAttachment,
78                             GrMipmapStatus,
79                             GrWrapCacheable,
80                             std::string_view label);
81 
82     size_t onGpuMemorySize() const override;
83 
onSetLabel()84     void onSetLabel() override{}
85 
86     // In Vulkan we call the release proc after we are finished with the underlying
87     // GrVkImage::Resource object (which occurs after the GPU has finished all work on it).
onSetRelease(sk_sp<RefCntedReleaseProc> releaseHelper)88     void onSetRelease(sk_sp<RefCntedReleaseProc> releaseHelper) override {
89         // Forward the release proc on to GrVkImage
90         GrVkTexture::onSetRelease(std::move(releaseHelper));
91     }
92 };
93 
94 #ifdef SK_BUILD_FOR_WIN
95 #pragma warning(pop)
96 #endif
97 
98 #endif
99