2016-06-24 8 views
0

Ich habe ein Array in einem Rechenkernel, der eine Reihe von Werten speichert (nur etwa 10 für jetzt). I ordnen die Werte an die Anordnung wie folgt:Metall-Array-Indizierung funktioniert mit Literalen, stürzt aber mit einer Variablen ab

int count = uniforms; 
int i = 0; 
float pointsx[count]; 
float pointsy[count]; 
for (i = 0; i < count; i++){ 
    pointsx[i] = simplex3D(i*2,1,1); 
    pointsy[i] = simplex3D(1,i*2,1); 
} 

I weitergehen, um dann diese Punkte durchlaufen eine ähnliche for-Schleife. Dies stürzt zur Laufzeit einen Compilerfehler melden, wenn ich versuche und Zugriff auf das Array bei jedem Index, aber wenn ich die i durch ein Integer-Literal ersetzen würde funktioniert es.

Ich fühle, dass ich etwas sehr offensichtlich vermisse, würde jede Hilfe geschätzt werden.

+1

Selbst in Fällen, in denen der Fehler offensichtlich erscheinen mag, ist es für den Compiler niemals akzeptabel, einen "internen Compiler-Fehler" anstelle einer nützlicheren Diagnose zurückzugeben. Dies ist es wert, einen Fehlerbericht für. – warrenm

+0

Für eine temporäre Reparatur habe ich einfach einen Puffer der richtigen Größe in den Rechenkernel übergeben, um damit zu arbeiten. –

Antwort

1

Arrays mit variabler Länge werden in Metal nicht unterstützt. Da die Anzahl der Einträge im Array klein ist, können Sie ein Array dieser Größe deklarieren. Die Verwendung eines Puffers ist flexibler, erfordert jedoch, dass Sie aus dem Gerätespeicher lesen.