6

我很久以前就看到过使用 hlsl/glsl 着色器代码完成此操作——#include在源代码文件上使用 a 将代码粘贴到 achar*中,以便在运行时不会发生文件 IO。

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

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

现在这当然#define行不通,因为它只会尝试使用这些引号来开始字符串。

4

2 回答 2

12

有关如何内核执行此操作,请参阅 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;
   }
);
于 2011-02-17T20:51:00.830 回答
4

根据this,这是不可能的,但您可以使用它xxd -i来实现相同的效果。

于 2009-09-12T17:14:09.363 回答