1 //
2 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // DisplayVkHeadless.cpp:
7 //    Implements the class methods for DisplayVkHeadless.
8 //
9 
10 #include "DisplayVkHeadless.h"
11 #include "WindowSurfaceVkHeadless.h"
12 
13 #include "libANGLE/Display.h"
14 #include "libANGLE/renderer/vulkan/RendererVk.h"
15 #include "libANGLE/renderer/vulkan/vk_caps_utils.h"
16 
17 namespace rx
18 {
19 
DisplayVkHeadless(const egl::DisplayState & state)20 DisplayVkHeadless::DisplayVkHeadless(const egl::DisplayState &state) : DisplayVk(state) {}
21 
terminate()22 void DisplayVkHeadless::terminate()
23 {
24     DisplayVk::terminate();
25 }
26 
isValidNativeWindow(EGLNativeWindowType window) const27 bool DisplayVkHeadless::isValidNativeWindow(EGLNativeWindowType window) const
28 {
29     return true;
30 }
31 
createWindowSurfaceVk(const egl::SurfaceState & state,EGLNativeWindowType window)32 SurfaceImpl *DisplayVkHeadless::createWindowSurfaceVk(const egl::SurfaceState &state,
33                                                       EGLNativeWindowType window)
34 {
35     return new WindowSurfaceVkHeadless(state, window);
36 }
37 
generateConfigs()38 egl::ConfigSet DisplayVkHeadless::generateConfigs()
39 {
40     constexpr GLenum kColorFormats[] = {GL_RGBA8, GL_BGRA8_EXT, GL_RGB565, GL_RGB8};
41 
42     return egl_vk::GenerateConfigs(kColorFormats, egl_vk::kConfigDepthStencilFormats, this);
43 }
44 
checkConfigSupport(egl::Config * config)45 void DisplayVkHeadless::checkConfigSupport(egl::Config *config) {}
46 
getWSIExtension() const47 const char *DisplayVkHeadless::getWSIExtension() const
48 {
49     return VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME;
50 }
51 
IsVulkanHeadlessDisplayAvailable()52 bool IsVulkanHeadlessDisplayAvailable()
53 {
54     return true;
55 }
56 
CreateVulkanHeadlessDisplay(const egl::DisplayState & state)57 DisplayImpl *CreateVulkanHeadlessDisplay(const egl::DisplayState &state)
58 {
59     return new DisplayVkHeadless(state);
60 }
61 
62 }  // namespace rx
63