2016-08-03 31 views
1

Ich versuche, eine Header-Datei in einen Metall-Shader aufzunehmen. Für einen Prototyp wie diese,Metal: unbekannter Typ Name float4

float4 someFunction(float4 v); 

ich diese Fehlermeldung erhalten,

Unknown type name 'float4'; did you mean 'float'? 

Es es es ist ein Header für ein Shader-Programm nicht verstehen scheint ... Auch wenn andere Fehler es vorschlagen tut . wenn ich den Adressraum beispielsweise nicht hier angeben,

static float someK = 2.0; 

ich diesen Fehler erhalten,

Global variables must have a constant address space qualifier 

die behoben werden kann, wenn ich

constant static float someK = 2.0; 

hinzufügen Wenn ich Referenzen, bekomme ich auch diese Art von Fehlern,

Reference type must include device, threadgroup, constant, or thread address space qualifier 

Es sieht also so aus, als ob der Compiler weiß, dass es ein Shader ist. Warum weiß es float4 nicht? :(

Antwort

1

Stellen Sie sicher, dass die ersten beiden Zeilen in Ihrem Shader haben wie in diesem Beispiel:

#include <metal_stdlib> 

using namespace metal; 

float4 someFunction(float4 v); 

kernel void compute(texture2d<float, access::write> output [[texture(0)]], 
        uint2 gid [[thread_position_in_grid]]) 
{ 
    float4 color = float4(0, 0.5, 0.5, 1); 
    output.write(color, gid); 
} 

Dies funktioniert gut für mich

+0

Dank brauchte ich nicht die metal_stdlib enthalten in.! meine Header-Datei, aber ich wusste nicht, dass ich den Metall-Namensraum in der Kopfzeile für die Vektor-Typen brauchte ... dumm! Danke nochmal :) – endavid

+0

Das geht bei mir nicht - hat sich in letzter Zeit etwas geändert? Es funktioniert in einem normalen Header, aber nicht in einem Bridging-Header, der sowohl von Swift als auch von Metal verwendet werden kann. – bsabiston