25
Nov
2016
Vulkan 介绍
1. 环境搭建
1.1 Windows环境
- 下载LunarG® Vulkan™ SDK,链接地址
- Cmake安装、Python 3安装
- 更新驱动nvidia, 和安装VulkanRT
1.2 Android环境
- 下载Android Studio和NDK r12+
- 编译shaderc(可选), APP_STL可以是gnustl_static, gnustl_shared, c++_static,或者c++_shared
cd <ndk-root>/sources/third_party/shaderc/ ../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_STL:=c++_shared APP_ABI=all libshaderc_combined - 下载官方demo
git clone https://github.com/googlesamples/vulkan-basic-samples.git - 更新gslang
cd LunarGSamples update_external_sources.bat -s -g这里会从github上下载最新的gslang,并用msbuild.exe编译
- 生成Android Studio工程
cd API-samples cmake -DANDROID=ON -DANDROID_ABI=[armeabi-v7a|arm64-v8a| x86|x86_64|all(default)]从github下载下来的工程直接cmake会出错,因为在utils工程的CMakeList.txt有两个变量没有赋值(ANDROID_NDK和UTILS_NAME)
add_library(native_app_glue STATIC ${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c) #ANDROID_NDK 没有赋值导致上面的路径无效 target_include_directories(${UTILS_NAME} PRIVATE ${ANDROID_NDK}/sources/android/native_app_glue ${CMAKE_CURRENT_SOURCE_DIR}/../android/vulkan_wrapper ${CMAKE_CURRENT_SOURCE_DIR}/../data ${ANDROID_NDK}/sources/third_party/shaderc/include) #UTILS_NAME 没有赋值导致target_include_directories的语法错误修改方法,直接在LunarGSamples/API-Samples/utils/CMakeLists.txt,添加一下内容:
set(UTILS_NAME "utils") #随意命名,不是空字符串就行 if(WIN32) set(ANDROID_NDK "E:/3.1_Android_IDE/android-ndk-r13b") else() set(ANDROID_NDK "/home/billyzheng/tool/android-ndk-r13b") endif() - 编译Demo 用Android Studio 导入工程LunarGSamples/API-Samples/android(File > Import project) 编译APK(Build> Build APK)
2. LunarG SDK 介绍
- Vulkan Loader:
- Validation Layers 分析GPU内存、API参数、多线程API调用、纹理和渲染目标格式等等
- Vulkan Trace Tools:
3. 工具使用
3.1 SPIR-V
有三种方式生成SPIR-V
- Shared tools
- Single tool set for a single ISV
- Simplicity
4. API
4.1 概念
4.2 接口
4.3 扩展
Khronos-approved Extensions
- VK_KHR_android_surface
- VK_KHR_display
- VK_KHR_display_swapchain
- VK_KHR_mir_surface
- VK_KHR_surface
- VK_KHR_swapchain
- VK_KHR_wayland_surface
- VK_KHR_win32_surface
- VK_KHR_xcb_surface
- VK_KHR_xlib_surface
Multivendor Extensions
- VK_EXT_debug_marker
- VK_EXT_debug_report
- VK_EXT_validation_flags
AMD Vendor Extensions
- VK_AMD_draw_indirect_count
- VK_AMD_gcn_shader
- VK_AMD_gpu_shader_half_float
- VK_AMD_negative_viewport_height
- VK_AMD_rasterization_order
- VK_AMD_shader_ballot
- VK_AMD_shader_explicit_vertex_parameter
- VK_AMD_shader_trinary_minmax
Imagination Vendor Extensions
- VK_IMG_filter_cubic
- VK_IMG_format_pvrtc (Registered, but not currently documented)
NVIDIA Vendor Extensions
- VK_NV_dedicated_allocation
- VK_NV_external_memory
- VK_NV_external_memory_capabilities
- VK_NV_external_memory_win32
- VK_NV_glsl_shader
- VK_NV_win32_keyed_mutex
5. Samples
6. 参考资料
下一篇: Markdoown 语法