Added functioning example

This commit is contained in:
Alejandro Saucedo 2020-10-03 13:10:40 +01:00
parent 32caa1aa60
commit 4c3b18d560
6 changed files with 100 additions and 62 deletions

View file

@ -13,13 +13,13 @@ add_library(app-glue STATIC
# build vulkan app # build vulkan app
add_library(kompute_android SHARED add_library(kompute_android SHARED
main.cpp main.cpp)
${VK_ANDROID_COMMON_DIR}/vulkan_wrapper.cpp)
include_directories( include_directories(
${VK_ANDROID_COMMON_DIR} ${VK_ANDROID_COMMON_DIR}
${VK_ANDROID_INCLUDE_DIR} ${VK_ANDROID_INCLUDE_DIR}
../../../../../../../single_include/) ../../../../../../../single_include/
../../../../../../../vulkan_ndk_patch_include/)
# TODO: Explore: # TODO: Explore:
# * -DVK_NO_PROTOTYPES # * -DVK_NO_PROTOTYPES
@ -35,5 +35,5 @@ target_link_libraries(kompute_android
kompute kompute
app-glue app-glue
log log
"libvulkan.so" android_vulkan_wrapper
android) android)

View file

@ -22,12 +22,10 @@
#include <vector> #include <vector>
#include <unistd.h> #include <unistd.h>
//#include "TutorialValLayer.hpp" //#include "TutorialValLayer.hpp"
//#include "vulkan_wrapper.h"
#include "kompute/Kompute.hpp" #include "kompute/Kompute.hpp"
// Android log function wrappers // Android log function wrappers
static const char* kTAG = "Vulkan-Tutorial01"; static const char* kTAG = "Vulkan-Tutorial01";
#define LOGI(...) \ #define LOGI(...) \
@ -78,13 +76,16 @@ void android_main(struct android_app* app) {
bool initialize(android_app* app) { bool initialize(android_app* app) {
// // Load Android vulkan and retrieve vulkan API function pointers // // Load Android vulkan and retrieve vulkan API function pointers
// if (!InitVulkan()) { LOGI("Initialising vulkan");
// LOGE("Vulkan is unavailable, install vulkan and re-start"); // sleep(1);
// return false;
// } if (!InitVulkan()) {
LOGE("Vulkan is unavailable, install vulkan and re-start");
return false;
}
LOGI("Starting"); LOGI("Starting");
sleep(1); // sleep(1);
VkApplicationInfo appInfo = { VkApplicationInfo appInfo = {
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = nullptr, .pNext = nullptr,
@ -95,7 +96,7 @@ bool initialize(android_app* app) {
.pEngineName = "tutorial", .pEngineName = "tutorial",
}; };
LOGI("Created"); LOGI("Created");
sleep(1); // sleep(1);
// prepare necessary extensions: Vulkan on Android need these to function // prepare necessary extensions: Vulkan on Android need these to function
std::vector<const char *> instanceExt, deviceExt; std::vector<const char *> instanceExt, deviceExt;
@ -104,7 +105,7 @@ bool initialize(android_app* app) {
deviceExt.push_back("VK_KHR_swapchain"); deviceExt.push_back("VK_KHR_swapchain");
LOGI("Creating instance"); LOGI("Creating instance");
sleep(1); // sleep(1);
// Create the Vulkan instance // Create the Vulkan instance
VkInstanceCreateInfo instanceCreateInfo{ VkInstanceCreateInfo instanceCreateInfo{
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
@ -118,7 +119,7 @@ bool initialize(android_app* app) {
CALL_VK(vkCreateInstance(&instanceCreateInfo, nullptr, &tutorialInstance)); CALL_VK(vkCreateInstance(&instanceCreateInfo, nullptr, &tutorialInstance));
LOGI("Creating createinfo"); LOGI("Creating createinfo");
sleep(1); // sleep(1);
// if we create a surface, we need the surface extension // if we create a surface, we need the surface extension
VkAndroidSurfaceCreateInfoKHR createInfo{ VkAndroidSurfaceCreateInfoKHR createInfo{
.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR, .sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,
@ -226,20 +227,24 @@ bool initialize(android_app* app) {
LOGI("BEFORE RUNNING"); LOGI("BEFORE RUNNING");
// kp::Manager mgr; kp::Manager mgr;
// auto tensorA = mgr.buildTensor({0,1,2}); auto tensorA = mgr.buildTensor({0,1,2});
// auto tensorB = mgr.buildTensor({0,1,2}); auto tensorB = mgr.buildTensor({0,1,2});
// auto tensorC = mgr.buildTensor({0,0,0}); auto tensorC = mgr.buildTensor({1,2,3});
// mgr.evalOpDefault<kp::OpMult<>>({tensorA, tensorB, tensorC}); for(const float & i : tensorC->data()) {
// mgr.evalOpDefault<kp::OpTensorSyncLocal>({tensorC}); LOGI("%f ", i);
// }
// LOGI("HERE IS THE INFORMATION:");
// mgr.evalOpDefault<kp::OpMult<>>({tensorA, tensorB, tensorC});
// for(const float & i : tensorC->data()) { mgr.evalOpDefault<kp::OpTensorSyncLocal>({tensorC});
// LOGI("%u ", i);
// } LOGI("HERE IS THE INFORMATION:");
for(const float & i : tensorC->data()) {
LOGI("%f ", i);
}
initialized_ = true; initialized_ = true;

View file

@ -44,14 +44,13 @@ if(KOMPUTE_OPT_ANDOID_BUILD)
add_library(android_app_glue STATIC add_library(android_app_glue STATIC
${ANDROID_APP_GLUE_DIR}/android_native_app_glue.c) ${ANDROID_APP_GLUE_DIR}/android_native_app_glue.c)
#add_library(android_vulkan_wrapper STATIC add_library(android_vulkan_wrapper STATIC
# ${VK_ANDROID_COMMON_DIR}/vulkan_wrapper.cpp) ${PROJECT_SOURCE_DIR}/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp)
endif() endif()
if(KOMPUTE_OPT_ANDOID_BUILD) if(KOMPUTE_OPT_ANDOID_BUILD)
add_library(kompute add_library(kompute
${kompute_CPP} ${kompute_CPP})
${PROJECT_SOURCE_DIR}/vulkan_ndk_patch_include/kompute_vulkan_wrapper.cpp)
else() else()
add_library(kompute add_library(kompute
${kompute_CPP}) ${kompute_CPP})
@ -87,6 +86,7 @@ if(KOMPUTE_OPT_ANDOID_BUILD)
target_link_libraries( target_link_libraries(
kompute kompute
android_app_glue android_app_glue
android_vulkan_wrapper
log log
android android
) )

View file

@ -21,6 +21,28 @@ extern "C" {
#include "kompute_vulkan_wrapper.hpp" #include "kompute_vulkan_wrapper.hpp"
#include <dlfcn.h> #include <dlfcn.h>
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) { int InitVulkan(void) {
void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); void* libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) return 0; if (!libvulkan) return 0;
@ -694,17 +716,6 @@ PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV;
PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV;
PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV;
PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; 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_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT;
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT;
@ -716,15 +727,6 @@ PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV;
PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV;
PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; 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 #ifdef VK_USE_PLATFORM_FUCHSIA
PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA;
#endif #endif

View file

@ -409,4 +409,6 @@ extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlib
} }
#endif #endif
#endif // VULKAN_WRAPPER_H #endif // VULKAN_WRAPPER_H

View file

@ -8,19 +8,48 @@
#define VK_NO_PROTOTYPES 1 #define VK_NO_PROTOTYPES 1
#include <vulkan/vulkan.h> #include <vulkan/vulkan.h>
//typedef void *PFN_vkCreateAccelerationStructureNV; // Adding references previously in vulkan_wrapper.cpp into here instead for vulkan.hpp
//typedef void *PFN_vkDestroyAccelerationStructureNV; extern PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV;
//typedef void *PFN_vkGetAccelerationStructureMemoryRequirementsNV; extern PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV;
//typedef void *PFN_vkBindAccelerationStructureMemoryNV; extern PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV;
//typedef void *PFN_vkCmdBuildAccelerationStructureNV; extern PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV;
//typedef void *PFN_vkCmdCopyAccelerationStructureNV; extern PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV;
//typedef void *PFN_vkCmdTraceRaysNV; extern PFN_vkCompileDeferredNV vkCompileDeferredNV;
//typedef void *PFN_vkCreateRayTracingPipelinesNV; extern PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV;
//typedef void *PFN_vkGetRayTracingShaderGroupHandlesNV; extern PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV;
//typedef void *PFN_vkGetAccelerationStructureHandleNV; extern PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV;
//typedef void *PFN_vkCmdWriteAccelerationStructuresPropertiesNV; extern PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV;
//typedef void *PFN_vkCompileDeferredNV; 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_vkBindAccelerationStructureMemoryNVX;
typedef void *PFN_vkCmdBuildAccelerationStructureNVX; typedef void *PFN_vkCmdBuildAccelerationStructureNVX;