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 "GrVkTexture.h" 13 #include "GrVkRenderTarget.h" 14 #include "vk/GrVkTypes.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*, SkBudgeted, 30 const GrSurfaceDesc&, 31 const GrVkImage::ImageDesc&, 32 GrMipMapsStatus); 33 34 static sk_sp<GrVkTextureRenderTarget> MakeWrappedTextureRenderTarget(GrVkGpu*, 35 const GrSurfaceDesc&, 36 GrWrapOwnership, 37 GrWrapCacheable, 38 const GrVkImageInfo&, 39 sk_sp<GrVkImageLayout>); 40 backendFormat()41 GrBackendFormat backendFormat() const override { return this->getBackendFormat(); } 42 43 protected: onAbandon()44 void onAbandon() override { 45 // In order to correctly handle calling texture idle procs, GrVkTexture must go first. 46 GrVkTexture::onAbandon(); 47 GrVkRenderTarget::onAbandon(); 48 } 49 onRelease()50 void onRelease() override { 51 // In order to correctly handle calling texture idle procs, GrVkTexture must go first. 52 GrVkTexture::onRelease(); 53 GrVkRenderTarget::onRelease(); 54 } 55 56 private: 57 // MSAA, not-wrapped 58 GrVkTextureRenderTarget(GrVkGpu* gpu, 59 SkBudgeted budgeted, 60 const GrSurfaceDesc& desc, 61 const GrVkImageInfo& info, 62 sk_sp<GrVkImageLayout> layout, 63 const GrVkImageView* texView, 64 const GrVkImageInfo& msaaInfo, 65 sk_sp<GrVkImageLayout> msaaLayout, 66 const GrVkImageView* colorAttachmentView, 67 const GrVkImageView* resolveAttachmentView, 68 GrMipMapsStatus); 69 70 // non-MSAA, not-wrapped 71 GrVkTextureRenderTarget(GrVkGpu* gpu, 72 SkBudgeted budgeted, 73 const GrSurfaceDesc& desc, 74 const GrVkImageInfo& info, 75 sk_sp<GrVkImageLayout> layout, 76 const GrVkImageView* texView, 77 const GrVkImageView* colorAttachmentView, 78 GrMipMapsStatus); 79 80 // MSAA, wrapped 81 GrVkTextureRenderTarget(GrVkGpu* gpu, 82 const GrSurfaceDesc& desc, 83 const GrVkImageInfo& info, 84 sk_sp<GrVkImageLayout> layout, 85 const GrVkImageView* texView, 86 const GrVkImageInfo& msaaInfo, 87 sk_sp<GrVkImageLayout> msaaLayout, 88 const GrVkImageView* colorAttachmentView, 89 const GrVkImageView* resolveAttachmentView, 90 GrMipMapsStatus, 91 GrBackendObjectOwnership, 92 GrWrapCacheable); 93 94 // non-MSAA, wrapped 95 GrVkTextureRenderTarget(GrVkGpu* gpu, 96 const GrSurfaceDesc& desc, 97 const GrVkImageInfo& info, 98 sk_sp<GrVkImageLayout> layout, 99 const GrVkImageView* texView, 100 const GrVkImageView* colorAttachmentView, 101 GrMipMapsStatus, 102 GrBackendObjectOwnership, 103 GrWrapCacheable); 104 105 // GrGLRenderTarget accounts for the texture's memory and any MSAA renderbuffer's memory. 106 size_t onGpuMemorySize() const override; 107 }; 108 109 #endif 110