cudaGraphicsResourceGetMappedPointer возвращает «неизвестную ошибку» - PullRequest
4 голосов
/ 23 февраля 2012

Я создаю текстуру 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 дает "неизвестная ошибка" , поэтому я застрял здесь.Буду признателен за любые идеи.

1 Ответ

5 голосов
/ 23 февраля 2012

Хорошо, я сам это выяснил:

cudaGraphicsSubResourceGetMappedArray (&array, resource, 0, 0); возвращает cudaArray для работы. Я еще не обдумал, как работает cudaArray (и я мог бы в конечном итоге использовать PBO), но по крайней мере это не дает сбоя.

Edit:

Из справочного руководства CUDA для cudaGraphicsResourceGetMappedPointer():

Если ресурс не является буфером, то к нему нельзя получить доступ через указатель и cudaErrorUnknown возвращается.

Из справочного руководства CUDA для cudaGraphicsSubResourceGetMappedArray():

Если ресурс не является текстурой, то к нему нельзя получить доступ через массив и cudaErrorUnknown возвращается.

Другими словами, используйте GetMappedPointer для сопоставленных объектов буфера. Используйте GetMappedArray для сопоставленных текстурных объектов.

...