xref: /aosp_15_r20/external/swiftshader/tests/VulkanWrapper/Window.cpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright 2021 The SwiftShader Authors. All Rights Reserved.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker //    http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker 
15*03ce13f7SAndroid Build Coastguard Worker #include "Window.hpp"
16*03ce13f7SAndroid Build Coastguard Worker 
17*03ce13f7SAndroid Build Coastguard Worker #if USE_HEADLESS_SURFACE
18*03ce13f7SAndroid Build Coastguard Worker 
Window(vk::Instance instance,vk::Extent2D windowSize)19*03ce13f7SAndroid Build Coastguard Worker Window::Window(vk::Instance instance, vk::Extent2D windowSize)
20*03ce13f7SAndroid Build Coastguard Worker     : instance(instance)
21*03ce13f7SAndroid Build Coastguard Worker {
22*03ce13f7SAndroid Build Coastguard Worker 	vk::HeadlessSurfaceCreateInfoEXT surfaceCreateInfo;
23*03ce13f7SAndroid Build Coastguard Worker 	surface = instance.createHeadlessSurfaceEXT(surfaceCreateInfo);
24*03ce13f7SAndroid Build Coastguard Worker 	assert(surface);
25*03ce13f7SAndroid Build Coastguard Worker }
26*03ce13f7SAndroid Build Coastguard Worker 
~Window()27*03ce13f7SAndroid Build Coastguard Worker Window::~Window()
28*03ce13f7SAndroid Build Coastguard Worker {
29*03ce13f7SAndroid Build Coastguard Worker 	instance.destroySurfaceKHR(surface, nullptr);
30*03ce13f7SAndroid Build Coastguard Worker }
31*03ce13f7SAndroid Build Coastguard Worker 
getSurface()32*03ce13f7SAndroid Build Coastguard Worker vk::SurfaceKHR Window::getSurface()
33*03ce13f7SAndroid Build Coastguard Worker {
34*03ce13f7SAndroid Build Coastguard Worker 	return surface;
35*03ce13f7SAndroid Build Coastguard Worker }
36*03ce13f7SAndroid Build Coastguard Worker 
show()37*03ce13f7SAndroid Build Coastguard Worker void Window::show()
38*03ce13f7SAndroid Build Coastguard Worker {
39*03ce13f7SAndroid Build Coastguard Worker }
40*03ce13f7SAndroid Build Coastguard Worker 
41*03ce13f7SAndroid Build Coastguard Worker #elif defined(_WIN32)
42*03ce13f7SAndroid Build Coastguard Worker 
Window(vk::Instance instance,vk::Extent2D windowSize)43*03ce13f7SAndroid Build Coastguard Worker Window::Window(vk::Instance instance, vk::Extent2D windowSize)
44*03ce13f7SAndroid Build Coastguard Worker     : instance(instance)
45*03ce13f7SAndroid Build Coastguard Worker {
46*03ce13f7SAndroid Build Coastguard Worker 	windowClass.cbSize = sizeof(WNDCLASSEX);
47*03ce13f7SAndroid Build Coastguard Worker 	windowClass.style = CS_HREDRAW | CS_VREDRAW;
48*03ce13f7SAndroid Build Coastguard Worker 	windowClass.lpfnWndProc = DefWindowProc;
49*03ce13f7SAndroid Build Coastguard Worker 	windowClass.cbClsExtra = 0;
50*03ce13f7SAndroid Build Coastguard Worker 	windowClass.cbWndExtra = 0;
51*03ce13f7SAndroid Build Coastguard Worker 	windowClass.hInstance = moduleInstance;
52*03ce13f7SAndroid Build Coastguard Worker 	windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
53*03ce13f7SAndroid Build Coastguard Worker 	windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
54*03ce13f7SAndroid Build Coastguard Worker 	windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
55*03ce13f7SAndroid Build Coastguard Worker 	windowClass.lpszMenuName = NULL;
56*03ce13f7SAndroid Build Coastguard Worker 	windowClass.lpszClassName = "Window";
57*03ce13f7SAndroid Build Coastguard Worker 	windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
58*03ce13f7SAndroid Build Coastguard Worker 
59*03ce13f7SAndroid Build Coastguard Worker 	RegisterClassEx(&windowClass);
60*03ce13f7SAndroid Build Coastguard Worker 
61*03ce13f7SAndroid Build Coastguard Worker 	DWORD style = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
62*03ce13f7SAndroid Build Coastguard Worker 	DWORD extendedStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;
63*03ce13f7SAndroid Build Coastguard Worker 
64*03ce13f7SAndroid Build Coastguard Worker 	RECT windowRect;
65*03ce13f7SAndroid Build Coastguard Worker 	windowRect.left = 0L;
66*03ce13f7SAndroid Build Coastguard Worker 	windowRect.top = 0L;
67*03ce13f7SAndroid Build Coastguard Worker 	windowRect.right = (long)windowSize.width;
68*03ce13f7SAndroid Build Coastguard Worker 	windowRect.bottom = (long)windowSize.height;
69*03ce13f7SAndroid Build Coastguard Worker 
70*03ce13f7SAndroid Build Coastguard Worker 	AdjustWindowRectEx(&windowRect, style, FALSE, extendedStyle);
71*03ce13f7SAndroid Build Coastguard Worker 	uint32_t x = (GetSystemMetrics(SM_CXSCREEN) - windowRect.right) / 2;
72*03ce13f7SAndroid Build Coastguard Worker 	uint32_t y = (GetSystemMetrics(SM_CYSCREEN) - windowRect.bottom) / 2;
73*03ce13f7SAndroid Build Coastguard Worker 
74*03ce13f7SAndroid Build Coastguard Worker 	window = CreateWindowEx(extendedStyle, "Window", "Hello",
75*03ce13f7SAndroid Build Coastguard Worker 	                        style | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
76*03ce13f7SAndroid Build Coastguard Worker 	                        x, y,
77*03ce13f7SAndroid Build Coastguard Worker 	                        windowRect.right - windowRect.left,
78*03ce13f7SAndroid Build Coastguard Worker 	                        windowRect.bottom - windowRect.top,
79*03ce13f7SAndroid Build Coastguard Worker 	                        NULL, NULL, moduleInstance, NULL);
80*03ce13f7SAndroid Build Coastguard Worker 
81*03ce13f7SAndroid Build Coastguard Worker 	SetForegroundWindow(window);
82*03ce13f7SAndroid Build Coastguard Worker 	SetFocus(window);
83*03ce13f7SAndroid Build Coastguard Worker 
84*03ce13f7SAndroid Build Coastguard Worker 	// Create the Vulkan surface
85*03ce13f7SAndroid Build Coastguard Worker 	vk::Win32SurfaceCreateInfoKHR surfaceCreateInfo;
86*03ce13f7SAndroid Build Coastguard Worker 	surfaceCreateInfo.hinstance = moduleInstance;
87*03ce13f7SAndroid Build Coastguard Worker 	surfaceCreateInfo.hwnd = window;
88*03ce13f7SAndroid Build Coastguard Worker 	surface = instance.createWin32SurfaceKHR(surfaceCreateInfo);
89*03ce13f7SAndroid Build Coastguard Worker 	assert(surface);
90*03ce13f7SAndroid Build Coastguard Worker }
91*03ce13f7SAndroid Build Coastguard Worker 
~Window()92*03ce13f7SAndroid Build Coastguard Worker Window::~Window()
93*03ce13f7SAndroid Build Coastguard Worker {
94*03ce13f7SAndroid Build Coastguard Worker 	instance.destroySurfaceKHR(surface, nullptr);
95*03ce13f7SAndroid Build Coastguard Worker 	DestroyWindow(window);
96*03ce13f7SAndroid Build Coastguard Worker 	UnregisterClass("Window", moduleInstance);
97*03ce13f7SAndroid Build Coastguard Worker }
98*03ce13f7SAndroid Build Coastguard Worker 
getSurface()99*03ce13f7SAndroid Build Coastguard Worker vk::SurfaceKHR Window::getSurface()
100*03ce13f7SAndroid Build Coastguard Worker {
101*03ce13f7SAndroid Build Coastguard Worker 	return surface;
102*03ce13f7SAndroid Build Coastguard Worker }
103*03ce13f7SAndroid Build Coastguard Worker 
show()104*03ce13f7SAndroid Build Coastguard Worker void Window::show()
105*03ce13f7SAndroid Build Coastguard Worker {
106*03ce13f7SAndroid Build Coastguard Worker 	ShowWindow(window, SW_SHOW);
107*03ce13f7SAndroid Build Coastguard Worker }
108*03ce13f7SAndroid Build Coastguard Worker 
109*03ce13f7SAndroid Build Coastguard Worker #else
110*03ce13f7SAndroid Build Coastguard Worker #	error Window class unimplemented for this platform
111*03ce13f7SAndroid Build Coastguard Worker #endif
112