From 41bb5e286a677697fbd9d09e60d7c55d64b38101 Mon Sep 17 00:00:00 2001 From: Attila Uygun Date: Fri, 19 May 2023 14:49:33 +0200 Subject: [PATCH] Fix for vulkan renderer --- README.md | 2 +- src/engine/platform/platform_android.cc | 7 ++-- src/engine/renderer/vulkan/vulkan_context.cc | 38 ++++++++++++-------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 2525074..3806be6 100644 --- a/README.md +++ b/README.md @@ -25,5 +25,5 @@ cd build/android [glslang](https://github.com/KhronosGroup/glslang), [spirv-reflect](https://github.com/KhronosGroup/SPIRV-Reflect), [vma](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator), -[vulkan-sdk](https://vulkan.lunarg.com) +[vulkan-sdk](https://vulkan.lunarg.com), [volk](https://github.com/zeux/volk) diff --git a/src/engine/platform/platform_android.cc b/src/engine/platform/platform_android.cc index fdfea31..79fc4fc 100644 --- a/src/engine/platform/platform_android.cc +++ b/src/engine/platform/platform_android.cc @@ -17,11 +17,6 @@ namespace { bool g_showing_interstitial_ad = false; extern "C" { -JNIEXPORT void JNICALL -Java_com_kaliber_base_KaliberActivity_onShowAdResult(JNIEnv* env, - jobject obj, - jboolean succeeded); -}; JNIEXPORT void JNICALL Java_com_kaliber_base_KaliberActivity_onShowAdResult(JNIEnv* env, @@ -30,6 +25,8 @@ Java_com_kaliber_base_KaliberActivity_onShowAdResult(JNIEnv* env, g_showing_interstitial_ad = !!succeeded; } +} + std::string GetApkPath(ANativeActivity* activity) { JNIEnv* env = nullptr; activity->vm->AttachCurrentThread(&env, nullptr); diff --git a/src/engine/renderer/vulkan/vulkan_context.cc b/src/engine/renderer/vulkan/vulkan_context.cc index cfd7e83..6db3ded 100644 --- a/src/engine/renderer/vulkan/vulkan_context.cc +++ b/src/engine/renderer/vulkan/vulkan_context.cc @@ -708,23 +708,33 @@ bool VulkanContext::InitializeQueues(VkSurfaceKHR surface) { // If the format list includes just one entry of VK_FORMAT_UNDEFINED, the // surface has no preferred format. Otherwise, at least one supported format // will be returned. - if (true || - (format_count == 1 && surf_formats[0].format == VK_FORMAT_UNDEFINED)) { + if (format_count == 1 && surf_formats[0].format == VK_FORMAT_UNDEFINED) { format_ = desired_format; + color_space_ = surf_formats[0].colorSpace; + } else if (format_count < 1) { + DLOG << "Format count less than 1."; + return false; } else { - if (format_count < 1) { - DLOG << "Format count less than 1."; - return false; - } - format_ = surf_formats[0].format; - for (unsigned i = 0; i < format_count; ++i) { - if (surf_formats[i].format == desired_format) { - format_ = desired_format; - break; + // Find the first format that we support. + format_ = VK_FORMAT_UNDEFINED; + const VkFormat allowed_formats[] = {VK_FORMAT_B8G8R8A8_UNORM, + VK_FORMAT_R8G8B8A8_UNORM}; + for (uint32_t afi = 0; afi < std::size(allowed_formats); afi++) { + for (uint32_t sfi = 0; sfi < format_count; sfi++) { + if (surf_formats[sfi].format == allowed_formats[afi]) { + format_ = surf_formats[sfi].format; + color_space_ = surf_formats[sfi].colorSpace; + goto end_of_find_format; + } } } + + end_of_find_format: + if (format_ == VK_FORMAT_UNDEFINED) { + DLOG << "No usable surface format found."; + return false; + } } - color_space_ = surf_formats[0].colorSpace; if (!CreateSemaphores()) return false; @@ -972,10 +982,10 @@ bool VulkanContext::UpdateSwapChain(Window* window) { VkCompositeAlphaFlagBitsKHR composite_alpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; VkCompositeAlphaFlagBitsKHR composite_alpha_flags[4] = { - VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR, VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR, VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR, + VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, }; for (uint32_t i = 0; i < std::size(composite_alpha_flags); i++) { if (surf_capabilities.supportedCompositeAlpha & composite_alpha_flags[i]) { @@ -1019,7 +1029,7 @@ bool VulkanContext::UpdateSwapChain(Window* window) { err = GetSwapchainImagesKHR(device_, window->swapchain, &sp_image_count, nullptr); if (err) { - DLOG << "CreateSwapchainKHR failed. Error: " << string_VkResult(err); + DLOG << "GetSwapchainImagesKHR failed. Error: " << string_VkResult(err); return false; }