1 //% gcc -c -Wall -I. -I../include htest.c
2
3 // Copyright 2019-2024 The Khronos Group Inc.
4 // SPDX-License-Identifier: Apache-2.0
5
6 // Simple compilation test for Vulkan headers, including all platform
7 // headers.
8 // To allow compilation in environments without one or more platforms, fake
9 // headers for different platforms are supplied. They provide just the types
10 // Vulkan platforms require.
11 // When a new Vulkan platform is defined, the corresponding USE_PLATFORM
12 // header definition, and any supporting fake platform headers, should be
13 // defined here, along with a trivial compilation test using a Vulkan type
14 // or function specific to that platform.
15
16 // Enable each platform when vulkan.h is included
17
18 #define VK_USE_PLATFORM_ANDROID_KHR // No headers needed
19 #define VK_USE_PLATFORM_FUCHSIA // <zircon/types.h>
20 #define VK_USE_PLATFORM_GGP // <ggp_c/vulkan_types.h>
21 #define VK_USE_PLATFORM_IOS_MVK // No headers needed
22 #define VK_USE_PLATFORM_MACOS_MVK // No headers needed
23 #define VK_USE_PLATFORM_METAL_EXT // No headers needed
24 #define VK_USE_PLATFORM_VI_NN // No headers needed
25 #define VK_USE_PLATFORM_WAYLAND_KHR // <wayland-client.h>
26 #define VK_USE_PLATFORM_WIN32_KHR // <windows.h>
27 #define VK_USE_PLATFORM_XCB_KHR // <xcb/xcb.h>
28 #define VK_USE_PLATFORM_XLIB_KHR // <X11/Xlib.h>
29 #define VK_USE_PLATFORM_XLIB_XRANDR_EXT // <X11/extensions/Xrandr.h>
30 #define VK_USE_PLATFORM_SCREEN_QNX // <screen/screen.h>
31 #define VK_ENABLE_BETA_EXTENSIONS // No headers needed
32
33 #include <vulkan/vulkan.h>
34
35 // Check with a type or function from each platform header in turn
36
37 VkAndroidSurfaceCreateFlagsKHR android_flags;
38 VkImagePipeSurfaceCreateFlagsFUCHSIA fuchsia_flags;
39 VkStreamDescriptorSurfaceCreateFlagsGGP ggp_flags;
40 VkIOSSurfaceCreateFlagsMVK ios_flags;
41 VkMacOSSurfaceCreateFlagsMVK macos_flags;
42 VkMetalSurfaceCreateFlagsEXT metal_flags;
43 VkViSurfaceCreateFlagsNN vi_flags;
44 VkWaylandSurfaceCreateFlagsKHR wayland_flags;
45 VkWin32SurfaceCreateFlagsKHR win32_flags;
46 VkXcbSurfaceCreateFlagsKHR xcb_flags;
47 VkXlibSurfaceCreateFlagsKHR xlib_flags;
48 VkScreenSurfaceCreateFlagsQNX screen_flags;
49
main(void)50 int main(void) {
51 VkInstanceCreateInfo instance_info;
52 VkInstance instance;
53
54 instance_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
55 instance_info.pNext = NULL,
56 instance_info.flags = 0,
57 instance_info.pApplicationInfo = NULL,
58 instance_info.enabledLayerCount = 0,
59 instance_info.ppEnabledLayerNames = NULL,
60 instance_info.enabledExtensionCount = 0,
61 instance_info.ppEnabledExtensionNames = NULL,
62
63 vkCreateInstance(&instance_info, NULL, &instance);
64 vkDestroyInstance(instance, NULL);
65
66 // Test XLIB_XRANDR_EXT platform, which does not define a new type
67 VkResult xrandr_result = vkAcquireXlibDisplayEXT((VkPhysicalDevice)0, (Display *)NULL, (VkDisplayKHR)0);
68
69 (void)xrandr_result;
70 return 0;
71 }
72