| Index: tools/viewer/sk_app/VulkanWindowContext.cpp
 | 
| diff --git a/tools/viewer/sk_app/VulkanWindowContext.cpp b/tools/viewer/sk_app/VulkanWindowContext.cpp
 | 
| index 8f5f4209a45c190375c2cbc9fcf52b2964d89c07..f21ec9c0cb5f74e282e28036dae07b737bef94d6 100644
 | 
| --- a/tools/viewer/sk_app/VulkanWindowContext.cpp
 | 
| +++ b/tools/viewer/sk_app/VulkanWindowContext.cpp
 | 
| @@ -24,7 +24,7 @@
 | 
|  
 | 
|  namespace sk_app {
 | 
|  
 | 
| -VulkanWindowContext::VulkanWindowContext(void* platformData, int msaaSampleCount)
 | 
| +VulkanWindowContext::VulkanWindowContext(void* platformData, const DisplayParams& params)
 | 
|      : fSurface(VK_NULL_HANDLE)
 | 
|      , fSwapchain(VK_NULL_HANDLE)
 | 
|      , fCommandPool(VK_NULL_HANDLE)
 | 
| @@ -32,10 +32,10 @@ VulkanWindowContext::VulkanWindowContext(void* platformData, int msaaSampleCount
 | 
|  
 | 
|      // any config code here (particularly for msaa)?
 | 
|  
 | 
| -    this->initializeContext(platformData);
 | 
| +    this->initializeContext(platformData, params);
 | 
|  }
 | 
|  
 | 
| -void VulkanWindowContext::initializeContext(void* platformData) {
 | 
| +void VulkanWindowContext::initializeContext(void* platformData, const DisplayParams& params) {
 | 
|  
 | 
|      fBackendContext.reset(GrVkBackendContext::Create(&fPresentQueueIndex, canPresent));
 | 
|      if (!(fBackendContext->fExtensions & kKHR_surface_GrVkExtensionFlag) ||
 | 
| @@ -74,7 +74,7 @@ void VulkanWindowContext::initializeContext(void* platformData) {
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| -    if (!this->createSwapchain(-1, -1)) {
 | 
| +    if (!this->createSwapchain(-1, -1, params)) {
 | 
|          this->destroyContext();
 | 
|          return;
 | 
|      }
 | 
| @@ -83,7 +83,8 @@ void VulkanWindowContext::initializeContext(void* platformData) {
 | 
|      vkGetDeviceQueue(fBackendContext->fDevice, fPresentQueueIndex, 0, &fPresentQueue);
 | 
|  }
 | 
|  
 | 
| -bool VulkanWindowContext::createSwapchain(uint32_t width, uint32_t height) {
 | 
| +bool VulkanWindowContext::createSwapchain(uint32_t width, uint32_t height,
 | 
| +                                          const DisplayParams& params) {
 | 
|      // check for capabilities
 | 
|      VkSurfaceCapabilitiesKHR caps;
 | 
|      VkResult res = fGetPhysicalDeviceSurfaceCapabilitiesKHR(fBackendContext->fPhysicalDevice,
 | 
| @@ -162,9 +163,24 @@ bool VulkanWindowContext::createSwapchain(uint32_t width, uint32_t height) {
 | 
|                                          VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR :
 | 
|                                          VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
 | 
|  
 | 
| -    // Pick our surface format -- for now, the first one
 | 
| -    VkFormat surfaceFormat = surfaceFormats[0].format;
 | 
| -    VkColorSpaceKHR colorSpace = surfaceFormats[0].colorSpace;
 | 
| +    // Pick our surface format. For now, just make sure it matches our sRGB request:
 | 
| +    VkFormat surfaceFormat = VK_FORMAT_UNDEFINED;
 | 
| +    VkColorSpaceKHR colorSpace = VK_COLORSPACE_SRGB_NONLINEAR_KHR;
 | 
| +    bool wantSRGB = kSRGB_SkColorProfileType == params.fProfileType;
 | 
| +    for (uint32_t i = 0; i < surfaceFormatCount; ++i) {
 | 
| +        GrPixelConfig config;
 | 
| +        if (GrVkFormatToPixelConfig(surfaceFormats[i].format, &config) &&
 | 
| +            GrPixelConfigIsSRGB(config) == wantSRGB) {
 | 
| +            surfaceFormat = surfaceFormats[i].format;
 | 
| +            colorSpace = surfaceFormats[i].colorSpace;
 | 
| +            break;
 | 
| +        }
 | 
| +    }
 | 
| +    fDisplayParams = params;
 | 
| +
 | 
| +    if (VK_FORMAT_UNDEFINED == surfaceFormat) {
 | 
| +        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.
 | 
| @@ -252,7 +268,9 @@ void VulkanWindowContext::createBuffers(VkFormat format) {
 | 
|          desc.fSampleCnt = 0;
 | 
|          desc.fStencilBits = 0;
 | 
|          desc.fRenderTargetHandle = (GrBackendObject) &info;
 | 
| -        SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
 | 
| +        SkSurfaceProps props(GrPixelConfigIsSRGB(fPixelConfig)
 | 
| +                             ? SkSurfaceProps::kGammaCorrect_Flag : 0,
 | 
| +                             kUnknown_SkPixelGeometry);
 | 
|          fSurfaces[i] = SkSurface::MakeFromBackendRenderTarget(fContext, desc, &props);
 | 
|      }
 | 
|  
 | 
| @@ -420,7 +438,7 @@ SkSurface* VulkanWindowContext::getBackbufferSurface() {
 | 
|      }
 | 
|      if (VK_ERROR_OUT_OF_DATE_KHR == res) {
 | 
|          // tear swapchain down and try again
 | 
| -        if (!this->createSwapchain(0, 0)) {
 | 
| +        if (!this->createSwapchain(0, 0, fDisplayParams)) {
 | 
|              return nullptr;
 | 
|          }
 | 
|  
 | 
| 
 |