diff options
author | Greg Daniel <egdaniel@google.com> | 2016-02-22 09:56:40 -0500 |
---|---|---|
committer | Greg Daniel <egdaniel@google.com> | 2016-02-22 09:56:40 -0500 |
commit | 164a9f061c5186ae931cc23a3c73f32472e80ff5 (patch) | |
tree | 79929f22803c622a2e0c8dbc333717c275ca0405 /src/gpu/vk/GrVkRenderTarget.h | |
parent | 129ed1cd6d792f3f6cf563aefa9756fc6308289d (diff) |
Add vulkan files into skia repo. This is an incomplete backend with only partial functionality at this time.
R=robertphillips@google.com
TBR=bsalomon@google.com
BUG=skia:4955
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1718693002
Committed: https://skia.googlesource.com/skia/+/48cf268defad66f58f1aa03b4835e5583be96b2f
Review URL: https://codereview.chromium.org/1718693002
Diffstat (limited to 'src/gpu/vk/GrVkRenderTarget.h')
-rw-r--r-- | src/gpu/vk/GrVkRenderTarget.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/gpu/vk/GrVkRenderTarget.h b/src/gpu/vk/GrVkRenderTarget.h new file mode 100644 index 0000000000..b4d72eac73 --- /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 |