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
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)

View file

@ -22,12 +22,10 @@
#include <vector>
#include <unistd.h>
//#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<const char *> 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<kp::OpMult<>>({tensorA, tensorB, tensorC});
// mgr.evalOpDefault<kp::OpTensorSyncLocal>({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<kp::OpMult<>>({tensorA, tensorB, tensorC});
mgr.evalOpDefault<kp::OpTensorSyncLocal>({tensorC});
LOGI("HERE IS THE INFORMATION:");
for(const float & i : tensorC->data()) {
LOGI("%f ", i);
}
initialized_ = true;

View file

@ -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
)

View file

@ -21,6 +21,28 @@ extern "C" {
#include "kompute_vulkan_wrapper.hpp"
#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) {
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

View file

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

View file

@ -8,19 +8,48 @@
#define VK_NO_PROTOTYPES 1
#include <vulkan/vulkan.h>
//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;