Cuda создать текстуру объекта из черно-белого изображения - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь обработать видео, кадр за кадром.Для этого я хочу создать текстуру, содержащую текущий кадр, и передать ее ядру.Кадры имеют размер 1440 * 1080 пикселей, каждый пиксель представлен беззнаковым символом, например, 8 бит.

Я следовал инструкциям, однако моя программа всегда дает сбой в момент создания текстуры.Код ошибки 0x11: «неверные аргументы».

Вот мой код:

// allocate cuda array in device memory
cudaChannelFormatDesc channelDesc = 
   cudaCreateChannelDesc(8, 0, 0, 0, cudaChannelFormatKindUnsigned);
cudaArray* cuArray;
cudaMallocArray(&cuArray, &channelDesc, width, height);

// copy frame_in to device memory
int size = width * height * sizeof(char);
cudaMemcpyToArray(cuArray, 0, 0, frame_in.data, size, cudaMemcpyHostToDevice);

// specify texture
cudaResourceDesc resDesc;
memset(&resDesc, 0, sizeof(resDesc));
resDesc.resType = cudaResourceTypeArray;
resDesc.res.array.array = cuArray;

// specify texture object parameters
cudaTextureDesc texDesc;
texDesc.addressMode[0] = cudaAddressModeWrap;
texDesc.addressMode[1] = cudaAddressModeWrap;
texDesc.filterMode = cudaFilterModePoint;
texDesc.readMode = cudaReadModeElementType;
texDesc.normalizedCoords = 1;

// !FAILS! create texture object
cudaTextureObject_t texObj = NULL;
cudaCreateTextureObject(&texObj, &resDesc, &texDesc, NULL);

1 Ответ

0 голосов
/ 02 июня 2018

Понял, я забыл memset () для cudaTextureDesc.Должен читать:

// specify texture object parameters
cudaTextureDesc texDesc;
memset(&texDesc, 0, sizeof(texDesc));
texDesc.addressMode[0] = cudaAddressModeWrap;
texDesc.addressMode[1] = cudaAddressModeWrap;
texDesc.filterMode = cudaFilterModePoint;
texDesc.readMode = cudaReadModeElementType;
texDesc.normalizedCoords = 1;
...