Carga de datos en una textura 3D en metal

Por lo que entendí leyendo los documentos, una textura 3D solo tiene 1 corte. Cuando bash cargar datos en él, falla con un error:

MTLTexture.m:504: failed assertion `imageBytes(0) must be >= (2048).' 

El código utilizado para cargar es (la textura es tipo MTLPixelFormatRG16Uint y los elementsInRow * elementsInRow * elementsInRow MTLPixelFormatRG16Uint elementsInRow * elementsInRow * elementsInRow ):

 [texture replaceRegion:region mipmapLevel:0 withBytes:data bytesPerRow:sizeof(uint16_t) * 2 * elementsInRow]; 

donde elementsInRow es 128 , la región es MTLRegion region = MTLRegionMake3D(50, 50, 50, 4, 4, 4); y los datos son uint16_t data[region.size.depth][region.size.height][region.size.width][2] .

También intenté con:

 [texture replaceRegion:region mipmapLevel:0 slice:0 data bytesPerRow:sizeof(uint16_t) * 2 * elementsInRow bytesPerImage:sizeof(uint16_t) * 2 * elementsInRow * elementsInRow]; 

pero da como resultado un error de memory.

Véase también aquí: https://forums.developer.apple.com/message/43332#43332

¿Cómo puedo cargar correctamente los datos en una región tridimensional de una textura 3D?

ACTUALIZACIÓN 1:

El segundo ejemplo funciona cuando la región tiene profundidad 1 e incluso mayor width y height (pero con 32x32x1 se bloqueará).

ACTUALIZACIÓN 2:

Si utilizo 16x16x1 y escribo el mismo valor para cada píxel en la región, parece que funciona, pero cuando exporto los datos como una image, parece que se están escribiendo datos aleatorios, mira esta sección ampliada de la image:

introduzca la descripción de la imagen aquí

Si ejecuto la testing nuevamente, la image tendrá la misma sección superior en color uniforme, pero el rest de los puntos cambiará la intensidad. Tenga en count que estoy escribiendo el mismo valor para cada píxel, por lo que la región debería ser de color uniforme.

    Eso fue todo. Estaba intentando leer desde fuera de la memory de límites, ya que los parameters bytesPerRow y bytesPerImage no eran correctos.

    La documentation dice:

    bytesPerRow
    Para un formatting de píxel ordinario o empaquetado, la zancada, en bytes, entre filas de datos de origen .

    bytesPerImage
    El paso, en bytes, entre las imágenes en los datos de origen .

    Estaba pasando los valores pensando que se referían a la textura , no a la región .

    Entonces el código debería ser:

     [texture replaceRegion:region mipmapLevel:0 slice:0 data bytesPerRow:sizeof(uint16_t) * 2 * region.size.width bytesPerImage:sizeof(uint16_t) * 2 * region.size.width * region.size.height]; 

    Nunca puede leer la documentation con suficiente cuidado.