Vulkan官方API文档Vulkan® 1.0.95 - A Specification

Vulkan官方API文档 Vulkan® 1.0.95 - A Specification 对于开发者来说,非常有用。

由于官方网站访问非常缓慢,建议下载PDF版本到本地来查看。

官方文档地址:  Vulkan® 1.0.95 - A Specification - Khronos Group

官方PDF版本地址: Vulkan® 1.0.95 - A Specification - Khronos Group

本站的一份PDF版拷贝
继续阅读Vulkan官方API文档Vulkan® 1.0.95 - A Specification

Vulkan中的"#version 430 core"的理解

最近在学习Vulkan,结果在查看示例代码的时候:

对于如下语句出现了疑问

这句话的意思是OpenGL必须是4.3以及以上的版本。

那么是不是意味着,如果设备上的OpenGL低于这个版本,那么我们编写的Vulkan代码就不能执行呢?

答案是否定的,目前我们开发Vulkan默认是使用GLSLOpenGL Shading Language)语言,然后编译完成后的操作符被直接映射成Vulkan的定义操作符。

换句话说,我们只要执行如下命令,

能编译通过,就可以随意指定#version的版本。

这个版本号仅仅是GLSL语言在进行语法检查的时候需要的,而Vulkan是没有这个版本号需要的。

如果不使用GLSL语言编写,上述的#version应该都不会在语法中出现。

继续阅读Vulkan中的"#version 430 core"的理解

Vulkan中的gl_GlobalInvocationID, local_size_x的理解

最近在学习Vulkan,结果在查看示例代码的时候,对于如下两句出现了疑问:

首先是Invocation这个单词的理解,计算机语言中他的意思是 "the act of making a particular function start" ,中文意思是 "调用,启用"。

其中

意思是初始化,X * Y * Z 个计算单元供我们的代码调用,可以简单理解成线程数。如果不设置这几个值,默认值是 1,也就是只提供一个计算单元(线程)。

而使用如下的代码

意思是获取当前代码运行的计算单元的编号,也可以理解成获取当前线程的索引。

下面的代码都使用如下的命令编译成Vulkan使用的SPIR-V格式的代码

比如下面的代码,就是一个简单的利用gl_GlobalInvocationID,进行并行计算的例子:

但是,如果传入的数组的大小超过我们设置的计算单元的数量的情况,上述的代码是处理不了的。

可以如下方式处理上述情况:

如果想动态调整计算单元的数量,增加处理灵活性,可以参考下面的代码:

外部通过

函数调用的时候,指定

参数中的

参数中的

参数中的

指定的数值来动态调整所需要的计算单元的数量。

整个参数的设置流程特别长,非常难掌握。具体的使用例子参考 Glavnokoman/vuh以及 Vulkan® 1.0.95 - A Specification - Khronos Group文档中的上述参数的使用例子。

如果内部不指定,也可以通过外部调用

的时候设置,但是这样的设置存在一定的灵活性问题,可能需要多个独立的ComputePipeline来配合。

继续阅读Vulkan中的gl_GlobalInvocationID, local_size_x的理解

WordPress 5.0禁用古腾堡(Gutenberg)编辑器

最近升级到WordPress 5.0,这个版本的一个重要功能改进就是Gutenberg 编辑器,但是遗憾的是,这个版本的编辑器目前跟很多插件不兼容。我们只能是暂时禁用Gutenberg 编辑器,而是使用以前的经典版本的编辑器。

另外,目前试用来看,这个编辑器,也不好用。

最简单的办法就是安装官方提供的Classic Editor这个插件,如下图:
继续阅读WordPress 5.0禁用古腾堡(Gutenberg)编辑器

Android Studio 3.2.1编译Vulkan示例项目

最近在学习Vulkan,根据Google官方给出的文档,是存在一些问题的,总结一下:


如果代码下载不成功,可以本站下载一份拷贝。 点击这里下载 VulkanSamples vulkan-basic-samples
继续阅读Android Studio 3.2.1编译Vulkan示例项目

