【问题标题】:cudaGraphicsResourceGetMappedPointer returns "unknown error"cudaGraphicsResourceGetMappedPointer 返回“未知错误”
【发布时间】:2012-03-13 11:48:32
【问题描述】:

我正在创建这样的 OpenGL 纹理:

glGenTextures( 1, &boardTex );
glBindTexture( GL_TEXTURE_2D, boardTex );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, NULL);

我得到了board 的句柄,所以我认为纹理已成功创建。我想与 CUDA 共享此纹理,因此我注册并映射资源:

cudaGLSetGLDevice(0);
cudaGraphicsGLRegisterImage( &boardImage, boardTex, GL_TEXTURE_2D, cudaGraphicsMapFlagsNone );
cudaGraphicsMapResources( 1, &boardImage, 0 );

然后我尝试像这样获取映射指针:

float4* mappedPointer;
size_t mappedSize;
cudaGraphicsResourceGetMappedPointer( (void**)&mappedPointer, &mappedSize, boardImage );

不幸的是,此调用返回错误并拒绝工作。我确保纹理没有绑定在 OpenGL 上下文中以防万一。还是行不通。 cudaGetErrorString 产生 "unknown error" 所以我被困在这里了。我会很感激任何想法。

【问题讨论】:

  • boardboardTex 是同一个值吗?
  • @harrism 是的,我的错(板在某些功能中是本地的。)编辑它。

标签: opengl interop cuda


【解决方案1】:

好的,我自己发现了这个:

cudaGraphicsSubResourceGetMappedArray (&array, resource, 0, 0); 返回一个 cudaArray 以供使用。我还没有弄清楚cudaArrays 是如何工作的(我可能最终会使用 PBO),但至少它没有崩溃。

编辑:

来自cudaGraphicsResourceGetMappedPointer() 的 CUDA 参考指南条目:

如果资源不是缓冲区,则不能通过指针访问 并返回 cudaErrorUnknown。

来自cudaGraphicsSubResourceGetMappedArray() 的 CUDA 参考指南条目:

如果资源不是纹理,则无法通过数组访问 并返回 cudaErrorUnknown。

换句话说,对映射的缓冲区对象使用 GetMappedPointer。使用 GetMappedArray 映射纹理对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2014-11-24
    相关资源
    最近更新 更多