| Index: src/gpu/vk/GrVkRenderPass.h
|
| diff --git a/src/gpu/vk/GrVkRenderPass.h b/src/gpu/vk/GrVkRenderPass.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d460741d5e5ae916c41c77084e1f62f97d4f9fd2
|
| --- /dev/null
|
| +++ b/src/gpu/vk/GrVkRenderPass.h
|
| @@ -0,0 +1,90 @@
|
| +/*
|
| +* Copyright 2015 Google Inc.
|
| +*
|
| +* Use of this source code is governed by a BSD-style license that can be
|
| +* found in the LICENSE file.
|
| +*/
|
| +
|
| +#ifndef GrVkRenderPass_DEFINED
|
| +#define GrVkRenderPass_DEFINED
|
| +
|
| +#include "GrTypes.h"
|
| +
|
| +#include "GrVkResource.h"
|
| +
|
| +#include "vulkan/vulkan.h"
|
| +
|
| +class GrVkGpu;
|
| +class GrVkRenderTarget;
|
| +
|
| +class GrVkRenderPass : public GrVkResource {
|
| +public:
|
| + GrVkRenderPass() : INHERITED(), fRenderPass(nullptr) {}
|
| + void initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& target);
|
| +
|
| + struct AttachmentsDescriptor {
|
| + struct AttachmentDesc {
|
| + VkFormat fFormat;
|
| + int fSamples;
|
| + AttachmentDesc() : fFormat(VK_FORMAT_UNDEFINED), fSamples(0) {}
|
| + bool operator==(const AttachmentDesc& right) const {
|
| + return (fFormat == right.fFormat && fSamples == right.fSamples);
|
| + }
|
| + bool operator!=(const AttachmentDesc& right) const {
|
| + return !(*this == right);
|
| + }
|
| + };
|
| + AttachmentDesc fColor;
|
| + AttachmentDesc fResolve;
|
| + AttachmentDesc fStencil;
|
| + uint32_t fAttachmentCount;
|
| + };
|
| +
|
| + enum AttachmentFlags {
|
| + kColor_AttachmentFlag = 0x1,
|
| + kResolve_AttachmentFlag = 0x2,
|
| + kStencil_AttachmentFlag = 0x4,
|
| + };
|
| + GR_DECL_BITFIELD_OPS_FRIENDS(AttachmentFlags);
|
| +
|
| + // The following return the index of the render pass attachment array for the given attachment.
|
| + // If the render pass does not have the given attachment it will return false and not set the
|
| + // index value.
|
| + bool colorAttachmentIndex(uint32_t* index) const;
|
| + bool resolveAttachmentIndex(uint32_t* index) const;
|
| + bool stencilAttachmentIndex(uint32_t* index) const;
|
| +
|
| + // Sets the VkRenderPassBeginInfo and VkRenderPassContents need to begin a render pass.
|
| + // TODO: In the future I expect this function will also take an optional render area instead of
|
| + // defaulting to the entire render target.
|
| + // TODO: Figure out if load clear values should be passed into this function or should be stored
|
| + // on the GrVkRenderPass at create time since we'll know at that point if we want to do a load
|
| + // clear.
|
| + void getBeginInfo(const GrVkRenderTarget& target,
|
| + VkRenderPassBeginInfo* beginInfo,
|
| + VkSubpassContents* contents) const;
|
| +
|
| + // Returns whether or not the structure of a RenderTarget matches that of the VkRenderPass in
|
| + // this object. Specifically this compares that the number of attachments, format of
|
| + // attachments, and sample counts are all the same. This function is used in the creation of
|
| + // basic RenderPasses that can be used when creating a VkFrameBuffer object.
|
| + bool isCompatible(const GrVkRenderTarget& target) const;
|
| +
|
| + VkRenderPass vkRenderPass() const { return fRenderPass; }
|
| +
|
| +private:
|
| + GrVkRenderPass(const GrVkRenderPass&);
|
| + GrVkRenderPass& operator=(const GrVkRenderPass&);
|
| +
|
| + void freeGPUData(const GrVkGpu* gpu) const override;
|
| +
|
| + VkRenderPass fRenderPass;
|
| + AttachmentFlags fAttachmentFlags;
|
| + AttachmentsDescriptor fAttachmentsDescriptor;
|
| +
|
| + typedef GrVkResource INHERITED;
|
| +};
|
| +
|
| +GR_MAKE_BITFIELD_OPS(GrVkRenderPass::AttachmentFlags);
|
| +
|
| +#endif
|
|
|