summaryrefslogtreecommitdiff
path: root/tests/common/test_vulkan.c
diff options
context:
space:
mode:
authorBerke Güzel <wenekar1@gmail.com>2026-10-14 13:13:52 +0300
committerBerke Güzel <wenekar1@gmail.com>2026-10-14 13:13:52 +0300
commit1ab3e5a123109704789c2768e11a4f9af515821d (patch)
tree31ee03e58093a58100c6eb58681d5d29648a5ddd /tests/common/test_vulkan.c
parentd86fa6215d40caa7852dbbd6a8cf4aa8e89dd879 (diff)
Redefine public and rendering APIs with explicit contracts
Diffstat (limited to 'tests/common/test_vulkan.c')
-rw-r--r--tests/common/test_vulkan.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/tests/common/test_vulkan.c b/tests/common/test_vulkan.c
index 12daa22..b12256a 100644
--- a/tests/common/test_vulkan.c
+++ b/tests/common/test_vulkan.c
@@ -41,29 +41,32 @@ static int run_test(enum yasl_backend backend)
VkSemaphore acquired = VK_NULL_HANDLE, rendered = VK_NULL_HANDLE;
VkCommandBuffer command = VK_NULL_HANDLE;
- if (!yasl_set_backend(backend)) {
+ if ((yasl_init(&(struct yasl_options){.backend=backend}) < 0)) {
fprintf(stderr, "vulkan integration: cannot select requested backend %d (YASL error %d)\n",
- backend, yasl_get_error(NULL));
+ backend, errno);
goto cleanup;
}
- if (!yasl_vulkan_init(vkGetInstanceProcAddr)) {
+ if ((yasl_vulkan_init(vkGetInstanceProcAddr) < 0)) {
fprintf(stderr, "vulkan integration: loader initialization failed (YASL error %d)\n",
- yasl_get_error(NULL));
+ errno);
goto cleanup;
}
- surface = yasl_surface_create("yasl Vulkan WSI integration", 256, 192, 0);
+ surface = yasl_surface_create(&(struct yasl_surface_options){.title="yasl Vulkan WSI integration", .width=256, .height=192, .type=YASL_SURFACE_NATIVE, .flags=0});
if (!surface) {
fprintf(stderr, "vulkan integration: surface creation failed (YASL error %d)\n",
- yasl_get_error(NULL));
+ errno);
goto cleanup;
}
- if (!(yasl_surface_features(surface) & YASL_CAP_VULKAN)) {
+ if (!(yasl_surface_get_features(surface) & YASL_CAP_VULKAN)) {
fprintf(stderr, "vulkan integration: requested backend does not advertise Vulkan WSI\n");
goto cleanup;
}
uint32_t extension_count = 0;
- const char *const *required = yasl_vulkan_instance_extensions(surface, &extension_count);
+ struct yasl_vulkan_requirements requirements;
+ if (yasl_vulkan_get_requirements(surface, &requirements) < 0) goto cleanup;
+ extension_count = requirements.extension_count;
+ const char *const *required = requirements.extensions;
if (!required || !extension_count) {
fprintf(stderr, "vulkan integration: surface returned no required instance extensions\n");
goto cleanup;
@@ -99,7 +102,7 @@ static int run_test(enum yasl_backend backend)
VkInstanceCreateInfo instance_info = {
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pApplicationInfo = &app,
- .flags = yasl_vulkan_instance_flags(surface),
+ .flags = requirements.flags,
.enabledExtensionCount = extension_count,
.ppEnabledExtensionNames = required,
};
@@ -108,6 +111,18 @@ static int run_test(enum yasl_backend backend)
vr = yasl_vulkan_create_surface(surface, instance, NULL, &vk_surface);
if (vr != VK_SUCCESS) { status = fail_vk("yasl_vulkan_create_surface", vr); goto cleanup; }
+ VkSurfaceKHR duplicate = VK_NULL_HANDLE;
+ if (yasl_vulkan_create_surface(surface, instance, NULL, &duplicate) != VK_ERROR_NATIVE_WINDOW_IN_USE_KHR ||
+ duplicate != VK_NULL_HANDLE || yasl_surface_destroy(surface) != -EBUSY ||
+ yasl_shutdown() != -EBUSY || yasl_vulkan_init(vkGetInstanceProcAddr) != -EBUSY) {
+ fprintf(stderr, "vulkan integration: live WSI ownership was not enforced\n");
+ goto cleanup;
+ }
+ if (yasl_vulkan_destroy_surface(surface) != 0 || yasl_vulkan_destroy_surface(surface) != 0) goto cleanup;
+ vk_surface = VK_NULL_HANDLE;
+ vr = yasl_vulkan_create_surface(surface, instance, NULL, &vk_surface);
+ if (vr != VK_SUCCESS) { status = fail_vk("recreate Vulkan surface", vr); goto cleanup; }
+
uint32_t physical_count = 0;
vr = vkEnumeratePhysicalDevices(instance, &physical_count, NULL);
if (vr != VK_SUCCESS || !physical_count) {
@@ -365,7 +380,7 @@ cleanup:
if (command_pool) vkDestroyCommandPool(device, command_pool, NULL);
if (swapchain) vkDestroySwapchainKHR(device, swapchain, NULL);
if (device) vkDestroyDevice(device, NULL);
- if (vk_surface) vkDestroySurfaceKHR(instance, vk_surface, NULL);
+ if (vk_surface) yasl_vulkan_destroy_surface(surface);
if (instance) vkDestroyInstance(instance, NULL);
if (surface) yasl_surface_destroy(surface);
yasl_shutdown();