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

Reply via email to