blob: 09119ebf63f4ec5f94f5fe5e47dc817f3dd43272 [file] [log] [blame]
Nicolas Caramellia681d122020-07-20 23:47:56 +02001// 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:
Antonio Caggianoa88d0562022-05-30 11:55:39 +020037 static bool isSupported();
Nicolas Caramellia681d122020-07-20 23:47:56 +020038 WaylandSurfaceKHR(const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, void *mem);
39
40 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
41
42 static size_t ComputeRequiredAllocationSize(const VkWaylandSurfaceCreateInfoKHR *pCreateInfo);
43
Shahbaz Youssefiea3fc742022-10-23 22:41:06 -040044 VkResult getSurfaceCapabilities(const void *pSurfaceInfoPNext, VkSurfaceCapabilitiesKHR *pSurfaceCapabilities, void *pSurfaceCapabilitiesPNext) const override;
Nicolas Caramellia681d122020-07-20 23:47:56 +020045
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
Sean Risser08762e32021-05-05 14:28:24 -040058#endif // SWIFTSHADER_WAYLANDSURFACEKHR_HPP