Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(361)

Unified Diff: src/gpu/vk/GrVkRenderTarget.cpp

Issue 1723503002: Revert of Add vulkan files into skia repo. (Closed) Base URL: https://skia.googlesource.com/skia.git@merge
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/vk/GrVkRenderTarget.h ('k') | src/gpu/vk/GrVkResource.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/vk/GrVkRenderTarget.cpp
diff --git a/src/gpu/vk/GrVkRenderTarget.cpp b/src/gpu/vk/GrVkRenderTarget.cpp
deleted file mode 100644
index 87f1f77e392fb3832cc30556349e8e1fa8e8dd1c..0000000000000000000000000000000000000000
--- a/src/gpu/vk/GrVkRenderTarget.cpp
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "GrVkRenderTarget.h"
-
-#include "GrRenderTargetPriv.h"
-#include "GrVkCommandBuffer.h"
-#include "GrVkFramebuffer.h"
-#include "GrVkGpu.h"
-#include "GrVkImageView.h"
-#include "GrVkResourceProvider.h"
-#include "GrVkUtil.h"
-
-#define VK_CALL(GPU, X) GR_VK_CALL(GPU->vkInterface(), X)
-
-// We're virtually derived from GrSurface (via GrRenderTarget) so its
-// constructor must be explicitly called.
-GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource,
- const GrVkImage::Resource* msaaResource,
- const GrVkImageView* colorAttachmentView,
- const GrVkImageView* resolveAttachmentView)
- : GrSurface(gpu, lifeCycle, desc)
- , GrVkImage(imageResource)
- // for the moment we only support 1:1 color to stencil
- , GrRenderTarget(gpu, lifeCycle, desc, kUnified_SampleConfig)
- , fFramebuffer(nullptr)
- , fColorAttachmentView(colorAttachmentView)
- , fMSAAImageResource(msaaResource)
- , fResolveAttachmentView(resolveAttachmentView)
- , fCachedSimpleRenderPass(nullptr) {
- SkASSERT(desc.fSampleCnt);
- // The plus 1 is to account for the resolve texture.
- fColorValuesPerPixel = desc.fSampleCnt + 1; // TODO: this still correct?
- this->createFramebuffer(gpu);
- this->registerWithCache();
- msaaResource->ref();
-}
-
-// We're virtually derived from GrSurface (via GrRenderTarget) so its
-// constructor must be explicitly called.
-GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource,
- const GrVkImage::Resource* msaaResource,
- const GrVkImageView* colorAttachmentView,
- const GrVkImageView* resolveAttachmentView,
- Derived)
- : GrSurface(gpu, lifeCycle, desc)
- , GrVkImage(imageResource)
- // for the moment we only support 1:1 color to stencil
- , GrRenderTarget(gpu, lifeCycle, desc, kUnified_SampleConfig)
- , fFramebuffer(nullptr)
- , fColorAttachmentView(colorAttachmentView)
- , fMSAAImageResource(msaaResource)
- , fResolveAttachmentView(resolveAttachmentView)
- , fCachedSimpleRenderPass(nullptr) {
- SkASSERT(desc.fSampleCnt);
- // The plus 1 is to account for the resolve texture.
- fColorValuesPerPixel = desc.fSampleCnt + 1; // TODO: this still correct?
- this->createFramebuffer(gpu);
- msaaResource->ref();
-}
-
-// We're virtually derived from GrSurface (via GrRenderTarget) so its
-// constructor must be explicitly called.
-GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource,
- const GrVkImageView* colorAttachmentView)
- : GrSurface(gpu, lifeCycle, desc)
- , GrVkImage(imageResource)
- , GrRenderTarget(gpu, lifeCycle, desc, kUnified_SampleConfig)
- , fFramebuffer(nullptr)
- , fColorAttachmentView(colorAttachmentView)
- , fMSAAImageResource(nullptr)
- , fResolveAttachmentView(nullptr)
- , fCachedSimpleRenderPass(nullptr) {
- SkASSERT(!desc.fSampleCnt);
- fColorValuesPerPixel = 1;
- this->createFramebuffer(gpu);
- this->registerWithCache();
-}
-
-// We're virtually derived from GrSurface (via GrRenderTarget) so its
-// constructor must be explicitly called.
-GrVkRenderTarget::GrVkRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource,
- const GrVkImageView* colorAttachmentView,
- Derived)
- : GrSurface(gpu, lifeCycle, desc)
- , GrVkImage(imageResource)
- , GrRenderTarget(gpu, lifeCycle, desc, kUnified_SampleConfig)
- , fFramebuffer(nullptr)
- , fColorAttachmentView(colorAttachmentView)
- , fMSAAImageResource(nullptr)
- , fResolveAttachmentView(nullptr)
- , fCachedSimpleRenderPass(nullptr) {
- SkASSERT(!desc.fSampleCnt);
- fColorValuesPerPixel = 1;
- this->createFramebuffer(gpu);
-}
-
-GrVkRenderTarget*
-GrVkRenderTarget::Create(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource) {
- VkFormat pixelFormat;
- GrPixelConfigToVkFormat(desc.fConfig, &pixelFormat);
-
- VkImage colorImage;
-
- // create msaa surface if necessary
- const GrVkImage::Resource* msaaResource = nullptr;
- const GrVkImageView* resolveAttachmentView = nullptr;
- if (desc.fSampleCnt) {
- GrVkImage::ImageDesc msImageDesc;
- msImageDesc.fImageType = VK_IMAGE_TYPE_2D;
- msImageDesc.fFormat = pixelFormat;
- msImageDesc.fWidth = desc.fWidth;
- msImageDesc.fHeight = desc.fHeight;
- msImageDesc.fLevels = 1;
- msImageDesc.fSamples = desc.fSampleCnt;
- msImageDesc.fImageTiling = VK_IMAGE_TILING_OPTIMAL;
- msImageDesc.fUsageFlags = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
- msImageDesc.fMemProps = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
-
- msaaResource = GrVkImage::CreateResource(gpu, msImageDesc);
-
- if (!msaaResource) {
- return nullptr;
- }
-
- // Set color attachment image
- colorImage = msaaResource->fImage;
-
- // Create Resolve attachment view
- resolveAttachmentView = GrVkImageView::Create(gpu, imageResource->fImage, pixelFormat,
- GrVkImageView::kColor_Type);
- if (!resolveAttachmentView) {
- msaaResource->unref(gpu);
- return nullptr;
- }
- } else {
- // Set color attachment image
- colorImage = imageResource->fImage;
- }
-
- // Get color attachment view
- const GrVkImageView* colorAttachmentView = GrVkImageView::Create(gpu, colorImage, pixelFormat,
- GrVkImageView::kColor_Type);
- if (!colorAttachmentView) {
- if (msaaResource) {
- resolveAttachmentView->unref(gpu);
- msaaResource->unref(gpu);
- }
- return NULL;
- }
-
- GrVkRenderTarget* texRT;
- if (msaaResource) {
- texRT = new GrVkRenderTarget(gpu, desc, lifeCycle, imageResource, msaaResource,
- colorAttachmentView, resolveAttachmentView);
- msaaResource->unref(gpu);
- } else {
- texRT = new GrVkRenderTarget(gpu, desc, lifeCycle, imageResource,
- colorAttachmentView);
- }
-
- return texRT;
-}
-
-GrVkRenderTarget*
-GrVkRenderTarget::CreateNewRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::ImageDesc& imageDesc) {
- SkASSERT(imageDesc.fUsageFlags & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
-
- const GrVkImage::Resource* imageResource = GrVkImage::CreateResource(gpu, imageDesc);
- if (!imageResource) {
- return nullptr;
- }
-
- GrVkRenderTarget* rt = GrVkRenderTarget::Create(gpu, desc, lifeCycle, imageResource);
- // Create() will increment the refCount of the image resource if it succeeds
- imageResource->unref(gpu);
-
- return rt;
-}
-
-GrVkRenderTarget*
-GrVkRenderTarget::CreateWrappedRenderTarget(GrVkGpu* gpu,
- const GrSurfaceDesc& desc,
- GrGpuResource::LifeCycle lifeCycle,
- const GrVkImage::Resource* imageResource) {
- SkASSERT(imageResource);
-
- // Note: we assume the caller will unref the imageResource
- // Create() will increment the refCount, and we'll unref when we're done with it
- return GrVkRenderTarget::Create(gpu, desc, lifeCycle, imageResource);
-}
-
-bool GrVkRenderTarget::completeStencilAttachment() {
- this->createFramebuffer(this->getVkGpu());
- return true;
-}
-
-void GrVkRenderTarget::createFramebuffer(GrVkGpu* gpu) {
- if (fFramebuffer) {
- fFramebuffer->unref(gpu);
- }
- if (fCachedSimpleRenderPass) {
- fCachedSimpleRenderPass->unref(gpu);
- }
-
- // Vulkan requires us to create a compatible renderpass before we can create our framebuffer,
- // so we use this to get a (cached) basic renderpass, only for creation.
- fCachedSimpleRenderPass = gpu->resourceProvider().findOrCreateCompatibleRenderPass(*this);
-
- // Stencil attachment view is stored in the base RT stencil attachment
- const GrVkImageView* stencilView = this->stencilAttachmentView();
- fFramebuffer = GrVkFramebuffer::Create(gpu, this->width(), this->height(),
- fCachedSimpleRenderPass, fColorAttachmentView,
- fResolveAttachmentView, stencilView);
- SkASSERT(fFramebuffer);
-}
-
-void GrVkRenderTarget::getAttachmentsDescriptor(
- GrVkRenderPass::AttachmentsDescriptor* desc,
- GrVkRenderPass::AttachmentFlags* attachmentFlags) const {
- int colorSamples = this->numColorSamples();
- VkFormat colorFormat;
- GrPixelConfigToVkFormat(this->config(), &colorFormat);
- desc->fColor.fFormat = colorFormat;
- desc->fColor.fSamples = colorSamples ? colorSamples : 1;
- *attachmentFlags = GrVkRenderPass::kColor_AttachmentFlag;
- uint32_t attachmentCount = 1;
- if (colorSamples > 0) {
- desc->fResolve.fFormat = colorFormat;
- desc->fResolve.fSamples = 1;
- *attachmentFlags |= GrVkRenderPass::kResolve_AttachmentFlag;
- ++attachmentCount;
- }
-
- const GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment();
- if (stencil) {
- const GrVkStencilAttachment* vkStencil = static_cast<const GrVkStencilAttachment*>(stencil);
- desc->fStencil.fFormat = vkStencil->vkFormat();
- desc->fStencil.fSamples = vkStencil->numSamples() ? vkStencil->numSamples() : 1;
- // Currently in vulkan stencil and color attachments must all have same number of samples
- SkASSERT(desc->fColor.fSamples == desc->fStencil.fSamples);
- *attachmentFlags |= GrVkRenderPass::kStencil_AttachmentFlag;
- ++attachmentCount;
- }
- desc->fAttachmentCount = attachmentCount;
-}
-
-GrVkRenderTarget::~GrVkRenderTarget() {
- // either release or abandon should have been called by the owner of this object.
- SkASSERT(!fMSAAImageResource);
- SkASSERT(!fResolveAttachmentView);
- SkASSERT(!fColorAttachmentView);
- SkASSERT(!fFramebuffer);
- SkASSERT(!fCachedSimpleRenderPass);
-}
-
-void GrVkRenderTarget::addResources(GrVkCommandBuffer& commandBuffer) const {
- commandBuffer.addResource(this->framebuffer());
- commandBuffer.addResource(this->resource());
- commandBuffer.addResource(this->colorAttachmentView());
- if (this->msaaImageResource()) {
- commandBuffer.addResource(this->msaaImageResource());
- commandBuffer.addResource(this->resolveAttachmentView());
- }
- if (this->stencilImageResource()) {
- commandBuffer.addResource(this->stencilImageResource());
- commandBuffer.addResource(this->stencilAttachmentView());
- }
-}
-
-void GrVkRenderTarget::releaseInternalObjects() {
- GrVkGpu* gpu = this->getVkGpu();
-
- if (fMSAAImageResource) {
- fMSAAImageResource->unref(gpu);
- fMSAAImageResource = nullptr;
- }
-
- if (fResolveAttachmentView) {
- fResolveAttachmentView->unref(gpu);
- fResolveAttachmentView = nullptr;
- }
- if (fColorAttachmentView) {
- fColorAttachmentView->unref(gpu);
- fColorAttachmentView = nullptr;
- }
- if (fFramebuffer) {
- fFramebuffer->unref(gpu);
- fFramebuffer = nullptr;
- }
- if (fCachedSimpleRenderPass) {
- fCachedSimpleRenderPass->unref(gpu);
- fCachedSimpleRenderPass = nullptr;
- }
-}
-
-void GrVkRenderTarget::abandonInternalObjects() {
- if (fMSAAImageResource) {
- fMSAAImageResource->unrefAndAbandon();
- fMSAAImageResource = nullptr;
- }
-
- if (fResolveAttachmentView) {
- fResolveAttachmentView->unrefAndAbandon();
- fResolveAttachmentView = nullptr;
- }
- if (fColorAttachmentView) {
- fColorAttachmentView->unrefAndAbandon();
- fColorAttachmentView = nullptr;
- }
- if (fFramebuffer) {
- fFramebuffer->unrefAndAbandon();
- fFramebuffer = nullptr;
- }
- if (fCachedSimpleRenderPass) {
- fCachedSimpleRenderPass->unrefAndAbandon();
- fCachedSimpleRenderPass = nullptr;
- }
-}
-
-void GrVkRenderTarget::onRelease() {
- this->releaseInternalObjects();
- if (this->shouldFreeResources()) {
- this->releaseImage(this->getVkGpu());
- } else {
- this->abandonImage();
- }
-
- GrRenderTarget::onRelease();
-}
-
-void GrVkRenderTarget::onAbandon() {
- this->abandonInternalObjects();
- this->abandonImage();
- GrRenderTarget::onAbandon();
-}
-
-
-GrBackendObject GrVkRenderTarget::getRenderTargetHandle() const {
- // Currently just passing back the pointer to the main Image::Resource as the handle
- return (GrBackendObject)&fResource;
-}
-
-const GrVkImage::Resource* GrVkRenderTarget::stencilImageResource() const {
- const GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment();
- if (stencil) {
- const GrVkStencilAttachment* vkStencil = static_cast<const GrVkStencilAttachment*>(stencil);
- return vkStencil->imageResource();
- }
-
- return nullptr;
-}
-
-const GrVkImageView* GrVkRenderTarget::stencilAttachmentView() const {
- const GrStencilAttachment* stencil = this->renderTargetPriv().getStencilAttachment();
- if (stencil) {
- const GrVkStencilAttachment* vkStencil = static_cast<const GrVkStencilAttachment*>(stencil);
- return vkStencil->stencilView();
- }
-
- return nullptr;
-}
-
-
-GrVkGpu* GrVkRenderTarget::getVkGpu() const {
- SkASSERT(!this->wasDestroyed());
- return static_cast<GrVkGpu*>(this->getGpu());
-}
-
« no previous file with comments | « src/gpu/vk/GrVkRenderTarget.h ('k') | src/gpu/vk/GrVkResource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698