blob: 448c979f161861218393d102f3c2beefc2769b35 [file] [log] [blame]
Hernan Liatisc6eb41b2019-02-22 11:12:59 -08001// 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_XLIBSURFACEKHR_HPP
16#define SWIFTSHADER_XLIBSURFACEKHR_HPP
17
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080018#include "VkSurfaceKHR.hpp"
Ben Clayton45c697a2019-12-17 20:38:03 +000019#include "libX11.hpp"
20#include "Vulkan/VkObject.hpp"
Saman Samif4d2a442019-05-21 15:04:41 -040021#include "vulkan/vulkan_xlib.h"
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080022
Ben Claytona9af8832019-08-14 13:09:43 +010023#include <unordered_map>
Hernan Liatisf945a5e2019-03-06 15:31:04 -080024
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080025namespace vk {
26
Ben Clayton45c697a2019-12-17 20:38:03 +000027class XlibSurfaceKHR : public SurfaceKHR, public ObjectBase<XlibSurfaceKHR, VkSurfaceKHR>
28{
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080029public:
30 XlibSurfaceKHR(const VkXlibSurfaceCreateInfoKHR *pCreateInfo, void *mem);
31
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080032 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
33
34 static size_t ComputeRequiredAllocationSize(const VkXlibSurfaceCreateInfoKHR *pCreateInfo);
35
36 void getSurfaceCapabilities(VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) const override;
37
Ben Clayton45c697a2019-12-17 20:38:03 +000038 virtual void attachImage(PresentImage *image) override;
39 virtual void detachImage(PresentImage *image) override;
40 VkResult present(PresentImage *image) override;
Hernan Liatis6b12a502019-03-01 15:06:13 -080041
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080042private:
Nicolas Capensd3545372019-08-09 13:59:18 -040043 Display *const pDisplay;
44 const Window window;
Hernan Liatis6b12a502019-03-01 15:06:13 -080045 GC gc;
Hernan Liatisf945a5e2019-03-06 15:31:04 -080046 Visual *visual = nullptr;
Ben Clayton45c697a2019-12-17 20:38:03 +000047 std::unordered_map<PresentImage *, XImage *> imageMap;
Hernan Liatisc6eb41b2019-02-22 11:12:59 -080048};
49
Ben Clayton45c697a2019-12-17 20:38:03 +000050} // namespace vk
51#endif //SWIFTSHADER_XLIBSURFACEKHR_HPP