blob: 0fca5dd520096d509ff14bc82519cb1933cd0715 [file] [log] [blame]
Nicolas Capensd3545372019-08-09 13:59:18 -04001// Copyright 2019 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_WIN32SURFACEKHR_HPP
16#define SWIFTSHADER_WIN32SURFACEKHR_HPP
17
Nicolas Capensd3545372019-08-09 13:59:18 -040018#include "VkSurfaceKHR.hpp"
Ben Clayton45c697a2019-12-17 20:38:03 +000019#include "Vulkan/VkImage.hpp"
20#include "Vulkan/VkObject.hpp"
Nicolas Capensd3545372019-08-09 13:59:18 -040021
Jamie Madillbbd8c422019-08-28 17:08:17 -040022#if !defined(WIN32_LEAN_AND_MEAN)
Ben Clayton45c697a2019-12-17 20:38:03 +000023# define WIN32_LEAN_AND_MEAN
Jamie Madillbbd8c422019-08-28 17:08:17 -040024#endif // !defined(WIN32_LEAN_AND_MEAN)
Nicolas Capensd3545372019-08-09 13:59:18 -040025#include "vulkan/vulkan_win32.h"
Ben Clayton45c697a2019-12-17 20:38:03 +000026#include <Windows.h>
Nicolas Capensd3545372019-08-09 13:59:18 -040027
28#include <map>
29
30namespace vk {
31
Ben Clayton45c697a2019-12-17 20:38:03 +000032class Win32SurfaceKHR : public SurfaceKHR, public ObjectBase<Win32SurfaceKHR, VkSurfaceKHR>
33{
Nicolas Capensd3545372019-08-09 13:59:18 -040034public:
35 Win32SurfaceKHR(const VkWin32SurfaceCreateInfoKHR *pCreateInfo, void *mem);
36
37 void destroySurface(const VkAllocationCallbacks *pAllocator) override;
38
39 static size_t ComputeRequiredAllocationSize(const VkWin32SurfaceCreateInfoKHR *pCreateInfo);
40
41 void getSurfaceCapabilities(VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) const override;
42
Ben Clayton45c697a2019-12-17 20:38:03 +000043 virtual void attachImage(PresentImage *image) override;
44 virtual void detachImage(PresentImage *image) override;
45 VkResult present(PresentImage *image) override;
Nicolas Capensd3545372019-08-09 13:59:18 -040046
47private:
Antonio Maiorano26c6c4a2019-10-17 15:33:47 -040048 void lazyCreateFrameBuffer();
49 void destroyFrameBuffer();
50
Nicolas Capensd3545372019-08-09 13:59:18 -040051 const HWND hwnd;
52
53 HDC windowContext = {};
54 HDC bitmapContext = {};
Antonio Maiorano26c6c4a2019-10-17 15:33:47 -040055 VkExtent2D windowExtent = {};
Nicolas Capensd3545372019-08-09 13:59:18 -040056
57 HBITMAP bitmap = {};
Antonio Maiorano26c6c4a2019-10-17 15:33:47 -040058 int bitmapRowPitch = 0;
Nicolas Capensd3545372019-08-09 13:59:18 -040059 void *framebuffer = nullptr;
60};
61
Ben Clayton45c697a2019-12-17 20:38:03 +000062} // namespace vk
63#endif //SWIFTSHADER_WIN32SURFACEKHR_HPP