opencl openGL互操作内核参数用于读取 写入
OpenCL OpenGL interop kernel argument for read+write
我正在尝试使用本英特尔教程中所述的OpenGL纹理进行操作/OpenGL Interop。我想保持主机代码尽可能简单,因此我想使用"方法1",从而从使用clCreateFromGLTexture
的OpenGL纹理创建OpenCL映像。该教程还指出以下内容:
请注意允许快速丢弃数据的Cl_mem_write_only标志。如果您的内核需要读取当前纹理上下文,请使用CL_MEM_READ_WRITE。另外,在这种情况下删除_write_only限定符,以供内核中的图像访问。
但是,这似乎不起作用。一旦我从内核中删除__write_only
,我会使用平台NVIDIA OPENCL 1.2 CUDA 10.0.132(驱动程序417.71)出现编译错误:
错误:无效的图像类型
无论意味着什么。使用平台Intel Opencl 2.1 UHD图形620(驱动程序24.20.100.6286)我得到以下内容:
ctheader.h:1333:38:注意:候选函数不可行:' read_only Image2d_t'to'__write_only image1d_array_t'for'write_only image1d_array_t image_array,int2 coord,float4颜色);
看起来像image2d_t默认为 __read_only
?
无论如何,我发现规范清楚地指出,教程中提出的内容不支持,至少不使用图像对象:
read_image和write_image呼叫对内核中同一图像内存对象的调用不支持
所以我想知道,由于本教程没有详细介绍如何设置内核参数,因此可能首先使用image2d_t
是错误的。由于该参数是主机侧类型的cu_mem
,因此我尝试使用float*
,但到目前为止没有成功。
我意识到我可以进行双重缓冲或使用其他方法(例如使用PBO进行Interop),但是正如我所说,我想尽可能简单,而且我只是想知道为什么这样做。有什么想法吗?
内核映像参数必须必须使用__write_only
或__read_only
,直到OpenCL 2.0,允许图像为__read_write
,但必须遵循特殊规则(例如,例如障碍)以获得正确的结果。请注意,图像还具有预选程序,该预选赛表明主机可以访问它(仅读,仅写或读/写)。给定的图像可以是一个内核中的__write_only
,然后在下一个内核中为__read_only
,这允许一个内核的结果输入下一个内核。
- C++用于从流中读取二进制值的任何标准库
- C++ mProtect 用于读取、写入和执行
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- QTcpSocket 或 QSslSocket 是否会自动创建用于读取/写入的线程?
- 用于读取C 中的CSV的数据结构
- opencl openGL互操作内核参数用于读取 写入
- 测量 l1/l2 缓存中加载的用于读取(包括预取)的行数
- 用于读取矩阵C 的宏
- 用于读取文件的输入循环
- 用于读取输入文件的内存映射文件的安全
- 用于读取音频文件的库
- 用于读取文本文件c++的Readline循环
- 有关重载用于读取文本文件的输入运算符>>的问题
- C++用于读取数据矩阵代码的库
- std::mutiset vs std::vector,用于读取排序字符串并将其写入文件
- 用于读取和打印值的循环
- 用于读取Zip标头的Zip库
- Boost PTree仅用于读取文件或存储值
- 如何确定用于读取的QIODevice的总大小?
- 更好的设计模式用于读取其他进程内存