0

我想将内核中的图像写入设备内存中由 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 做到这一点?

4

0 回答 0