1// Copyright 2020 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef SWIFTSHADER_WAYLANDSURFACEKHR_HPP
16#define SWIFTSHADER_WAYLANDSURFACEKHR_HPP
17
18#include "VkSurfaceKHR.hpp"
19#include "Vulkan/VkObject.hpp"
20
21#include <vulkan/vulkan_wayland.h>
22#include <wayland-client.h>
23
24#include <unordered_map>
25
26namespace vk {
27
28struct WaylandImage
29{
30 struct wl_buffer *buffer;
31 uint8_t *data;
32};
33
34class WaylandSurfaceKHR : public SurfaceKHR, public ObjectBase<WaylandSurfaceKHR, VkSurfaceKHR>
35{
36public:
37 static bool isSupported();
38 WaylandSurfaceKHR(const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, void *mem);
39
40 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
41
42 static size_t ComputeRequiredAllocationSize(const VkWaylandSurfaceCreateInfoKHR *pCreateInfo);
43
44 VkResult getSurfaceCapabilities(const void *pSurfaceInfoPNext, VkSurfaceCapabilitiesKHR *pSurfaceCapabilities, void *pSurfaceCapabilitiesPNext) const override;
45
46 virtual void attachImage(PresentImage *image) override;
47 virtual void detachImage(PresentImage *image) override;
48 VkResult present(PresentImage *image) override;
49
50private:
51 struct wl_display *display;
52 struct wl_surface *surface;
53 struct wl_shm *shm;
54 std::unordered_map<PresentImage *, WaylandImage *> imageMap;
55};
56
57} // namespace vk
58#endif // SWIFTSHADER_WAYLANDSURFACEKHR_HPP
59

source code of flutter_engine/third_party/swiftshader/src/WSI/WaylandSurfaceKHR.hpp