很久以前我用hlsl / glsl着色器代码看到了这一点 - 在源代码文件上使用 #include 将代码粘贴到 char * 这样在运行时就不会发生文件IO。

如果我将它表示为伪代码,它看起来会像这样:

#define CLSourceToString(filename) " #include "filename" "
const char* kernel = CLSourceToString("kernel.cl");

当然, #define 不会起作用,因为它只会尝试使用这些引号来启动字符串。

有帮助吗?

解决方案

请参阅子弹物理引擎对OpenCL的使用如何内核

在C ++ / C源代码

#define MSTRINGIFY(A) #A
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl"

在OpenCL源代码中

MSTRINGIFY(
   __kernel void VectorAdd(__global float8* c)
   {
    // snipped out OpenCL code...
    return;
   }
);

其他提示

根据这个,它是不可能,但你可以使用 xxd -i 来达到同样的效果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top