最近接到个任务,就是把OpenCL
的.cl
代码编译成Vulkan
程序。
使用Google
开源的工具clspv
实现这个功能即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ git clone https://github.com/google/clspv.git $ cd clspv $ python utils/fetch_sources.py $ mkdir build $ cd build $ cmake .. $ make -j8 |
编译完成后,在 bin
目录下生成 clspv
这个可执行程序。
使用的时候参考项目的文档 OpenCL C 1.2 Language on Vulkan 。
只是需要注意的是,如果使用了 image 类型,比如image2d_t
则需要提供 -samplermap
这个参数,这个参数指向一个文件,文件内容可能如下:
1 2 |
CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST, CLK_NORMALIZED_COORDS_TRUE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_LINEAR |
具体的定义跟在 OpenCL
中调用 read_image/write_image 函数时候指定的 sampler
参数一致即可。