Dnia 2010-11-26, piÄ… o godzinie 14:52 -0500, Andreas Kloeckner pisze:
> Hi Tomasz,
> 
> I've committed your patch, with a few changes.
> 
> git diff 69a355d0 master
> 
> will show you what I changed. Some comments below. I'd appreciate your
> feedback on my changes.
> 
> Thanks for your contribution,
> Andreas
> 

I like those changes, but there are still some problems.

The fist problem is that you have left old names in pycuda/gl/__init.py:

$ ./cuda.py
/usr/lib/pymodules/python2.6/pycuda/driver.py:2: RuntimeWarning:
to-Python converter for CUgraphicsMapResourceFlags_enum already
registered; second conversion method ignored.
  from pycuda._driver import *
Traceback (most recent call last):
  File "./cuda.py", line 13, in <module>
    import pycuda.gl
  File "/usr/lib/pymodules/python2.6/pycuda/gl/__init__.py", line 8, in
<module>
    map_flags = _drv.map_flags
AttributeError: 'module' object has no attribute 'map_flags'

$ ./cuda.py
/usr/lib/pymodules/python2.6/pycuda/driver.py:2: RuntimeWarning:
to-Python converter for CUgraphicsMapResourceFlags_enum already
registered; second conversion method ignored.
  from pycuda._driver import *
Traceback (most recent call last):
  File "./cuda.py", line 13, in <module>
    import pycuda.gl
  File "/usr/lib/pymodules/python2.6/pycuda/gl/__init__.py", line 9, in
<module>
    target_flags = _drv.target_flags
AttributeError: 'module' object has no attribute 'target_flags

The second problem is with the map function:

$ ./cuda.py
Traceback (most recent call last):
  File "./cuda.py", line 103, in paintGL
    cuda_object = self.cuda_buffer.map()
Boost.Python.ArgumentError: Python argument types in
    RegisteredObject.map(RegisteredBuffer)
did not match C++ signature:
    map(boost::shared_ptr<cuda::gl::buffer_object>)

I do not know how to force Boost::Python to allow
for accepting optional argument for map(stream) function,
so I changed documentation to say that stream is mandatory
argument.

I attach the patch that solves those problems.

This patch also removes CUgraphicsMapResourceFlags from
src/wrapper/wrap_cudadrv.cpp - it was generating warning
seen above.


> On Wed, 24 Nov 2010 23:58:01 +0100, Tomasz Rybak <bogom...@post.pl> wrote:
> > Sending patch once again - it looks line not everyone received
> > previous email, and I got no feedback on patch.
> > 
> > -- 
> > Tomasz Rybak <bogom...@post.pl> GPG/PGP key ID: 2AD5 9860
> > Fingerprint A481 824E 7DD3 9C0E C40A  488E C654 FB33 2AD5 9860
> > http://member.acm.org/~tomaszrybak
> > diff --git a/doc/source/gl.rst b/doc/source/gl.rst
> > index e5d196f..6d7b42c 100644
> > --- a/doc/source/gl.rst
> > +++ b/doc/source/gl.rst
> > @@ -19,6 +19,8 @@ GL Interoperability
> >  
> >      .. warning ::
> >  
> > +        This function is deprecated since CUDA 3.0 and PyCUDA 0.95.
> > +
> >          This will fail with a rather unhelpful error message if you don't 
> > already 
> >          have a GL context created and active.
> >  
> > @@ -33,11 +35,43 @@ GL Interoperability
> >          This will fail with a rather unhelpful error message if you don't 
> > already 
> >          have a GL context created and active.
> >  
> > +.. class :: map_flags
> > +
> > +    Usage of OpenGL object from CUDA.
> > +
> > +    .. attribute :: CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE
> > +
> > +        Read and write access to mapped OpenGL object from CUDA code.
> > +
> > +    .. attribute :: CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY
> > +
> > +        Read only access to mapped OpenGL object from CUDA code.
> > +
> > +    .. attribute :: CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD
> > +
> > +        Write only access to mapped OpenGL object from CUDA code. Reading
> > +        is prohibited.
> 
> Changed/shortened names.

OK.

> 
> > +
> > +.. class :: map_targets
> > +
> > +    Type of OpenGL Image object that is mapped to CUDA.
> > +
> > +    .. attribute :: GL_TEXTURE_2D
> > +    .. attribute :: GL_TEXTURE_RECTANGLE
> > +    .. attribute :: GL_TEXTURE_CUBE_MAP
> > +    .. attribute :: GL_TEXTURE_3D
> > +    .. attribute :: GL_TEXTURE_2D_ARRAY
> > +    .. attribute :: GL_RENDERBUFFER
> > +
> 
> I'd argue these are the GL wrapper's business, since they're defined in
> the GL header. Removed.
> 
> >  .. class :: BufferObject(bufobj)
> >  
> >      .. method :: unregister()
> >      .. method :: handle()
> >      .. method :: map()
> > +
> > +    .. warning ::
> > +
> > +        This class is deprecated since CUDA 3.0 and PyCUDA 0.95.
> >      
> 
> I've made a nice separate section for the old-style API in the docs, so
> no-one uses it by accident.

OK - makes sense.

