Exemple #1
0
PYOPENCL_USE_RESULT static gl_texture*
create_from_gl_texture(const context *ctx, cl_mem_flags flags,
                       GLenum texture_target, GLint miplevel,
                       GLuint texture, unsigned dims)
{
    if (dims == 2) {
        cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture2D,
                                           ctx, flags, texture_target,
                                           miplevel, texture);
        return pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem);
    } else if (dims == 3) {
        cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture3D,
                                           ctx, flags, texture_target,
                                           miplevel, texture);
        return pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem);
    } else {
        throw clerror("Image", CL_INVALID_VALUE, "invalid dimension");
    }
}
Exemple #2
0
error*
create_from_gl_buffer(clobj_t *ptr, clobj_t _ctx,
                      cl_mem_flags flags, GLuint bufobj)
{
    auto ctx = static_cast<context*>(_ctx);
    return c_handle_error([&] {
            cl_mem mem = pyopencl_call_guarded(clCreateFromGLBuffer,
                                               ctx, flags, bufobj);
            *ptr = pyopencl_convert_obj(gl_buffer, clReleaseMemObject, mem);
        });
}
Exemple #3
0
error*
create_from_gl_texture(clobj_t *ptr, clobj_t _ctx, cl_mem_flags flags,
                       GLenum texture_target, GLint miplevel,
                       GLuint texture)
{
#if PYOPENCL_CL_VERSION >= 0x1020
    auto ctx = static_cast<context*>(_ctx);
    return c_handle_error([&] {
            cl_mem mem = pyopencl_call_guarded(clCreateFromGLTexture,
                                               ctx, flags, texture_target, miplevel, texture);
            *ptr = pyopencl_convert_obj(gl_texture, clReleaseMemObject, mem);
        });
#else
    PYOPENCL_UNSUPPORTED(clCreateFromGLTexture, "CL 1.1")
#endif
}
Exemple #4
0
PYOPENCL_USE_RESULT static PYOPENCL_INLINE program*
new_program(cl_program prog, program_kind_type progkind=KND_UNKNOWN)
{
    return pyopencl_convert_obj(program, clReleaseProgram, prog, progkind);
}
Exemple #5
0
PYOPENCL_USE_RESULT static PYOPENCL_INLINE image*
new_image(cl_mem mem, const cl_image_format *fmt)
{
    return pyopencl_convert_obj(image, clReleaseMemObject, mem, fmt);
}
Exemple #6
0
PYOPENCL_USE_RESULT static PYOPENCL_INLINE buffer*
new_buffer(cl_mem mem)
{
    return pyopencl_convert_obj(buffer, clReleaseMemObject, mem);
}