AMD OpenCL 1.1 image3d_t在内核中写入
AMD OpenCL 1.1 image3d_t writing in kernel
我正在使用AMD的OpenCL 1.1实现编写GPU ray marcher(我正在使用他们的c++包装器api)。最初,我使用网格体积的大型一维数组和dsm以及我自己的插值函数来实现内核,效果很好。附带说明一下,我正在使用一个单独的内核进行dsm采样。
现在我正在重新实现我的代码,以利用OpenCL类型的image3d,它有自己的体积和dsm的硬件加速插值功能。我的体积image3d工作得很好,但我无法让dsm image3d在ray march内核中工作。
正如我前面提到的,我正在使用一个单独的内核来对dsm进行采样。从我阅读的文档(和视频卡设备规格)来看,我应该能够使用直接写入内核中的image3d
write_imagef(image3d_t图像,int4坐标,float4值);
其中image是dsm,coord是网格的x、y、z值(由于我在三维中运行dsm内核,这是由全局id定义的),value是该位置的值。
我正在我的代码中初始化我的dsm-image3d,使用:cl::Image3D(上下文,标志,格式,宽度,高度,深度,0,0,host_ptr,&err);
其中context是我的OpenCL上下文flags=CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_TRwidth,height and depth是dsm网格的宽度、高度和深度format是cl::ImageFormat,具有以下设置:format.image_channel_order=CL_RGBA;format.image_channel_data_type=CL_FLOAT;接下来的两个位置未被使用,因此它们被设置为0host_ptr是指向原始网格的指针和&err是指向错误对象的指针
我启用了cl_khr_3d_image_writes,还将内核中的dsm声明为:__只写image3d_t dsm。
本质上,我运行我的DSM示例内核,然后运行我的ray march内核。我对image3d数据的两个内核参数使用相同的指针。
我想不出还有什么其他细节可以包括在内。
CL_MEM_READ_ONLY
意味着您只从缓冲区中读取。因此不允许写入。如果要从缓冲区进行读写操作,请使用CL_MEM_READ_WRITE
。
- OpenCL 内核参数中的字符***?
- OpenCL 是否支持向量作为内核参数?
- openCL 内核返回垃圾值,尽管没有错误
- OpenCL 内核计时测量 0 秒或导致 SIGABRT
- OpenCL 在 NVIDIA 和 Intel GPU 上启动内核时CL_INVALID_COMMAND_QUEUE
- 将 C++ 库包含在 OpenCL 内核中?
- 在 OpenCL 内核中实现半精度浮点数据类型
- 在 Radeon 卡上并行执行多个 OpenCL 内核
- OpenCL内核是异步执行的吗
- 我可以为nVIDIA GPU编写OpenCL-C++内核吗
- 将 stl 数据结构传递给 opencl 内核
- 如何在 openCL 的内核调用中指定数字多维
- 如何提高此 OpenCL 缩减内核代码的性能?
- 将 std::vector 传递给 openCL 内核C++绑定
- OPENCL:可以将模板对象作为内核参数,并使用boost :: Compute
- OpenCL - 内核方法返回意外结果
- 是否可以在同一设备缓冲区上一个接一个地调用 OpenCL 内核?
- 如何在 OpenCL 内核中包含 C++ 类
- 特定的OpenCL内核在移动和PC上的性能不同
- opencl openGL互操作内核参数用于读取 写入