Question

J'ai vu cela depuis longtemps avec le code shader hlsl / glsl - en utilisant un #include sur le fichier de code source qui colle le code dans un char * afin qu'aucun fichier IO ne se produise au moment de l'exécution.

Si je devais le représenter sous forme de pseudo-code, cela ressemblerait un peu à ceci:

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

Maintenant, bien sûr, #define ne va pas fonctionner car il va simplement essayer d'utiliser ces guillemets pour démarrer des chaînes.

Était-ce utile?

La solution

Voir la balle utilisée par OpenCL dans le moteur physique pour comment faire cela sur un noyau .

En source C ++ / C

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

Dans la source OpenCL

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

Autres conseils

Selon ceci , c'est impossible, mais vous pouvez utiliser xxd -i pour obtenir le même effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top