> 
> >  .. class :: BufferObjectMapping
> >  
> > @@ -45,6 +79,33 @@ GL Interoperability
> >      .. method :: device_ptr()
> >      .. method :: size()
> >  
> > +    .. warning ::
> > +
> > +        This class is deprecated since CUDA 3.0 and PyCUDA 0.95.
> > +
> > +.. class :: RegisteredBuffer(bufobj, flags = 
> > CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE)
> > +
> > +  Object managing mapping of OpenGL buffers to CUDA. Cannot be used to
> > +  map images.
> > +
> > +    .. method :: unregister()
> > +    .. method :: handle()
> > +    .. method :: map()
> > +    
> > +.. class :: RegisteredImage(bufobj, target, flags = 
> > CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE)
> > +
> > +  Object managing mapping of OpenGL textures and render buffers to CUDA.
> > +
> > +    .. method :: unregister()
> > +    .. method :: handle()
> > +    .. method :: map()
> > +    
> > +.. class :: RegisteredMapping
> > +
> > +    .. method :: unmap()
> > +    .. method :: device_ptr()
> > +    .. method :: size()
> > +
> 
> Renamed handle() -> gl_handle() for clarity. Added stream arguments to
> map()/unmap(). Since Nvidia saw it fit to have a batch interface to
> map/unmap, we might need one at some point, too.
> 

Yes - but maybe add some documentation for it, like in the new patch?


-- 
Tomasz Rybak <bogom...@post.pl> GPG/PGP key ID: 2AD5 9860
Fingerprint A481 824E 7DD3 9C0E C40A  488E C654 FB33 2AD5 9860
http://member.acm.org/~tomaszrybak
diff --git a/doc/source/gl.rst b/doc/source/gl.rst
index e8231bf..f0c2b7b 100644
--- a/doc/source/gl.rst
+++ b/doc/source/gl.rst
@@ -60,9 +60,11 @@ GL Interoperability
 
     .. method :: gl_handle()
     .. method :: unregister()
-    .. method :: map(stream=None)
+    .. method :: map(stream)
 
-        Return a :class:`RegisteredMapping`.
+        Return a :class:`RegisteredMapping`. Requires stream in which
+	mapping will be done; stream can be None, in which case mapping
+	will occur in the same stream object was created.
 
 .. class :: RegisteredMapping
 
diff --git a/pycuda/gl/__init__.py b/pycuda/gl/__init__.py
index 9d518a5..af6a101 100644
--- a/pycuda/gl/__init__.py
+++ b/pycuda/gl/__init__.py
@@ -5,8 +5,7 @@ if not _drv.have_gl_ext():
 
 init = _drv.gl_init
 make_context = _drv.make_gl_context
-map_flags = _drv.map_flags
-target_flags = _drv.target_flags
+graphics_map_flags = _drv.graphics_map_flags
 BufferObject = _drv.BufferObject
 BufferObjectMapping = _drv.BufferObjectMapping
 RegisteredBuffer = _drv.RegisteredBuffer
diff --git a/src/cpp/cuda_gl.hpp b/src/cpp/cuda_gl.hpp
index 1cfe4f8..668a2f3 100644
--- a/src/cpp/cuda_gl.hpp
+++ b/src/cpp/cuda_gl.hpp
@@ -159,6 +159,7 @@ namespace cuda { namespace gl {
 
   // {{{ new-style (3.0+) API
 
+#if CUDAPP_CUDA_VERSION >= 3000
   class registered_object : public context_dependent
   {
     protected:
@@ -307,6 +308,7 @@ namespace cuda { namespace gl {
 
     return new registered_mapping(robj, strm);
   }
+#endif
 
   // }}}
 
diff --git a/src/wrapper/wrap_cudadrv.cpp b/src/wrapper/wrap_cudadrv.cpp
index 972f40f..35fa615 100644
--- a/src/wrapper/wrap_cudadrv.cpp
+++ b/src/wrapper/wrap_cudadrv.cpp
@@ -669,12 +669,6 @@ BOOST_PYTHON_MODULE(_driver)
     .value("NONE", CU_GRAPHICS_REGISTER_FLAGS_NONE)
     ;
 
-  py::enum_<CUgraphicsMapResourceFlags>("graphics_map_resource_flags")
-    .value("NONE", CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE)
-    .value("READ_ONLY", CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY)
-    .value("WRITE_DISCARD", CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD)
-    ;
-
   py::enum_<CUarray_cubemap_face_enum>("array_cubemap_face")
     .value("POSITIVE_X", CU_CUBEMAP_FACE_POSITIVE_X)
     .value("NEGATIVE_X", CU_CUBEMAP_FACE_NEGATIVE_X)
diff --git a/src/wrapper/wrap_cudagl.cpp b/src/wrapper/wrap_cudagl.cpp
index 30cef47..114eee9 100644
--- a/src/wrapper/wrap_cudagl.cpp
+++ b/src/wrapper/wrap_cudagl.cpp
@@ -24,6 +24,7 @@ void pycuda_expose_gl()
 
   // {{{ new-style
 
+#if CUDAPP_CUDA_VERSION >= 3000
   py::enum_<CUgraphicsMapResourceFlags>("graphics_map_flags")
     .value("NONE", CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE)
     .value("READ_ONLY", CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY)
@@ -35,7 +36,7 @@ void pycuda_expose_gl()
     py::class_<cl, shared_ptr<cl> >("RegisteredObject", py::no_init)
       .DEF_SIMPLE_METHOD(gl_handle)
       .DEF_SIMPLE_METHOD(unregister)
-      .def("map", map_buffer_object,
+      .def("map", map_registered_object,
           py::return_value_policy<py::manage_new_object>())
       ;
   }
@@ -64,6 +65,7 @@ void pycuda_expose_gl()
       .DEF_SIMPLE_METHOD(device_ptr_and_size)
       ;
   }
+#endif
 
   // }}}
 

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
PyCUDA mailing list
PyCUDA@tiker.net
http://lists.tiker.net/listinfo/pycuda

Reply via email to