Cudaarray текстурная пам'ять - робота з текстурної пам'яттю
В якості основи для такого типу пам'яті виступає спеціальний контейнер cudaArray, який є чорним ящиком для додатків. Використання cudaArray обгрунтовано тоді, коли ми хочемо створити двох або тривимірну структуру, або нас важливі перетворення, які графічний процесор може здійснювати апаратно з вихідними даними:
§ Нормалізація координат (переклад [W, H] => [0,1]).
- Clamp - координата обрізається по межі;
- Wrap - координата загортається.
§ Фільтрація (при зверненні по float координаті):
- Point - повертається найближчим задане значення;
- Linear - проводиться билинейная інтерполяція.
Для використання cudaArray текстурной пам'яті потрібно оголосити змінну-покажчик на cudaArray:
cudaMallocArray (struct cudaArray ** arrayPtr, const struct cudaChannelFormatDesc * channelDesc, size_t width, size_t height);
- arrayPtr - покажчик на cudaArray;
- channelDesc - опис каналу;
- width - ширина масиву;
- height - висота масиву.
Потім скопіювати в виділену пам'ять дані:
cudaMemcpyToArray (struct cudaArray * dst, size_t wOffset, size_t hOffset, const void * src, size_t count, enum cudaMemcpyKind kind);
- arrayPtr - покажчик на cudaArray;
- wOffset - зміщення по горизонталі при прив'язці до масиву;
- hOffset - зміщення по вертикалі при прив'язці до масиву;
- src - масив в пам'яті хоста, до який копіюється;
- count - розмір даних в байтах;
- kind - напрямок копіювання.
Після того як дані скопійовані, можна здійснювати прив'язку cudaArray масиву до текстури:
cudaBindTextureToArray (const struct textureReference * tex, const struct cudaArray * array, const struct cudaChannelFormatDesc * desc);
- tex - оголошена текстура;
- array - масив в cudaArray, до якого прив'язується текстура;
- channelDesc - опис каналу.
На пристрої використовуються функції, які дістають значення з текстури:
tex1D (texRef tex, float x);
- tex - оголошена текстура;
- x - індекс, що виймається значення в лінійному масиві.
tex2D (texRef tex, float x, float y);
- tex - оголошена текстура;
- x, y - індекси, що виймається значення в двомірному масиві.
tex3D (texRef tex, float x, float y, float z);
- tex - оголошена текстура;
- x, y, z - індекси, що виймається значення в тривимірному масиві.
Після використання необхідно відв'язати текстуру точно так само як і лінійну.