2017-08-14 4 views
1

J'ai un shader metal 2 sur macOS 10.12 que j'essaye de passer un tableau de int, mais XCode me donne une erreur de compilation Unknown type name 'array'. Voici le code que je utilise:tableau de type inconnu tableau

kernel void computeMandelbrot(texture2d<float, access::write> output [[texture(0)]], constant int &maxIterations [[buffer(1)]], const array<int, 10> &hist [[buffer(2)]], uint2 gid [[thread_position_in_grid]]) { 
// Compute Mandelbrot 
} 

J'ai aussi essayé d'utiliser le mot-clé constant au lieu de const mais j'obtenir aussi une erreur de Parameter may not be qualified with an address space. J'avais lu que les tableaux de textures n'étaient pas supportés en métal sur macOS, mais je ne savais pas si cela s'appliquait à des tableaux d'autres types. Toute aide serait grandement appréciée, merci!

Répondre

0

Quelques choses:

  • métal n'est pas disponible sous Mac OS 10.12. C'est nouveau avec 10.13.

  • array est uniquement utilisable avec des textures et des échantillonneurs.

  • array n'est pas disponible sur macOS < = 10.12. Il est disponible sur macOS 10.13+ avec Metal 2.

  • Vous pouvez déclarer votre paramètre en tant que constant int *hist [[buffer(2)]]. Il n'aura pas de longueur explicite, mais limitera simplement les éléments auxquels vous faites référence.

Edit: je me suis trompé sur les array ne pouvant être utilisé avec des textures et des échantillonneurs. La spécification suggère que cela soit le cas en l'introduisant dans une section intitulée «Tableaux de textures et d'échantillonneurs» et en illustrant seulement son utilisation de cette façon, mais la classe modèle elle-même semble génériquement utile.

Cependant, jusqu'à Metal 2, il n'est pas disponible sur macOS. En d'autres termes, il est uniquement disponible sur MacOS 10.13+.