利用rsync断点续传scp中断的文件传输

服务器经常需要备份,但是长时间的下载,难免会出现下载中断的情况。

一直使用scp下载备份好的文件,以前数据量少的时候,直接重新下载就可以了。随着网站上数据越来越多,下载的时间越来越长,完全重新开始变得不现实了。有时候下载到90%以上的时候,失败了,完全重传是没有必要的。

我们只需要下载缺失的部分就好了,幸运的是rsync支持这种需求。

具体的做法是将如下的选项组合传递给rsync-checksum(文件分块计算校验和,只传输校验和不一致的部分),-in-place(将文件原地替换,因为rsync通常会写一个临时文件,然后移动)和-no-whole-file(告诉rsync不要复制整个文件,而是使用deltas(部分传输))。

例如:

下面是一个真实的例子:

整个过程非常的快,比完全重传快多了。

scp命令拷贝文件非常好用,但在拷贝大文件时存在一个问题就是连接经常会断开,此时再使用scp进行拷贝会重新拷贝文件,为了解决这个问题。我们可以使用rsync命令来进行断点续传。命令如下:

为了使用方便可以设置alias:

参考链接


macOS Mojave(10.14.1)安装Vulkan依赖的工具链SPIR-V Toolchain

目前在研究学习VulkanVulkan使用SPIR-V工具链进行编译,在macOS Mojave(10.14.1)中使用如下命令安装工具链:

但是,需要注意的是,使用HomeBrew安装的版本,缺少部分功能,如果使用"-Os"(代码大小优化)参数的时候,会报告错误,如下:

这是由于代码大小优化部分需要spirv-tools执行,然而HomeBrew编译的版本没有关联spirv-tools导致安装的程序没办法使用这个功能。

如果需要这部分功能,我们只能手动编译安装:


继续阅读macOS Mojave(10.14.1)安装Vulkan依赖的工具链SPIR-V Toolchain

解决Android Studio 3.2.1中NDK编译代码时候出现警告": warning: conflicts with previous declaration here [-Wattributes]"

在使用Android Studio 3.2.1 结合 NDK r16/r18编译代码时候出现如下警告:

关键是出现警告的代码文件中并不一定存在abs函数的调用。

这个警告产生的条件是在编译器中指定了STL,并且指定编译器为GCC,调用的源代码文件中恰好有STL的代码。

类似如下:

原因在于新版本的NDK r16/r18中,对于GCC部分的适配已经不是非常完善了,已经逐步迁移到CLANG(LLVM)了。导致STL进行编译的时候,会出现一些警告信息。这个警告信息是STL库的警告信息,跟我们自己的代码没有关系。

只需要指定 "-DANDROID_TOOLCHAIN=clang" 即可解决这个问题。

参考链接


NDK r13, -fexceptions -Wall --> warning: conflicts with previous declaration

解决git clone --recursive部分失败后继续检出代码

在使用如下命令检出Vulkan的时候,发生失败,Vulkan的代码已经成功检出,但是子模块没有完成


提示的出错信息如下:

可以使用如下命令继续检出子模块:

Android Studio 3.2.1解决错误信息"No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android"

在用Android Studio 3.2.1导入以前的项目,进行编译的时候,报告如下错误信息:

这个错误信息的原因是从NDK r17版本开始,已经不支持"armeabi、mips、mips64"这三种ABI格式了,而当前机器上安装的NDK版本是NDK r17之后的版本。

不过这个提示很能迷惑人,会让人误以为自己的build.gradle中配置了MIPSABI。实际上根本没有配置,是低版本的构建工具自己在默认构建MIPS格式,而又找不到对应的工具链。

解决方法很简单,要么使用低于NDK r17NDK版本,要么修改主工程的build.gradle,找到如下

将其中的

修改成

高版本的构建工具,才能适配高版本的NDK

参考链接