From afdc6b1ba9f5dba52916bd20b608f1f7c21c3160 Mon Sep 17 00:00:00 2001 From: Brian Salomon Date: Fri, 9 Mar 2018 12:02:32 -0500 Subject: Vulkan backend render targets don't allow client to specify stencil bits We already always create the stencil buffer even for wrapped RTs. Make VulkanWindowContext use SkSurface::MakeFromBackendRenderTarget. Change-Id: I5df429d347331801954ec17cb9d75e323a7af345 Reviewed-on: https://skia-review.googlesource.com/113206 Reviewed-by: Greg Daniel Commit-Queue: Brian Salomon --- src/gpu/GrBackendSurface.cpp | 11 ++++++++++- src/gpu/vk/GrVkGpu.cpp | 10 ++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) (limited to 'src/gpu') diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp index 73135dc42c..6db618f717 100644 --- a/src/gpu/GrBackendSurface.cpp +++ b/src/gpu/GrBackendSurface.cpp @@ -153,10 +153,19 @@ GrBackendRenderTarget::GrBackendRenderTarget(int width, int sampleCnt, int stencilBits, const GrVkImageInfo& vkInfo) + : GrBackendRenderTarget(width, height, sampleCnt, vkInfo) { + // This is a deprecated constructor that takes a bogus stencil bits. + SkASSERT(0 == stencilBits); +} + +GrBackendRenderTarget::GrBackendRenderTarget(int width, + int height, + int sampleCnt, + const GrVkImageInfo& vkInfo) : fWidth(width) , fHeight(height) , fSampleCnt(SkTMax(1, sampleCnt)) - , fStencilBits(stencilBits) + , fStencilBits(0) // We always create stencil buffers internally for vulkan , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat)) , fBackend(kVulkan_GrBackend) , fVkInfo(vkInfo) {} diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index b674185a00..1acbf02627 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -942,11 +942,13 @@ sk_sp GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTa desc.fSampleCnt = 1; sk_sp tgt = GrVkRenderTarget::MakeWrappedRenderTarget(this, desc, info); - if (tgt && backendRT.stencilBits()) { - if (!createStencilAttachmentForRenderTarget(tgt.get(), desc.fWidth, desc.fHeight)) { - return nullptr; - } + + // We don't allow the client to supply a premade stencil buffer. We always create one if needed. + SkASSERT(!backendRT.stencilBits()); + if (tgt) { + SkASSERT(tgt->canAttemptStencilAttachment()); } + return tgt; } -- cgit v1.2.3