--- R:/ATI Stream/include/CL/cl-1.0.hpp Thu Apr 29 11:46:57 2010 +++ R:/ATI Stream/include/CL/cl.hpp Mon May 03 18:30:52 2010 @@ -335,6 +335,9 @@ class Context; class CommandQueue; class Memory; +class Sampler; +class Kernel; +class Event; #if defined(__CL_ENABLE_EXCEPTIONS) #include @@ -824,7 +827,9 @@ static cl_int get(Functor f, cl_uint name, T* param) { - return f(name, sizeof(T), param, NULL); + cl_int ret = f(name, sizeof(T), param, NULL); + fixReferenceCount(param); + return ret; } }; @@ -1216,6 +1221,14 @@ { return ReferenceHandler::release(object_); } + + friend void fixReferenceCount(Context *param); + friend void fixReferenceCount(CommandQueue *param); + friend void fixReferenceCount(Memory *param); + friend void fixReferenceCount(Sampler *param); + friend void fixReferenceCount(Program *param); + friend void fixReferenceCount(Kernel *param); + friend void fixReferenceCount(Event *param); }; #if defined(__CL_ENABLE_EXCEPTIONS) @@ -7335,6 +7348,24 @@ &event); return event; +} + +namespace detail +{ +#define FIX_REFERENCE_COUNT(T) \ +static inline void fixReferenceCount(T *param) \ +{ \ + param->retain(); \ +} +template inline void fixReferenceCount(T *param) {} +FIX_REFERENCE_COUNT(Context); +FIX_REFERENCE_COUNT(CommandQueue); +FIX_REFERENCE_COUNT(Memory); +FIX_REFERENCE_COUNT(Sampler); +FIX_REFERENCE_COUNT(Program); +FIX_REFERENCE_COUNT(Kernel); +FIX_REFERENCE_COUNT(Event); +#undef FIX_REFERENCE_COUNT } #undef __ERR_STR