00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #if defined(LINUX)
00030
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 #include <unistd.h>
00034 #include <UT/UT_Thread.h>
00035 #include <VEX/VEX_VexOp.h>
00036
00037 namespace HDK_Sample {
00038
00039
00040
00041 static void
00042 pid_Evaluate(int, void *argv[], void *)
00043 {
00044 int *result = (int *)argv[0];
00045 *result = getpid();
00046 }
00047
00048 static void
00049 tid_Evaluate(int, void *argv[], void *)
00050 {
00051 int *result = (int *)argv[0];
00052 *result = UT_Thread::getMyThreadId();
00053 }
00054
00055 static void
00056 printStuff(int, void *argv[], void *)
00057 {
00058 int *result = (int *)argv[0];
00059 static int callCount = 0;
00060 fprintf(stderr, "Still here %d\n", callCount++);
00061 result[0] = 0;
00062 }
00063
00064 static void *
00065 initFunc()
00066 {
00067 fprintf(stderr, "Init\n");
00068 return 0;
00069 }
00070
00071 static void
00072 cleanupFunc(void *data)
00073 {
00074 fprintf(stderr, "Cleanup: Data = %p\n", data);
00075 }
00076
00077 }
00078
00079
00080
00081
00082 using namespace HDK_Sample;
00083 void
00084 newVEXOp(void *)
00085 {
00086
00087
00088 new VEX_VexOp("getpid@&I", pid_Evaluate,
00089 VEX_OP_CONTEXT|VEX_SHADING_CONTEXT,
00090 initFunc, cleanupFunc, VEX_OPTIMIZE_1);
00091 new VEX_VexOp("gettid@&I", tid_Evaluate,
00092 VEX_OP_CONTEXT|VEX_SHADING_CONTEXT,
00093 0, 0, VEX_OPTIMIZE_1);
00094 new VEX_VexOp("sticky@&I", printStuff,
00095 VEX_OP_CONTEXT|VEX_SHADING_CONTEXT,
00096 0, 0, VEX_OPTIMIZE_0);
00097 new VEX_VexOp("rcode@&I*F*FFF", printStuff,
00098 VEX_OP_CONTEXT|VEX_SHADING_CONTEXT,
00099 0, 0, VEX_OPTIMIZE_0, true);
00100 new VEX_VexOp("rcode@&I*F*FS", printStuff,
00101 VEX_OP_CONTEXT|VEX_SHADING_CONTEXT,
00102 0, 0, VEX_OPTIMIZE_0);
00103 }
00104
00105 #endif