From 4c3b18d56046e8a5a93d263dd55729f0ea253507 Mon Sep 17 00:00:00 2001 From: Alejandro Saucedo Date: Sat, 3 Oct 2020 13:10:40 +0100 Subject: [PATCH] Added functioning example --- .../app/src/main/jni/CMakeLists.txt | 8 +-- .../android-simple/app/src/main/jni/main.cpp | 49 +++++++++-------- src/CMakeLists.txt | 8 +-- .../kompute_vulkan_wrapper.cpp | 42 ++++++++------- .../kompute_vulkan_wrapper.hpp | 2 + .../kompute_vulkan_wrapper_patch.hpp | 53 ++++++++++++++----- 6 files changed, 100 insertions(+), 62 deletions(-) diff --git a/examples/android/android-simple/app/src/main/jni/CMakeLists.txt b/examples/android/android-simple/app/src/main/jni/CMakeLists.txt index 6d5da1418..695a14d6e 100644 --- a/examples/android/android-simple/app/src/main/jni/CMakeLists.txt +++ b/examples/android/android-simple/app/src/main/jni/CMakeLists.txt @@ -13,13 +13,13 @@ add_library(app-glue STATIC # build vulkan app add_library(kompute_android SHARED - main.cpp - ${VK_ANDROID_COMMON_DIR}/vulkan_wrapper.cpp) + main.cpp) include_directories( ${VK_ANDROID_COMMON_DIR} ${VK_ANDROID_INCLUDE_DIR} - ../../../../../../../single_include/) + ../../../../../../../single_include/ + ../../../../../../../vulkan_ndk_patch_include/) # TODO: Explore: # * -DVK_NO_PROTOTYPES @@ -35,5 +35,5 @@ target_link_libraries(kompute_android kompute app-glue log - "libvulkan.so" + android_vulkan_wrapper android) \ No newline at end of file diff --git a/examples/android/android-simple/app/src/main/jni/main.cpp b/examples/android/android-simple/app/src/main/jni/main.cpp index 37dad5780..392e49096 100644 --- a/examples/android/android-simple/app/src/main/jni/main.cpp +++ b/examples/android/android-simple/app/src/main/jni/main.cpp @@ -22,12 +22,10 @@ #include #include //#include "TutorialValLayer.hpp" -//#include "vulkan_wrapper.h" #include "kompute/Kompute.hpp" - // Android log function wrappers static const char* kTAG = "Vulkan-Tutorial01"; #define LOGI(...) \ @@ -78,13 +76,16 @@ void android_main(struct android_app* app) { bool initialize(android_app* app) { // // Load Android vulkan and retrieve vulkan API function pointers -// if (!InitVulkan()) { -// LOGE("Vulkan is unavailable, install vulkan and re-start"); -// return false; -// } + LOGI("Initialising vulkan"); +// sleep(1); + + if (!InitVulkan()) { + LOGE("Vulkan is unavailable, install vulkan and re-start"); + return false; + } LOGI("Starting"); - sleep(1); +// sleep(1); VkApplicationInfo appInfo = { .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, .pNext = nullptr, @@ -95,7 +96,7 @@ bool initialize(android_app* app) { .pEngineName = "tutorial", }; LOGI("Created"); - sleep(1); +// sleep(1); // prepare necessary extensions: Vulkan on Android need these to function std::vector instanceExt, deviceExt; @@ -104,7 +105,7 @@ bool initialize(android_app* app) { deviceExt.push_back("VK_KHR_swapchain"); LOGI("Creating instance"); - sleep(1); +// sleep(1); // Create the Vulkan instance VkInstanceCreateInfo instanceCreateInfo{ .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, @@ -118,7 +119,7 @@ bool initialize(android_app* app) { CALL_VK(vkCreateInstance(&instanceCreateInfo, nullptr, &tutorialInstance)); LOGI("Creating createinfo"); - sleep(1); +// sleep(1); // if we create a surface, we need the surface extension VkAndroidSurfaceCreateInfoKHR createInfo{ .sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, @@ -226,20 +227,24 @@ bool initialize(android_app* app) { LOGI("BEFORE RUNNING"); -// kp::Manager mgr; + kp::Manager mgr; -// auto tensorA = mgr.buildTensor({0,1,2}); -// auto tensorB = mgr.buildTensor({0,1,2}); -// auto tensorC = mgr.buildTensor({0,0,0}); + auto tensorA = mgr.buildTensor({0,1,2}); + auto tensorB = mgr.buildTensor({0,1,2}); + auto tensorC = mgr.buildTensor({1,2,3}); -// mgr.evalOpDefault>({tensorA, tensorB, tensorC}); -// mgr.evalOpDefault({tensorC}); -// -// LOGI("HERE IS THE INFORMATION:"); -// -// for(const float & i : tensorC->data()) { -// LOGI("%u ", i); -// } + for(const float & i : tensorC->data()) { + LOGI("%f ", i); + } + + mgr.evalOpDefault>({tensorA, tensorB, tensorC}); + mgr.evalOpDefault({tensorC}); + + LOGI("HERE IS THE INFORMATION:"); + + for(const float & i : tensorC->data()) { + LOGI("%f ", i); + } initialized_ = true; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ac5118263..1392848d7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,14 +44,13 @@ if(KOMPUTE_OPT_ANDOID_BUILD) add_library(android_app_glue STATIC ${ANDROID_APP_GLUE_DIR}/android_native_app_glue.c) - #add_library(android_vulkan_wrapper STATIC - # ${VK_ANDROID_COMMON_DIR}/vulkan_wrapper.cpp) + add_library(android_vulkan_wrapper STATIC + ${PROJECT_SOURCE_DIR}/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp) endif() if(KOMPUTE_OPT_ANDOID_BUILD) add_library(kompute - ${kompute_CPP} - ${PROJECT_SOURCE_DIR}/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp) + ${kompute_CPP}) else() add_library(kompute ${kompute_CPP}) @@ -87,6 +86,7 @@ if(KOMPUTE_OPT_ANDOID_BUILD) target_link_libraries( kompute android_app_glue + android_vulkan_wrapper log android ) diff --git a/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp b/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp index c510a4b16..b720ebaaa 100755 --- a/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp +++ b/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp @@ -21,6 +21,28 @@ extern "C" { #include "kompute_vulkan_wrapper.hpp" #include +PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; +PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; +PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; +PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; +PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; +PFN_vkCompileDeferredNV vkCompileDeferredNV; +PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; +PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; +PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; +PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; +PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; +#endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; +PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; +#endif + + int InitVulkan(void) { void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); if (!libvulkan) return 0; @@ -694,17 +716,6 @@ PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; -PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; -PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; -PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; -PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; -PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; -PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; -PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; -PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; -PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; -PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; -PFN_vkCompileDeferredNV vkCompileDeferredNV; PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; @@ -716,15 +727,6 @@ PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; -#ifdef VK_USE_PLATFORM_ANDROID_KHR -PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; -#endif - -#ifdef VK_USE_PLATFORM_ANDROID_KHR -PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; -PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; -#endif - #ifdef VK_USE_PLATFORM_FUCHSIA PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; #endif diff --git a/vulkan_ndk_patch_include/kompute_vulkan_wrapper.hpp b/vulkan_ndk_patch_include/kompute_vulkan_wrapper.hpp index 02376bd0f..042108bba 100755 --- a/vulkan_ndk_patch_include/kompute_vulkan_wrapper.hpp +++ b/vulkan_ndk_patch_include/kompute_vulkan_wrapper.hpp @@ -409,4 +409,6 @@ extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlib } #endif + #endif // VULKAN_WRAPPER_H + diff --git a/vulkan_ndk_patch_include/kompute_vulkan_wrapper_patch.hpp b/vulkan_ndk_patch_include/kompute_vulkan_wrapper_patch.hpp index e3ee7d4a4..edf7b8736 100644 --- a/vulkan_ndk_patch_include/kompute_vulkan_wrapper_patch.hpp +++ b/vulkan_ndk_patch_include/kompute_vulkan_wrapper_patch.hpp @@ -8,19 +8,48 @@ #define VK_NO_PROTOTYPES 1 #include -//typedef void *PFN_vkCreateAccelerationStructureNV; -//typedef void *PFN_vkDestroyAccelerationStructureNV; -//typedef void *PFN_vkGetAccelerationStructureMemoryRequirementsNV; -//typedef void *PFN_vkBindAccelerationStructureMemoryNV; -//typedef void *PFN_vkCmdBuildAccelerationStructureNV; -//typedef void *PFN_vkCmdCopyAccelerationStructureNV; -//typedef void *PFN_vkCmdTraceRaysNV; -//typedef void *PFN_vkCreateRayTracingPipelinesNV; -//typedef void *PFN_vkGetRayTracingShaderGroupHandlesNV; -//typedef void *PFN_vkGetAccelerationStructureHandleNV; -//typedef void *PFN_vkCmdWriteAccelerationStructuresPropertiesNV; -//typedef void *PFN_vkCompileDeferredNV; +// Adding references previously in vulkan_wrapper.cpp into here instead for vulkan.hpp +extern PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; +extern PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; +extern PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; +extern PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; +extern PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; +extern PFN_vkCompileDeferredNV vkCompileDeferredNV; +extern PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; +extern PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; +extern PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; +extern PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; +extern PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; +#ifdef VK_USE_PLATFORM_ANDROID_KHR +extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; +#endif + +#ifdef VK_USE_PLATFORM_ANDROID_KHR +extern PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; +extern PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; +#endif + +extern PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; +extern PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; +extern PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; +extern PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; +extern PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; +extern PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; +extern PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; +extern PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; +extern PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; +extern PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; +extern PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; +extern PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; +extern PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; +extern PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; +extern PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; +extern PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; +extern PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT; +extern PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; +extern PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; +extern PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; typedef void *PFN_vkBindAccelerationStructureMemoryNVX; typedef void *PFN_vkCmdBuildAccelerationStructureNVX;