我正在尝试在金属着色器中包含头文件。
对于这样的原型,

float4 someFunction(float4 v);

我收到此错误消息,
Unknown type name 'float4'; did you mean 'float'?

似乎不理解它是着色器程序的头...尽管其他错误表明确实如此。例如,如果我没有在此处指定地址空间,
static float someK = 2.0;

我得到这个错误,
Global variables must have a constant address space qualifier

如果我添加可以固定的
constant static float someK = 2.0;

如果我使用引用,也会出现此类错误,
Reference type must include device, threadgroup, constant, or thread address space qualifier

因此,看起来好像编译器知道它是着色器。为什么不知道float4? :(

最佳答案

确保您的着色器中有前两行,如以下示例所示:

#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);
}

这对我来说很好。

关于ios - Metal :类型名称未知float4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38737692/

10-13 03:48