blob: 4d4e21836d4a8aa9e3bbf1d61740468c98404efb [file] [log] [blame]
Ben Claytona9af8832019-08-14 13:09:43 +01001// 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
Ben Claytona9af8832019-08-14 13:09:43 +010018#include "VkSurfaceKHR.hpp"
Ben Clayton45c697a2019-12-17 20:38:03 +000019#include "Vulkan/VkObject.hpp"
Nicolas Capens2490b1a2020-07-13 14:33:01 -040020
21#include <vulkan/vulkan_xcb.h>
Ben Clayton45c697a2019-12-17 20:38:03 +000022#include <xcb/xcb.h>
Ben Claytona9af8832019-08-14 13:09:43 +010023
24#include <unordered_map>
25
26namespace vk {
27
Ben Clayton45c697a2019-12-17 20:38:03 +000028class XcbSurfaceKHR : public SurfaceKHR, public ObjectBase<XcbSurfaceKHR, VkSurfaceKHR>
29{
Ben Claytona9af8832019-08-14 13:09:43 +010030public:
31 XcbSurfaceKHR(const VkXcbSurfaceCreateInfoKHR *pCreateInfo, void *mem);
32
33 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
34
35 static size_t ComputeRequiredAllocationSize(const VkXcbSurfaceCreateInfoKHR *pCreateInfo);
36
Antonio Maiorano51286432021-02-19 09:56:47 -050037 VkResult getSurfaceCapabilities(VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) const override;
Ben Claytona9af8832019-08-14 13:09:43 +010038
Ben Clayton45c697a2019-12-17 20:38:03 +000039 virtual void attachImage(PresentImage *image) override;
40 virtual void detachImage(PresentImage *image) override;
41 VkResult present(PresentImage *image) override;
Ben Claytona9af8832019-08-14 13:09:43 +010042
Alexis Hetu349abcc2021-02-23 17:03:13 -050043 static bool hasLibXCB();
44
Ben Claytona9af8832019-08-14 13:09:43 +010045private:
Ben Clayton45c697a2019-12-17 20:38:03 +000046 xcb_connection_t *connection;
Ben Claytona9af8832019-08-14 13:09:43 +010047 xcb_window_t window;
Ben Clayton45c697a2019-12-17 20:38:03 +000048 std::unordered_map<PresentImage *, uint32_t> graphicsContexts;
Ben Claytona9af8832019-08-14 13:09:43 +010049};
50
Ben Clayton45c697a2019-12-17 20:38:03 +000051} // namespace vk
52#endif //SWIFTSHADER_XCBSURFACEKHR_HPP