text: //
  // Copyright 2016 The ANGLE Project Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  //
  // WindowSurfaceVkWin32.cpp:
  //    Implements the class methods for WindowSurfaceVkWin32.
  //
  
  #include "libANGLE/renderer/vulkan/win32/WindowSurfaceVkWin32.h"
  
  #include "libANGLE/renderer/vulkan/RendererVk.h"
  
  namespace rx
  {
  
  WindowSurfaceVkWin32::WindowSurfaceVkWin32(const egl::SurfaceState &surfaceState,
                                             EGLNativeWindowType window,
                                             EGLint width,
                                             EGLint height)
      : WindowSurfaceVk(surfaceState, window, width, height)
  {}
  
  angle::Result WindowSurfaceVkWin32::createSurfaceVk(vk::Context *context, gl::Extents *extentsOut)
  {
      VkWin32SurfaceCreateInfoKHR createInfo = {};
  
      createInfo.sType     = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
      createInfo.flags     = 0;
      createInfo.hinstance = GetModuleHandle(nullptr);
      createInfo.hwnd      = mNativeWindowType;
      ANGLE_VK_TRY(context, vkCreateWin32SurfaceKHR(context->getRenderer()->getInstance(),
                                                    &createInfo, nullptr, &mSurface));
  
      return getCurrentWindowSize(context, extentsOut);
  }
  
  angle::Result WindowSurfaceVkWin32::getCurrentWindowSize(vk::Context *context,
                                                           gl::Extents *extentsOut)
  {
      RECT rect;
      ANGLE_VK_CHECK(context, GetClientRect(mNativeWindowType, &rect) == TRUE,
                     VK_ERROR_INITIALIZATION_FAILED);
  
      *extentsOut = gl::Extents(rect.right - rect.left, rect.bottom - rect.top, 0);
      return angle::Result::Continue;
  }
  
  }  // namespace rx
  