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