I guess you should replace it in the function body too
diff --git a/opencl/c/syntax.rkt b/opencl/c/syntax.rkt
index 909b2c8..3848e1b 100644
--- a/opencl/c/syntax.rkt
+++ b/opencl/c/syntax.rkt
@@ -216,13 +216,13 @@
(define (id:selector arg_id ... _param_type)
(case (hash-ref id-selector-map _param_type #f)
[(_vtype)
- (local [(define len (id:length _arg_type ...
_param_type))]
+ (local [(define len (id:length arg_id ... _param_type))]
(if (zero? len)
_vtype-default
- (id:_vtype _arg_type ... _param_type len)))]
+ (id:_vtype arg_id ... _param_type len)))]
...
[(_ftype)
- (id:_ftype _arg_type ... _param_type)]
+ (id:_ftype arg_id ... _param_type)]
...
[else
(error 'id:selector "Invalid parameter: ~e"
_param_type)]))
On Sun, 25 Aug 2013 04:02:54 +0200, Dane Larsen <d...@larsendt.com> wrote:
Hmm. I think I almost have it, but there's one error I can't seem to
track down.
Switching from _arg_type to arg_id seems to have almost worked, but now
I'm stuck. When I try to run my context sharing test program
(https://github.com/larsendt/cl-gl-context-sharing/) I get the following:
vector-length: contract violation
expected: vector?
given: #<ctype>
context...:
/home/dane/chematox/local/racket-5.90.0.6/collects/ffi/unsafe.rkt:27:27:
vector->cblock
/home/dane/git/opencl/opencl/c/syntax.rkt:160:13
/home/dane/git/opencl/opencl/c/syntax.rkt:216:11:
clGetGLContextInfoKHR:generic
/home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt:30:6
/home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt:18:2
/home/dane/chematox/local/racket-5.90.0.6/collects/racket/private/class-internal.rkt:4070:0:
continue-make-object
/home/dane/chematox/local/racket-5.90.0.6/collects/racket/private/class-internal.rkt:4051:0:
do-make-object
/home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt: [running body]
It looks like the error is happening in the definition of _vector, which
calls vector->cblock. I assumed that would be in the conversion of the
input 'properties' vector
(https://github.com/larsendt/cl-gl-context-sharing/blob/master/sinemesh-gl.rkt#L46),
but that's definitely a vector, not a ctype. There aren't any other
inputs being passed to _vector, so I honestly have no idea what's
causing it.
I put up my fork of the opencl module with the changes at
https://github.com/larsendt/opencl/. The definition of
clGetGLContextInfoKHR lives at
https://github.com/larsendt/opencl/blob/master/opencl/c/9-7.rkt#L19.
Thanks for the help so far. I'm still getting my bearings in
macro-world, and it's definitely showing today.
Dane
On 08/23/2013 09:29 AM, Jay McCarthy wrote:
Hi Dane,
Thanks for working on this.
If you look at line 106 of the definition of define-opencl-info, it
uses the _arg_type as the name of the selector's arguments. I think
you could safely replace that with arg_id, if not, then you would want
to create new ids with generate-temporaries, but try arg_id first.
Since this looks like a simple change, try it on your end and we can
just include it in the pull request/patch you send me.
Jay
On Thu, Aug 22, 2013 at 7:54 PM, Dane Larsen <d...@larsendt.com> wrote:
Hi all,
I'm a little new to Racket (and Lispy languages in general). I'm
working on
extending the OpenCL module to add support for OpenGL context sharing.
My questions are somewhat specific to the OpenCL module, but hopefully
I can
provide enough context to minimize that.
Right now I'm working on clGetGLContextInfoKHR in, and it's been a bit
more
challenging than I anticipated. It's a CL extension function, so
get-ffi-obj
fails to find it. This hasn't been a huge problem. I ended up creating
an
alternate version of define-opencl (
https://github.com/jeapostrophe/opencl/blob/master/opencl/c/lib.rkt#L17)
which I've called define-opencl-extension. Rather than calling
get-ffi-obj,
it calls clGetExtensionFunctionAddress. That part works great.
The big problem that I'm having right now is with define-opencl-info (
https://github.com/jeapostrophe/opencl/blob/master/opencl/c/syntax.rkt#L18),
which essentially provides a convenient interface for the clGet*Info
functions (which all have similar arguments). clGetGLContextInfoKHR
follows
that pattern with one exception. It's primary input argument takes a
vector
of values, rather than a single value.
A call to define-opencl-info looks like this:
https://github.com/jeapostrophe/opencl/blob/master/opencl/c/5-3.rkt#L76
I thought I had the correct syntax by essentially replacing line 79
with the
following:
(args [properties : (_vector i _cl_context_properties)
_cl_context_properties_vector/c])
(I've also replaced the other types and argument names and whatnot,
but that
all seems to work).
Anyway, with the (_vector ...) call, I get the following error:
; c/9-7.rkt:26:22: define: not an identifier, identifier with default,
or
; keyword for procedure argument
; at: (_vector i _cl_context_properties)
; in: (define (clGetGLContextInfoKHR:generic (_vector i
; _cl_context_properties) _cl_gl_context_info) (case (hash-ref
; id-selector-map _cl_gl_context_info #f) ((_cl_device_id*) (local
((define
; len (clGetGLContextInfoKHR:length (_vector i
_cl_context_properties)...
; [,bt for context]
I'm not sure what that error is referring to, or how to fix it.
Here's the backtrack, but it's not terribly helpful (that I can see,
anyway):
; c/9-7.rkt:26:22: define: not an identifier, identifier with default,
or
keyword for procedure argument
; at: (_vector i _cl_context_properties)
; in: (define (clGetGLContextInfoKHR:generic (_vector i
_cl_context_properties) _cl_gl_context_info) (case (hash-ref
id-selector-map
_cl_gl_context_info #f) ((_cl_device_id*) (local ((define len
(clGetGLContextInfoKHR:length (_vector i _cl_context_properties)...
; context...:
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/norm-define.rkt:46:33:
simple-proto
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/norm-define.rkt:134:33:
general-proto
; try-next
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/kw.rkt:804:2
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/modbeg.rkt:46:4
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
; standard-module-name-resolver
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
; standard-module-name-resolver
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
; standard-module-name-resolver
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
;
/home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/misc.rkt:87:7
In addition, when I replace the (_vector ...) stuff with a plain old
_cl_context_properties, everything works fine (but the contract fails
when I
actually try to call clGetGLContextInfoKHR, as expected).
What am I doing wrong? It looks like (_vector i
_cl_context_properties) is
just as much of a ctype as _cl_context_properties, so why does it fail
when
I make it a vector?
Thanks a ton,
Dane Larsen
____________________
Racket Users list:
http://lists.racket-lang.org/users
____________________
Racket Users list:
http://lists.racket-lang.org/users
--
---------------------------------------------------------
Tobias Hammer
DLR / Robotics and Mechatronics Center (RMC)
Muenchner Str. 20, D-82234 Wessling
Tel.: 08153/28-1487
Mail: tobias.ham...@dlr.de
____________________
Racket Users list:
http://lists.racket-lang.org/users