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 #ifndef GrVkStencil_DEFINED 9 #define GrVkStencil_DEFINED 10 11 #include "GrStencilAttachment.h" 12 #include "GrVkImage.h" 13 #include "vulkan/vulkan.h" 14 15 class GrVkImageView; 16 class GrVkGpu; 17 18 class GrVkStencilAttachment : public GrStencilAttachment { 19 public: 20 struct Format { 21 VkFormat fInternalFormat; 22 int fStencilBits; 23 int fTotalBits; 24 bool fPacked; 25 }; 26 27 static GrVkStencilAttachment* Create(GrVkGpu* gpu, GrGpuResource::LifeCycle lifeCycle, 28 int width, int height, 29 int sampleCnt, const Format& format); 30 31 ~GrVkStencilAttachment() override; 32 imageResource()33 const GrVkImage::Resource* imageResource() const { return fImageResource; } stencilView()34 const GrVkImageView* stencilView() const { return fStencilView; } 35 vkFormat()36 VkFormat vkFormat() const { return fFormat.fInternalFormat; } 37 38 protected: 39 void onRelease() override; 40 void onAbandon() override; 41 42 private: 43 size_t onGpuMemorySize() const override; 44 45 GrVkStencilAttachment(GrVkGpu* gpu, 46 GrGpuResource::LifeCycle lifeCycle, 47 const Format& format, 48 const GrVkImage::ImageDesc&, 49 const GrVkImage::Resource*, 50 const GrVkImageView* stencilView); 51 52 GrVkGpu* getVkGpu() const; 53 54 Format fFormat; 55 56 const GrVkImage::Resource* fImageResource; 57 const GrVkImageView* fStencilView; 58 59 typedef GrStencilAttachment INHERITED; 60 }; 61 62 #endif 63