[racket] OpenCL module macro errors
Yup
On Mon, Aug 26, 2013 at 2:34 AM, Tobias Hammer <tobias.hammer at dlr.de> wrote:
> 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 <dane at 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 <dane at 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.hammer at dlr.de
--
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay
"The glory of God is Intelligence" - D&C 93