Index: src/gpu/vk/GrVkRenderPass.cpp |
diff --git a/src/gpu/vk/GrVkRenderPass.cpp b/src/gpu/vk/GrVkRenderPass.cpp |
deleted file mode 100644 |
index 9c4787b865cb3bce8ef6e271e37bfd5d9931357d..0000000000000000000000000000000000000000 |
--- a/src/gpu/vk/GrVkRenderPass.cpp |
+++ /dev/null |
@@ -1,220 +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 "GrVkRenderPass.h" |
- |
-#include "GrVkFramebuffer.h" |
-#include "GrVkGpu.h" |
-#include "GrVkRenderTarget.h" |
-#include "GrVkUtil.h" |
- |
-void setup_simple_vk_attachment_description(VkAttachmentDescription* attachment, |
- VkFormat format, |
- uint32_t samples, |
- VkImageLayout layout) { |
- attachment->flags = 0; |
- attachment->format = format; |
- SkAssertResult(GrSampleCountToVkSampleCount(samples, &attachment->samples)); |
- attachment->loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; |
- attachment->storeOp = VK_ATTACHMENT_STORE_OP_STORE; |
- attachment->stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; |
- attachment->storeOp = VK_ATTACHMENT_STORE_OP_STORE; |
- attachment->initialLayout = layout; |
- attachment->finalLayout = layout; |
-} |
- |
-void GrVkRenderPass::initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& target) { |
- // Get attachment information from render target. This includes which attachments the render |
- // target has (color, resolve, stencil) and the attachments format and sample count. |
- target.getAttachmentsDescriptor(&fAttachmentsDescriptor, &fAttachmentFlags); |
- |
- uint32_t numAttachments = fAttachmentsDescriptor.fAttachmentCount; |
- // Attachment descriptions to be set on the render pass |
- SkTArray<VkAttachmentDescription> attachments(numAttachments); |
- attachments.reset(numAttachments); |
- memset(attachments.begin(), 0, numAttachments*sizeof(VkAttachmentDescription)); |
- |
- // Refs to attachments on the render pass (as described by teh VkAttachmentDescription above), |
- // that are used by the subpass. |
- VkAttachmentReference colorRef; |
- VkAttachmentReference resolveRef; |
- VkAttachmentReference stencilRef; |
- uint32_t currentAttachment = 0; |
- |
- // Go through each of the attachment types (color, resolve, stencil) and set the necessary |
- // on the various Vk structs. |
- VkSubpassDescription subpassDesc; |
- memset(&subpassDesc, 0, sizeof(VkSubpassDescription)); |
- subpassDesc.flags = 0; |
- subpassDesc.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; |
- subpassDesc.inputAttachmentCount = 0; |
- subpassDesc.pInputAttachments = nullptr; |
- if (fAttachmentFlags & kColor_AttachmentFlag) { |
- // set up color attachment |
- setup_simple_vk_attachment_description(&attachments[currentAttachment], |
- fAttachmentsDescriptor.fColor.fFormat, |
- fAttachmentsDescriptor.fColor.fSamples, |
- VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); |
- // setup subpass use of attachment |
- colorRef.attachment = currentAttachment++; |
- colorRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; |
- subpassDesc.colorAttachmentCount = 1; |
- } else { |
- // I don't think there should ever be a time where we don't have a color attachment |
- SkASSERT(false); |
- colorRef.attachment = VK_ATTACHMENT_UNUSED; |
- colorRef.layout = VK_IMAGE_LAYOUT_UNDEFINED; |
- subpassDesc.colorAttachmentCount = 0; |
- } |
- subpassDesc.pColorAttachments = &colorRef; |
- |
- if (fAttachmentFlags & kResolve_AttachmentFlag) { |
- // set up resolve attachment |
- setup_simple_vk_attachment_description(&attachments[currentAttachment], |
- fAttachmentsDescriptor.fResolve.fFormat, |
- fAttachmentsDescriptor.fResolve.fSamples, |
- VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); |
- // setup subpass use of attachment |
- resolveRef.attachment = currentAttachment++; |
- // I'm really not sure what the layout should be for the resolve textures. |
- resolveRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; |
- subpassDesc.pResolveAttachments = &resolveRef; |
- } else { |
- subpassDesc.pResolveAttachments = nullptr; |
- } |
- |
- if (fAttachmentFlags & kStencil_AttachmentFlag) { |
- // set up stencil attachment |
- setup_simple_vk_attachment_description(&attachments[currentAttachment], |
- fAttachmentsDescriptor.fStencil.fFormat, |
- fAttachmentsDescriptor.fStencil.fSamples, |
- VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); |
- // setup subpass use of attachment |
- stencilRef.attachment = currentAttachment++; |
- stencilRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; |
- } else { |
- stencilRef.attachment = VK_ATTACHMENT_UNUSED; |
- stencilRef.layout = VK_IMAGE_LAYOUT_UNDEFINED; |
- } |
- subpassDesc.pDepthStencilAttachment = &stencilRef; |
- |
- subpassDesc.preserveAttachmentCount = 0; |
- subpassDesc.pPreserveAttachments = nullptr; |
- |
- SkASSERT(numAttachments == currentAttachment); |
- |
- // Create the VkRenderPass compatible with the attachment descriptions above |
- VkRenderPassCreateInfo createInfo; |
- memset(&createInfo, 0, sizeof(VkRenderPassCreateInfo)); |
- createInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO; |
- createInfo.pNext = nullptr; |
- createInfo.flags = 0; |
- createInfo.attachmentCount = numAttachments; |
- createInfo.pAttachments = attachments.begin(); |
- createInfo.subpassCount = 1; |
- createInfo.pSubpasses = &subpassDesc; |
- createInfo.dependencyCount = 0; |
- createInfo.pDependencies = nullptr; |
- |
- GR_VK_CALL_ERRCHECK(gpu->vkInterface(), CreateRenderPass(gpu->device(), |
- &createInfo, |
- nullptr, |
- &fRenderPass)); |
-} |
- |
-void GrVkRenderPass::freeGPUData(const GrVkGpu* gpu) const { |
- GR_VK_CALL(gpu->vkInterface(), DestroyRenderPass(gpu->device(), fRenderPass, nullptr)); |
-} |
- |
-// Works under the assumption that color attachment will always be the first attachment in our |
-// attachment array if it exists. |
-bool GrVkRenderPass::colorAttachmentIndex(uint32_t* index) const { |
- *index = 0; |
- if (fAttachmentFlags & kColor_AttachmentFlag) { |
- return true; |
- } |
- return false; |
-} |
- |
-// Works under the assumption that resolve attachment will always be after the color attachment. |
-bool GrVkRenderPass::resolveAttachmentIndex(uint32_t* index) const { |
- *index = 0; |
- if (fAttachmentFlags & kColor_AttachmentFlag) { |
- ++(*index); |
- } |
- if (fAttachmentFlags & kResolve_AttachmentFlag) { |
- return true; |
- } |
- return false; |
-} |
- |
-// Works under the assumption that stencil attachment will always be after the color and resolve |
-// attachment. |
-bool GrVkRenderPass::stencilAttachmentIndex(uint32_t* index) const { |
- *index = 0; |
- if (fAttachmentFlags & kColor_AttachmentFlag) { |
- ++(*index); |
- } |
- if (fAttachmentFlags & kResolve_AttachmentFlag) { |
- ++(*index); |
- } |
- if (fAttachmentFlags & kStencil_AttachmentFlag) { |
- return true; |
- } |
- return false; |
-} |
- |
-void GrVkRenderPass::getBeginInfo(const GrVkRenderTarget& target, |
- VkRenderPassBeginInfo* beginInfo, |
- VkSubpassContents* contents) const { |
- SkASSERT(this->isCompatible(target)); |
- |
- VkRect2D renderArea; |
- renderArea.offset = { 0, 0 }; |
- renderArea.extent = { (uint32_t)target.width(), (uint32_t)target.height() }; |
- |
- memset(beginInfo, 0, sizeof(VkRenderPassBeginInfo)); |
- beginInfo->sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; |
- beginInfo->pNext = nullptr; |
- beginInfo->renderPass = fRenderPass; |
- beginInfo->framebuffer = target.framebuffer()->framebuffer(); |
- beginInfo->renderArea = renderArea; |
- beginInfo->clearValueCount = 0; |
- beginInfo->pClearValues = nullptr; |
- |
- // Currently just assuming no secondary cmd buffers. This value will need to be update if we |
- // have them. |
- *contents = VK_SUBPASS_CONTENTS_INLINE; |
-} |
- |
-bool GrVkRenderPass::isCompatible(const GrVkRenderTarget& target) const { |
- AttachmentsDescriptor desc; |
- AttachmentFlags flags; |
- target.getAttachmentsDescriptor(&desc, &flags); |
- |
- if (flags != fAttachmentFlags) { |
- return false; |
- } |
- |
- if (fAttachmentFlags & kColor_AttachmentFlag) { |
- if (fAttachmentsDescriptor.fColor != desc.fColor) { |
- return false; |
- } |
- } |
- if (fAttachmentFlags & kResolve_AttachmentFlag) { |
- if (fAttachmentsDescriptor.fResolve != desc.fResolve) { |
- return false; |
- } |
- } |
- if (fAttachmentFlags & kStencil_AttachmentFlag) { |
- if (fAttachmentsDescriptor.fStencil != desc.fStencil) { |
- return false; |
- } |
- } |
- |
- return true; |
-} |