| Index: src/gpu/vk/GrVkRenderPass.cpp
|
| diff --git a/src/gpu/vk/GrVkRenderPass.cpp b/src/gpu/vk/GrVkRenderPass.cpp
|
| index 1aedab4cfa985dd35fcef1d7ec173f9129cd576d..c56bafa92daa367c547d95adbf4b36961255103e 100644
|
| --- a/src/gpu/vk/GrVkRenderPass.cpp
|
| +++ b/src/gpu/vk/GrVkRenderPass.cpp
|
| @@ -13,17 +13,31 @@
|
| #include "GrVkRenderTarget.h"
|
| #include "GrVkUtil.h"
|
|
|
| -void setup_simple_vk_attachment_description(VkAttachmentDescription* attachment,
|
| - VkFormat format,
|
| - uint32_t samples,
|
| - VkImageLayout layout) {
|
| +typedef GrVkRenderPass::AttachmentsDescriptor::AttachmentDesc AttachmentDesc;
|
| +
|
| +void setup_vk_attachment_description(VkAttachmentDescription* attachment,
|
| + const AttachmentDesc& desc,
|
| + 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->stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE;
|
| + attachment->format = desc.fFormat;
|
| + SkAssertResult(GrSampleCountToVkSampleCount(desc.fSamples, &attachment->samples));
|
| + switch (layout) {
|
| + case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
|
| + attachment->loadOp = desc.fLoadOp;
|
| + attachment->storeOp = desc.fStoreOp;
|
| + attachment->stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
| + attachment->stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
| + break;
|
| + case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
|
| + attachment->loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
| + attachment->storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
| + attachment->stencilLoadOp = desc.fLoadOp;
|
| + attachment->stencilStoreOp = desc.fStoreOp;
|
| + break;
|
| + default:
|
| + SkFAIL("Unexpected attachment layout");
|
| + }
|
| +
|
| attachment->initialLayout = layout;
|
| attachment->finalLayout = layout;
|
| }
|
| @@ -56,10 +70,9 @@ void GrVkRenderPass::initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& targ
|
| 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_vk_attachment_description(&attachments[currentAttachment],
|
| + fAttachmentsDescriptor.fColor,
|
| + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
|
| // setup subpass use of attachment
|
| colorRef.attachment = currentAttachment++;
|
| colorRef.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
| @@ -75,10 +88,9 @@ void GrVkRenderPass::initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& targ
|
|
|
| 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_vk_attachment_description(&attachments[currentAttachment],
|
| + fAttachmentsDescriptor.fResolve,
|
| + 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.
|
| @@ -90,10 +102,9 @@ void GrVkRenderPass::initSimple(const GrVkGpu* gpu, const GrVkRenderTarget& targ
|
|
|
| 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_vk_attachment_description(&attachments[currentAttachment],
|
| + fAttachmentsDescriptor.fStencil,
|
| + VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
|
| // setup subpass use of attachment
|
| stencilRef.attachment = currentAttachment++;
|
| stencilRef.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
| @@ -202,17 +213,17 @@ bool GrVkRenderPass::isCompatible(const GrVkRenderTarget& target) const {
|
| }
|
|
|
| if (fAttachmentFlags & kColor_AttachmentFlag) {
|
| - if (fAttachmentsDescriptor.fColor != desc.fColor) {
|
| + if (!fAttachmentsDescriptor.fColor.isCompatible(desc.fColor)) {
|
| return false;
|
| }
|
| }
|
| if (fAttachmentFlags & kResolve_AttachmentFlag) {
|
| - if (fAttachmentsDescriptor.fResolve != desc.fResolve) {
|
| + if (!fAttachmentsDescriptor.fResolve.isCompatible(desc.fResolve)) {
|
| return false;
|
| }
|
| }
|
| if (fAttachmentFlags & kStencil_AttachmentFlag) {
|
| - if (fAttachmentsDescriptor.fStencil != desc.fStencil) {
|
| + if (!fAttachmentsDescriptor.fStencil.isCompatible(desc.fStencil)) {
|
| return false;
|
| }
|
| }
|
|
|