From faa095e9842b924c20de84dce1bcc1adad7fe2e4 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Tue, 19 Dec 2017 13:15:02 -0500 Subject: Update SkSurface MakeFromBackend* factories to take an SkColorType. Bug: skia: Change-Id: Ib1b03b1181ec937843eac2e8d8cb03ebe53e32c1 Reviewed-on: https://skia-review.googlesource.com/86760 Commit-Queue: Greg Daniel Reviewed-by: Brian Salomon --- tools/sk_app/GLWindowContext.cpp | 13 +++---------- tools/sk_app/VulkanWindowContext.cpp | 22 +++++++++++++++++----- tools/sk_app/VulkanWindowContext.h | 2 +- tools/sk_app/WindowContext.h | 1 - 4 files changed, 21 insertions(+), 17 deletions(-) (limited to 'tools/sk_app') diff --git a/tools/sk_app/GLWindowContext.cpp b/tools/sk_app/GLWindowContext.cpp index d928a7bf43..9ef5141fee 100644 --- a/tools/sk_app/GLWindowContext.cpp +++ b/tools/sk_app/GLWindowContext.cpp @@ -39,15 +39,6 @@ void GLWindowContext::initializeContext() { this->initializeContext(); return; } - - if (fContext) { - // We may not have real sRGB support (ANGLE, in particular), so check for - // that, and fall back to L32: - fPixelConfig = fContext->caps()->srgbSupport() && fDisplayParams.fColorSpace - ? kSRGBA_8888_GrPixelConfig : kRGBA_8888_GrPixelConfig; - } else { - fPixelConfig = kUnknown_GrPixelConfig; - } } void GLWindowContext::destroyContext() { @@ -72,16 +63,18 @@ sk_sp GLWindowContext::getBackbufferSurface() { GR_GL_CALL(fBackendContext.get(), GetIntegerv(GR_GL_FRAMEBUFFER_BINDING, &buffer)); fbInfo.fFBOID = buffer; + fbInfo.fFormat = fContext->caps()->srgbSupport() && fDisplayParams.fColorSpace + ? GR_GL_SRGB8_ALPHA8 : GR_GL_RGBA8; GrBackendRenderTarget backendRT(fWidth, fHeight, fSampleCount, fStencilBits, - fPixelConfig, fbInfo); fSurface = SkSurface::MakeFromBackendRenderTarget(fContext.get(), backendRT, kBottomLeft_GrSurfaceOrigin, + kRGBA_8888_SkColorType, fDisplayParams.fColorSpace, &fSurfaceProps); } diff --git a/tools/sk_app/VulkanWindowContext.cpp b/tools/sk_app/VulkanWindowContext.cpp index 711791df18..6237ee09ae 100644 --- a/tools/sk_app/VulkanWindowContext.cpp +++ b/tools/sk_app/VulkanWindowContext.cpp @@ -201,6 +201,20 @@ bool VulkanWindowContext::createSwapchain(int width, int height, return false; } + SkColorType colorType; + switch (surfaceFormat) { + case VK_FORMAT_R8G8B8A8_UNORM: // fall through + case VK_FORMAT_R8G8B8A8_SRGB: + colorType = kRGBA_8888_SkColorType; + break; + case VK_FORMAT_B8G8R8A8_UNORM: // fall through + case VK_FORMAT_B8G8R8A8_SRGB: + colorType = kBGRA_8888_SkColorType; + break; + default: + return false; + } + // If mailbox mode is available, use it, as it is the lowest-latency non- // tearing mode. If not, fall back to FIFO which is always available. VkPresentModeKHR mode = VK_PRESENT_MODE_FIFO_KHR; @@ -254,15 +268,12 @@ bool VulkanWindowContext::createSwapchain(int width, int height, fDestroySwapchainKHR(fBackendContext->fDevice, swapchainCreateInfo.oldSwapchain, nullptr); } - this->createBuffers(swapchainCreateInfo.imageFormat); + this->createBuffers(swapchainCreateInfo.imageFormat, colorType); return true; } -void VulkanWindowContext::createBuffers(VkFormat format) { - fPixelConfig = GrVkFormatToPixelConfig(format); - SkASSERT(kUnknown_GrPixelConfig != fPixelConfig); - +void VulkanWindowContext::createBuffers(VkFormat format, SkColorType colorType) { fGetSwapchainImagesKHR(fBackendContext->fDevice, fSwapchain, &fImageCount, nullptr); SkASSERT(fImageCount); fImages = new VkImage[fImageCount]; @@ -287,6 +298,7 @@ void VulkanWindowContext::createBuffers(VkFormat format) { fSurfaces[i] = SkSurface::MakeFromBackendTextureAsRenderTarget(fContext.get(), backendTex, kTopLeft_GrSurfaceOrigin, fSampleCount, + colorType, fDisplayParams.fColorSpace, &fSurfaceProps); } diff --git a/tools/sk_app/VulkanWindowContext.h b/tools/sk_app/VulkanWindowContext.h index d02b11428e..df6ef33959 100644 --- a/tools/sk_app/VulkanWindowContext.h +++ b/tools/sk_app/VulkanWindowContext.h @@ -64,7 +64,7 @@ private: BackbufferInfo* getAvailableBackbuffer(); bool createSwapchain(int width, int height, const DisplayParams& params); - void createBuffers(VkFormat format); + void createBuffers(VkFormat format, SkColorType colorType); void destroyBuffers(); sk_sp fBackendContext; diff --git a/tools/sk_app/WindowContext.h b/tools/sk_app/WindowContext.h index cd4c357e20..5e7d76d4ba 100644 --- a/tools/sk_app/WindowContext.h +++ b/tools/sk_app/WindowContext.h @@ -61,7 +61,6 @@ protected: int fWidth; int fHeight; DisplayParams fDisplayParams; - GrPixelConfig fPixelConfig; SkSurfaceProps fSurfaceProps; // parameters obtained from the native window -- cgit v1.2.3