2009-09-12 12 views
6

He visto esto hace mucho tiempo con código de sombreador hlsl/glsl - usando un #include en el archivo de código fuente que pega el código en un char* para que no ocurra ningún archivo IO en tiempo de ejecución.Usando #include para cargar el código OpenCL

Si tuviera que representarlo como pseudo-código, se vería un poco como esto:

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

Ahora, por supuesto que #define no va a trabajar, ya que sólo va a tratar de utilizar los comillas para iniciar cadenas.

+0

No hay duda aquí. – dajobe

Respuesta

12

Consulte el uso de motores de física de bala de OpenCL para how para hacer esto a un kernel.

En C++ fuente/C

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

En la fuente OpenCL

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

No funciona si su archivo .cl contiene comas que no están entre paréntesis, como "int x, y;", termina su cadena después de "int x". –

4

De acuerdo con this, no es posible, pero puede usar xxd -i para obtener el mismo efecto.

Cuestiones relacionadas