我想将内核中的图像写入设备内存中由 IntPtr 定义的指定位置。
虽然它与这个问题没有直接关系,但我想从内核内部更改它是来自 Unity 的 RenderTexture ,以便将其传递给将在 GPU 上可视化我的算法的着色器。
到目前为止,我试过这个:
CLkernel.SetArgument (0, (IntPtr)(width*height*4*sizeof(float)), pointerToRT);
由于我无法将其指定为图像,因此引发了InvalidArgumentSize ,并且:
renderTexture = new ComputeImage2D (CLcontext, ComputeMemoryFlags.WriteOnly | ComputeMemoryFlags.UseHostPointer,
new ComputeImageFormat (ComputeImageChannelOrder.Rgba, ComputeImageChannelType.Float),
width, height, 0, pointerToRT);
CLkernel.SetMemoryArgument (0, renderTexture);
这导致了InvalidHostPointer异常,因为指针指向设备内存中已经存在的位置。
这是内核代码:
kernel void WriteToRenderTexture (
write_only image2d_t bdsRT,
global float* terrainHeight )
{
int width = get_global_size (0);
int x = get_global_id (0);
int y = get_global_id (1);
int pixel = x + y * width;
int2 coords = { x, y };
float4 value = { 0, terrainHeight [pixel * 3], 0.5, 0 };
write_imagef (bdsRT, coords, value);
}
任何想法我如何能够使用 Cloo 做到这一点?