diff options
| -rw-r--r-- | common/c_cpp/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | common/c_cpp/vkutil.h | 5 | ||||
| -rw-r--r-- | vk-asylum/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | vk-asylum/main.c | 42 |
4 files changed, 65 insertions, 1 deletions
diff --git a/common/c_cpp/CMakeLists.txt b/common/c_cpp/CMakeLists.txt index 1e2cf1f..d629db3 100644 --- a/common/c_cpp/CMakeLists.txt +++ b/common/c_cpp/CMakeLists.txt @@ -106,4 +106,12 @@ if(DEMO_NEEDS_SDL3) pkg_check_modules(sdl3 REQUIRED IMPORTED_TARGET sdl3) target_link_libraries(common INTERFACE PkgConfig::sdl3) endif() -endif()
\ No newline at end of file +endif() + +# ----------------------------------------------------------------------------- +# Dependency: Vulkan +# ----------------------------------------------------------------------------- +if(DEMO_NEEDS_VULKAN) + find_package(Vulkan REQUIRED) + target_link_libraries(common INTERFACE Vulkan::Vulkan) +endif() diff --git a/common/c_cpp/vkutil.h b/common/c_cpp/vkutil.h new file mode 100644 index 0000000..89c7940 --- /dev/null +++ b/common/c_cpp/vkutil.h @@ -0,0 +1,5 @@ +#ifndef _DEMOS_VKUTIL_H_ +#define _DEMOS_VKUTIL_H_ + +#endif // _DEMOS_VKUTIL_H_ + diff --git a/vk-asylum/CMakeLists.txt b/vk-asylum/CMakeLists.txt new file mode 100644 index 0000000..9983a04 --- /dev/null +++ b/vk-asylum/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.15 FATAL_ERROR) +project(vk-asylum C) + +set(DEMO_NEEDS_SDL3 TRUE) +set(DEMO_NEEDS_VULKAN TRUE) +include("${CMAKE_CURRENT_LIST_DIR}/../common/c_cpp/CMakeLists.txt") + +add_executable(vk-asylum main.c) +target_link_libraries(vk-asylum PRIVATE common) diff --git a/vk-asylum/main.c b/vk-asylum/main.c new file mode 100644 index 0000000..2e0e0b2 --- /dev/null +++ b/vk-asylum/main.c @@ -0,0 +1,42 @@ +// Vulkan demo +// +// SPDX-License-Identifier: 0BSD +// + +#include <SDL3/SDL.h> +#include <SDL3/SDL_vulkan.h> +#include <stdlib.h> +#include <vulkan/vulkan.h> + +#define COUNTOF(_Arr) (sizeof(_Arr) / sizeof((_Arr)[0])) +#define DIE(...) do { printf(__VA_ARGS__); printf("\n"); exit(1); } while (0); +#define ASSERT(_Expr) do { if (!(_Expr)) { DIE("%s:%d: " #_Expr, __FILE__, __LINE__); } } while (0); + +int main(int argc, char* argv[]) +{ + (void)argc; (void)argv; + SDL_Init(SDL_INIT_VIDEO); + + SDL_Window* wnd = SDL_CreateWindow("vk-asylum", 1024, 768, SDL_WINDOW_VULKAN); + ASSERT(wnd); + + VkApplicationInfo vkai = (VkApplicationInfo){ + .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, + .apiVersion = VK_API_VERSION_1_4, + }; + VkInstanceCreateInfo vkici = (VkInstanceCreateInfo){ + .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, + .pApplicationInfo = &vkai, + }; + + vkici.ppEnabledExtensionNames = SDL_Vulkan_GetInstanceExtensions(&vkici.enabledExtensionCount); + printf("Instance extensions requested by SDL:\n"); + for (uint32_t i = 0; i < vkici.enabledExtensionCount; ++i) { + printf(" %s\n", vkici.ppEnabledExtensionNames[i]); + } + +#ifdef __APPLE__ + // Required for instance extension VK_KHR_portability_enumeration (MoltenVK) + vkici.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR; +#endif +} |