diff options
author | Brian Salomon <bsalomon@google.com> | 2018-03-09 12:02:32 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-09 17:26:50 +0000 |
commit | afdc6b1ba9f5dba52916bd20b608f1f7c21c3160 (patch) | |
tree | 6edfa3a2d534c7edbbf3cc91a2f09e292bfda08d | |
parent | 32929e0614742d03e067b117c71999c7ab1c902e (diff) |
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 <egdaniel@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
-rw-r--r-- | include/gpu/GrBackendSurface.h | 2 | ||||
-rw-r--r-- | src/gpu/GrBackendSurface.cpp | 11 | ||||
-rw-r--r-- | src/gpu/vk/GrVkGpu.cpp | 10 | ||||
-rw-r--r-- | tools/sk_app/VulkanWindowContext.cpp | 16 |
4 files changed, 26 insertions, 13 deletions
diff --git a/include/gpu/GrBackendSurface.h b/include/gpu/GrBackendSurface.h index c2fc619d8a..a2df90cd0d 100644 --- a/include/gpu/GrBackendSurface.h +++ b/include/gpu/GrBackendSurface.h @@ -194,11 +194,13 @@ public: const GrGLFramebufferInfo& glInfo); #ifdef SK_VULKAN + /** Deprecated, use version that does not take stencil bits. */ GrBackendRenderTarget(int width, int height, int sampleCnt, int stencilBits, const GrVkImageInfo& vkInfo); + GrBackendRenderTarget(int width, int height, int sampleCnt, const GrVkImageInfo& vkInfo); #endif int width() const { return fWidth; } 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<GrRenderTarget> GrVkGpu::onWrapBackendRenderTarget(const GrBackendRenderTa desc.fSampleCnt = 1; sk_sp<GrVkRenderTarget> 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; } diff --git a/tools/sk_app/VulkanWindowContext.cpp b/tools/sk_app/VulkanWindowContext.cpp index d7839bc189..b39c564eca 100644 --- a/tools/sk_app/VulkanWindowContext.cpp +++ b/tools/sk_app/VulkanWindowContext.cpp @@ -293,14 +293,14 @@ void VulkanWindowContext::createBuffers(VkFormat format, SkColorType colorType) info.fFormat = format; info.fLevelCount = 1; - GrBackendTexture backendTex(fWidth, fHeight, info); - - fSurfaces[i] = SkSurface::MakeFromBackendTextureAsRenderTarget(fContext.get(), backendTex, - kTopLeft_GrSurfaceOrigin, - fSampleCount, - colorType, - fDisplayParams.fColorSpace, - &fSurfaceProps); + GrBackendRenderTarget backendRT(fWidth, fHeight, fSampleCount, info); + + fSurfaces[i] = SkSurface::MakeFromBackendRenderTarget(fContext.get(), + backendRT, + kTopLeft_GrSurfaceOrigin, + colorType, + fDisplayParams.fColorSpace, + &fSurfaceProps); } // create the command pool for the command buffers |