Загрузка данных в текстуру, определенную как MTLTextureType1DArray - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь настроить некоторые вычислительные ядра, которые требуют интерполяции некоторых радиальных профилей коэффициентов Фурье.По сути, мне нужно быть осторожным в одном индексе, но интерполировать в другом.Я подумал, что реализация этих массивов 1D текстуры позволит мне использовать встроенные функции интерполяции моего графического процессора.Просматривая документацию Metal, кажется, что MTLTextureType1DArray с MTLPixelFormatR32Float будет правильной настройкой для этого.

Я настраиваю свое описание текстуры как

MTLTextureDescriptor *textureDescriptor = [[MTLTextureDescriptor alloc] init];
textureDescriptor.pixelFormat = MTLPixelFormatR32Float;
textureDescriptor.textureType = MTLTextureType1DArray;

textureDescriptor.width = numRadialPoints;
textureDescriptor.height = 1;
textureDescriptor.depth = 1;

textureDescriptor.arrayLength = numArrays;

textureDescriptor.mipmapLevelCount = 1;
textureDescriptor.sampleCount = 1;

textureDescriptor.resourceOptions = MTLResourceCPUCacheModeWriteCombined | MTLResourceStorageModeManaged;
textureDescriptor.cpuCacheMode = MTLCPUCacheModeWriteCombined;
textureDescriptor.storageMode = MTLStorageModeManaged;
textureDescriptor.usage = MTLTextureUsageShaderRead;

Что я не могу понять, так это как теперь загрузить данные текстуры.Моя первая попытка была

_texture = [device newTextureWithDescriptor:textureDescriptor];
[_texture replaceRegion:MTLRegionMake2D(0, 0, numRadialPoints, numArrays) mipmapLevel:0 withBytes:floatbuffer bytesPerRow:4*numRadialPoints];

Но это приводит к ошибке, поскольку высоты не совпадают.

_validateReplaceRegion:144: failed assertion `(origin.y + size.height)(163) must be <= height(1).'

Как загрузить данные в MTLTextureType1DArray?

1 Ответ

0 голосов
/ 13 сентября 2018

Вам нужно использовать несколько вызовов -replaceRegion:mipmapLevel:slice:withBytes:bytesPerRow:bytesPerImage:, по одному разу для каждого элемента массива. Вы указываете индекс массива с параметром slice.

Параметр региона должен быть одномерным.

...