1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2015 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrVkRenderTarget_DEFINED 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrVkRenderTarget_DEFINED 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrVkImage.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrRenderTarget.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrVkRenderPass.h" 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrVkResourceProvider.h" 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkCommandBuffer; 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkFramebuffer; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkGpu; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkImageView; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkStencilAttachment; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct GrVkImageInfo; 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef SK_BUILD_FOR_WIN 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// Windows gives bogus warnings about inheriting asTexture/asRenderTarget via dominance. 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#pragma warning(push) 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#pragma warning(disable: 4250) 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static GrVkRenderTarget* CreateNewRenderTarget(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImage::ImageDesc&); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static sk_sp<GrVkRenderTarget> MakeWrappedRenderTarget(GrVkGpu*, const GrSurfaceDesc&, 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo*); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ~GrVkRenderTarget() override; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkFramebuffer* framebuffer() const { return fFramebuffer; } 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* colorAttachmentView() const { return fColorAttachmentView; } 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkResource* msaaImageResource() const { 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fMSAAImage) { 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fMSAAImage->fResource; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkImage* msaaImage() { return fMSAAImage.get(); } 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* resolveAttachmentView() const { return fResolveAttachmentView; } 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkResource* stencilImageResource() const; 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* stencilAttachmentView() const; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkRenderPass* simpleRenderPass() const { return fCachedSimpleRenderPass; } 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkResourceProvider::CompatibleRPHandle compatibleRenderPassHandle() const { 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return fCompatibleRPHandle; 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // override of GrRenderTarget 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ResolveType getResolveType() const override { 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (this->numColorSamples() > 1) { 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return kCanResolve_ResolveType; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return kAutoResolves_ResolveType; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool canAttemptStencilAttachment() const override { 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendObject getRenderTargetHandle() const override; 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendRenderTarget getBackendRenderTarget() const override; 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescriptor* desc, 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkRenderPass::AttachmentFlags* flags) const; 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void addResources(GrVkCommandBuffer& commandBuffer) const; 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkRenderTarget(GrVkGpu* gpu, 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrSurfaceDesc& desc, 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& info, 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& msaaInfo, 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* colorAttachmentView, 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* resolveAttachmentView, 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendObjectOwnership); 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkRenderTarget(GrVkGpu* gpu, 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrSurfaceDesc& desc, 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& info, 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* colorAttachmentView, 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendObjectOwnership); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkGpu* getVkGpu() const; 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onAbandon() override; 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onRelease() override; 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // This accounts for the texture's memory and any MSAA renderbuffer's memory. 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot size_t onGpuMemorySize() const override { 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int numColorSamples = this->numColorSamples(); 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (numColorSamples > 1) { 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // Add one to account for the resolved VkImage. 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot numColorSamples += 1; 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return GrSurface::ComputeSize(this->config(), this->width(), this->height(), 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot numColorSamples, GrMipMapped::kNo); 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void createFramebuffer(GrVkGpu* gpu); 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* fColorAttachmentView; 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<GrVkImage> fMSAAImage; 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* fResolveAttachmentView; 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkRenderTarget(GrVkGpu* gpu, 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBudgeted, 120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrSurfaceDesc& desc, 121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& info, 122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& msaaInfo, 123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* colorAttachmentView, 124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* resolveAttachmentView, 125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendObjectOwnership); 126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkRenderTarget(GrVkGpu* gpu, 128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBudgeted, 129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrSurfaceDesc& desc, 130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo& info, 131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageView* colorAttachmentView, 132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrBackendObjectOwnership); 133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static GrVkRenderTarget* Create(GrVkGpu*, SkBudgeted, const GrSurfaceDesc&, 135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkImageInfo&, GrBackendObjectOwnership); 136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool completeStencilAttachment() override; 138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void releaseInternalObjects(); 140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void abandonInternalObjects(); 141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkFramebuffer* fFramebuffer; 143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // This is a cached pointer to a simple render pass. The render target should unref it 145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // once it is done with it. 146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrVkRenderPass* fCachedSimpleRenderPass; 147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // This is a handle to be used to quickly get compatible GrVkRenderPasses for this render target 148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrVkResourceProvider::CompatibleRPHandle fCompatibleRPHandle; 149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 152