| Index: src/gpu/vk/GrVkRenderTarget.h
|
| diff --git a/src/gpu/vk/GrVkRenderTarget.h b/src/gpu/vk/GrVkRenderTarget.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b4d72eac73cf36c4dd9b8d488510a05dc74e26de
|
| --- /dev/null
|
| +++ b/src/gpu/vk/GrVkRenderTarget.h
|
| @@ -0,0 +1,137 @@
|
| +/*
|
| + * 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 GrVkRenderTarget_DEFINED
|
| +#define GrVkRenderTarget_DEFINED
|
| +
|
| +#include "GrVkImage.h"
|
| +#include "GrRenderTarget.h"
|
| +
|
| +#include "GrVkRenderPass.h"
|
| +
|
| +class GrVkCommandBuffer;
|
| +class GrVkFramebuffer;
|
| +class GrVkGpu;
|
| +class GrVkImageView;
|
| +class GrVkStencilAttachment;
|
| +
|
| +#ifdef SK_BUILD_FOR_WIN
|
| +// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance.
|
| +#pragma warning(push)
|
| +#pragma warning(disable: 4250)
|
| +#endif
|
| +
|
| +class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage {
|
| +public:
|
| + static GrVkRenderTarget* CreateNewRenderTarget(GrVkGpu*, const GrSurfaceDesc&,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::ImageDesc&);
|
| +
|
| + static GrVkRenderTarget* CreateWrappedRenderTarget(GrVkGpu*, const GrSurfaceDesc&,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* resource);
|
| +
|
| + ~GrVkRenderTarget() override;
|
| +
|
| + const GrVkFramebuffer* framebuffer() const { return fFramebuffer; }
|
| + const GrVkImageView* colorAttachmentView() const { return fColorAttachmentView; }
|
| + const GrVkImage::Resource* msaaImageResource() const { return fMSAAImageResource; }
|
| + const GrVkImageView* resolveAttachmentView() const { return fResolveAttachmentView; }
|
| + const GrVkImage::Resource* stencilImageResource() const;
|
| + const GrVkImageView* stencilAttachmentView() const;
|
| +
|
| + const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderPass; }
|
| +
|
| + // override of GrRenderTarget
|
| + ResolveType getResolveType() const override {
|
| + return kCanResolve_ResolveType;
|
| + }
|
| +
|
| + bool canAttemptStencilAttachment() const override {
|
| + return true;
|
| + }
|
| +
|
| + GrBackendObject getRenderTargetHandle() const override;
|
| +
|
| + // Returns the total number of attachments
|
| + void getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescriptor* desc,
|
| + GrVkRenderPass::AttachmentFlags* flags) const;
|
| +
|
| + void addResources(GrVkCommandBuffer& commandBuffer) const;
|
| +
|
| +protected:
|
| + enum Derived { kDerived };
|
| +
|
| + GrVkRenderTarget(GrVkGpu* gpu,
|
| + const GrSurfaceDesc& desc,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* imageResource,
|
| + const GrVkImage::Resource* msaaImageResource,
|
| + const GrVkImageView* colorAttachmentView,
|
| + const GrVkImageView* resolveAttachmentView);
|
| +
|
| + GrVkRenderTarget(GrVkGpu* gpu,
|
| + const GrSurfaceDesc& desc,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* imageResource,
|
| + const GrVkImage::Resource* msaaImageResource,
|
| + const GrVkImageView* colorAttachmentView,
|
| + const GrVkImageView* resolveAttachmentView,
|
| + Derived);
|
| +
|
| + GrVkRenderTarget(GrVkGpu* gpu,
|
| + const GrSurfaceDesc& desc,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* imageResource,
|
| + const GrVkImageView* colorAttachmentView);
|
| +
|
| + GrVkRenderTarget(GrVkGpu* gpu,
|
| + const GrSurfaceDesc& desc,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* imageResource,
|
| + const GrVkImageView* colorAttachmentView,
|
| + Derived);
|
| +
|
| + static GrVkRenderTarget* Create(GrVkGpu*, const GrSurfaceDesc&,
|
| + GrGpuResource::LifeCycle,
|
| + const GrVkImage::Resource* imageResource);
|
| +
|
| + GrVkGpu* getVkGpu() const;
|
| +
|
| + void onAbandon() override;
|
| + void onRelease() override;
|
| +
|
| + // This accounts for the texture's memory and any MSAA renderbuffer's memory.
|
| + size_t onGpuMemorySize() const override {
|
| + SkASSERT(kUnknown_GrPixelConfig != fDesc.fConfig);
|
| + SkASSERT(!GrPixelConfigIsCompressed(fDesc.fConfig));
|
| + size_t colorBytes = GrBytesPerPixel(fDesc.fConfig);
|
| + SkASSERT(colorBytes > 0);
|
| + return fColorValuesPerPixel * fDesc.fWidth * fDesc.fHeight * colorBytes;
|
| + }
|
| +
|
| +private:
|
| + bool completeStencilAttachment() override;
|
| +
|
| + void createFramebuffer(GrVkGpu* gpu);
|
| +
|
| + void releaseInternalObjects();
|
| + void abandonInternalObjects();
|
| +
|
| + const GrVkFramebuffer* fFramebuffer;
|
| + const GrVkImageView* fColorAttachmentView;
|
| + const GrVkImage::Resource* fMSAAImageResource;
|
| + const GrVkImageView* fResolveAttachmentView;
|
| + int fColorValuesPerPixel;
|
| +
|
| + // This is a cached pointer to a simple render pass. The render target should unref it
|
| + // once it is done with it.
|
| + const GrVkRenderPass* fCachedSimpleRenderPass;
|
| +};
|
| +
|
| +#endif
|
|
|