1164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel/* 2164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel* Copyright 2015 Google Inc. 3164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel* 4164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel* Use of this source code is governed by a BSD-style license that can be 5164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel* found in the LICENSE file. 6164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel*/ 7164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 8164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#ifndef GrVkStencil_DEFINED 9164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#define GrVkStencil_DEFINED 10164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 11164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "GrStencilAttachment.h" 12164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "GrVkImage.h" 13164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#include "vulkan/vulkan.h" 14164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 15164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkImageView; 16164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkGpu; 17164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 18164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielclass GrVkStencilAttachment : public GrStencilAttachment { 19164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielpublic: 20164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel struct Format { 21164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel VkFormat fInternalFormat; 22164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel int fStencilBits; 23164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel int fTotalBits; 24164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel bool fPacked; 25164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel }; 26164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 27164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel static GrVkStencilAttachment* Create(GrVkGpu* gpu, GrGpuResource::LifeCycle lifeCycle, 28164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel int width, int height, 29164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel int sampleCnt, const Format& format); 30164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 31164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel ~GrVkStencilAttachment() override; 32164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 33164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImage::Resource* imageResource() const { return fImageResource; } 34164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImageView* stencilView() const { return fStencilView; } 35164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 36164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel VkFormat vkFormat() const { return fFormat.fInternalFormat; } 37164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 38164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielprotected: 39164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel void onRelease() override; 40164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel void onAbandon() override; 41164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 42164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Danielprivate: 43164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel size_t onGpuMemorySize() const override; 44164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 45164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel GrVkStencilAttachment(GrVkGpu* gpu, 46164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel GrGpuResource::LifeCycle lifeCycle, 47164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const Format& format, 48164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImage::ImageDesc&, 49164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImage::Resource*, 50164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImageView* stencilView); 51164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 52164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel GrVkGpu* getVkGpu() const; 53164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 54164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel Format fFormat; 55164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 56164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImage::Resource* fImageResource; 57164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel const GrVkImageView* fStencilView; 58164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 59164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel typedef GrStencilAttachment INHERITED; 60164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel}; 61164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel 62164a9f061c5186ae931cc23a3c73f32472e80ff5Greg Daniel#endif 63