const GrVkImage::ImageDesc& desc,
const GrVkImage::Resource* imageResource,
const GrVkImageView* stencilView)
- : INHERITED(gpu, lifeCycle, desc.fWidth, desc.fHeight, format.fStencilBits, desc.fSamples)
+ : GrStencilAttachment(gpu, lifeCycle, desc.fWidth, desc.fHeight,
+ format.fStencilBits, desc.fSamples)
+ , GrVkImage(imageResource)
, fFormat(format)
- , fImageResource(imageResource)
, fStencilView(stencilView) {
this->registerWithCache();
- imageResource->ref();
stencilView->ref();
}
GrVkStencilAttachment::~GrVkStencilAttachment() {
// should have been released or abandoned first
- SkASSERT(!fImageResource);
SkASSERT(!fStencilView);
}
void GrVkStencilAttachment::onRelease() {
GrVkGpu* gpu = this->getVkGpu();
- fImageResource->unref(gpu);
- fImageResource = nullptr;
+ this->releaseImage(gpu);
fStencilView->unref(gpu);
fStencilView = nullptr;
- INHERITED::onRelease();
+ GrStencilAttachment::onRelease();
}
void GrVkStencilAttachment::onAbandon() {
- fImageResource->unrefAndAbandon();
- fImageResource = nullptr;
+ this->abandonImage();
fStencilView->unrefAndAbandon();
fStencilView = nullptr;
- INHERITED::onAbandon();
+ GrStencilAttachment::onAbandon();
}
GrVkGpu* GrVkStencilAttachment::getVkGpu() const {
class GrVkImageView;
class GrVkGpu;
-class GrVkStencilAttachment : public GrStencilAttachment {
+class GrVkStencilAttachment : public GrStencilAttachment, public GrVkImage {
public:
struct Format {
VkFormat fInternalFormat;
~GrVkStencilAttachment() override;
- const GrVkImage::Resource* imageResource() const { return fImageResource; }
+ const GrVkImage::Resource* imageResource() const { return this->resource(); }
const GrVkImageView* stencilView() const { return fStencilView; }
VkFormat vkFormat() const { return fFormat.fInternalFormat; }
Format fFormat;
- const GrVkImage::Resource* fImageResource;
const GrVkImageView* fStencilView;
-
- typedef GrStencilAttachment INHERITED;
};
#endif