1// Copyright 2018 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_XCBSURFACEKHR_HPP
16#define SWIFTSHADER_XCBSURFACEKHR_HPP
17
18#include "VkSurfaceKHR.hpp"
19#include "Vulkan/VkObject.hpp"
20
21#include <xcb/shm.h>
22#include <xcb/xcb.h>
23// XCB headers must be included before the Vulkan header.
24#include <vulkan/vulkan_xcb.h>
25
26#include <unordered_map>
27
28namespace vk {
29
30class XcbSurfaceKHR : public SurfaceKHR, public ObjectBase<XcbSurfaceKHR, VkSurfaceKHR>
31{
32public:
33 static bool isSupported();
34 XcbSurfaceKHR(const VkXcbSurfaceCreateInfoKHR *pCreateInfo, void *mem);
35
36 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
37
38 static size_t ComputeRequiredAllocationSize(const VkXcbSurfaceCreateInfoKHR *pCreateInfo);
39
40 VkResult getSurfaceCapabilities(const void *pSurfaceInfoPNext, VkSurfaceCapabilitiesKHR *pSurfaceCapabilities, void *pSurfaceCapabilitiesPNext) const override;
41
42 virtual void *allocateImageMemory(PresentImage *image, const VkMemoryAllocateInfo &allocateInfo) override;
43 virtual void releaseImageMemory(PresentImage *image) override;
44 virtual void attachImage(PresentImage *image) override;
45 virtual void detachImage(PresentImage *image) override;
46 VkResult present(PresentImage *image) override;
47
48private:
49 xcb_connection_t *connection = nullptr;
50 xcb_window_t window = XCB_NONE;
51 bool mitSHM = false;
52 xcb_gcontext_t gc = XCB_NONE;
53 int windowDepth = 0;
54 mutable bool surfaceLost = false;
55 struct SHMPixmap
56 {
57 xcb_shm_seg_t shmseg = XCB_NONE;
58 void *shmaddr = nullptr;
59 xcb_pixmap_t pixmap = XCB_NONE;
60 };
61 std::unordered_map<PresentImage *, SHMPixmap> pixmaps;
62 // std::unordered_map<PresentImage *, uint32_t> graphicsContexts;
63};
64
65} // namespace vk
66#endif // SWIFTSHADER_XCBSURFACEKHR_HPP
67

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