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
37VkAndroidSurfaceCreateFlagsKHR          android_flags;
38VkImagePipeSurfaceCreateFlagsFUCHSIA    fuchsia_flags;
39VkStreamDescriptorSurfaceCreateFlagsGGP ggp_flags;
40VkIOSSurfaceCreateFlagsMVK              ios_flags;
41VkMacOSSurfaceCreateFlagsMVK            macos_flags;
42VkMetalSurfaceCreateFlagsEXT            metal_flags;
43VkViSurfaceCreateFlagsNN                vi_flags;
44VkWaylandSurfaceCreateFlagsKHR          wayland_flags;
45VkWin32SurfaceCreateFlagsKHR            win32_flags;
46VkXcbSurfaceCreateFlagsKHR              xcb_flags;
47VkXlibSurfaceCreateFlagsKHR             xlib_flags;
48VkScreenSurfaceCreateFlagsQNX           screen_flags;
49
50int 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