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