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