Недопустимое имя компонента вектора "x" (металл) - PullRequest
1 голос
/ 19 февраля 2020

с Metal, во время выполнения, когда я пытаюсь скомпилировать мой шейдер, я получаю сообщение об ошибке

Ошибка: недопустимое имя компонента вектора 'x'

Это хорошо работает, когда в macos 10.14 / 10.15 но на macos 10.11 на старой ма c mini это cra * sh! есть идеи почему?

using namespace metal;

struct Vertex {
  packed_float3 position;
};

struct ProjectedVertex {
  float4 position [[position]];
};

vertex ProjectedVertex vertexShader(constant Vertex *vertexArray [[buffer(0)]],
                                    const unsigned int vertexId [[vertex_id]],
                                    constant float4x4 &MVPMatrix [[buffer(1)]]) {
  Vertex in = vertexArray[vertexId];
  ProjectedVertex out;
  out.position = float4(in.position.x, in.position.y, in.position.z, 1) * MVPMatrix;
  return out;
}

1 Ответ

2 голосов
/ 20 февраля 2020

До Metal 2.1 доступ к именованным компонентам упакованного векторного типа не разрешен в Metal Shading Language.

Чтобы обойти это, либо получите доступ к таким элементам через подписку, либо создав локальную переменную соответствующий неупакованный тип:

out.position = float4(in.position[0], in.position[1], in.position[2], 1) * MVPMatrix;

// OR:

float3 position = in.position;
out.position = float4(position.x, position.y, position.z, 1) * MVPMatrix;
...