! (c)2010 Joe Groff bsd license
USING: alien.c-types alien.data continuations cuda cuda.ffi
-cuda.libraries fry kernel namespaces ;
+cuda.libraries alien.destructors fry kernel namespaces ;
IN: cuda.contexts
+: set-up-cuda-context ( -- )
+ H{ } clone cuda-modules set-global
+ H{ } clone cuda-functions set-global ; inline
+
: create-context ( device flags -- context )
swap
[ CUcontext <c-object> ] 2dip
: destroy-context ( context -- ) cuCtxDestroy cuda-error ; inline
-: (set-up-cuda-context) ( device flags create-quot -- )
- H{ } clone cuda-modules set-global
- H{ } clone cuda-functions set
- call ; inline
+: clean-up-context ( context -- )
+ [ sync-context ] ignore-errors destroy-context ; inline
+
+DESTRUCTOR: destroy-context
+DESTRUCTOR: clean-up-context
: (with-cuda-context) ( context quot -- )
- swap '[ [ sync-context ] ignore-errors _ destroy-context ] [ ] cleanup ; inline
+ swap '[ _ clean-up-context ] [ ] cleanup ; inline
: with-cuda-context ( device flags quot -- )
- [ [ create-context ] (set-up-cuda-context) ] dip (with-cuda-context) ; inline
+ [ set-up-cuda-context create-context ] dip (with-cuda-context) ; inline
[ cuGLCtxCreate cuda-error ] 3keep 2drop *void* ; inline
: with-gl-cuda-context ( device flags quot -- )
- [ [ create-gl-cuda-context ] (set-up-cuda-context) ] dip (with-cuda-context) ; inline
+ [ set-up-cuda-context create-gl-cuda-context ] dip (with-cuda-context) ; inline
: gl-buffer>resource ( gl-buffer flags -- resource )
enum>number