Apple изменила разрешенный векторный формат в металле - PullRequest
0 голосов
/ 14 декабря 2018

В iOS 12.1.1 металлические шейдеры, кажется, что векторы в форме (float4) (1,2,3,4) молча анализируются как что-то еще - подумайте (1,1,1,1).Это относится ко всем векторным форматам.Единственный способ исправить это - удалить парантез вокруг типа.Некоторые скажут, что с самого начала парантез был чрезмерным.Но у нас было много кода, который работал и неожиданно начал просчитываться из-за этого переключения.

Мой вопрос заключается в том, является ли это «металлической ошибкой», или просто Apple является синтаксически-нацистами и подтасовывает вещи без веской причины?

1 Ответ

0 голосов
/ 14 декабря 2018

Это никогда не должно было сработать.

Разделенный запятыми список значений в скобках в (float4)(1,2,3,4) обрабатывается как приложение оператора запятой , а не списка параметров для конструктора, посколькуВы также заключили тип в скобки.Существует множество способов инициализации float4 из 1 или 4 компонентов.Они производят вектор {1, 2, 3, 4}:

float4 f = float4(1, 2, 3, 4);
float4 f(1, 2, 3, 4);
float4 f = (float4){ 1, 2, 3, 4 };
float4 f{1, 2, 3, 4};
float4 f = { 1, 2, 3, 4 };

и производят вектор {1, 1, 1, 1}:

float4 f = { 1 };
float4 f(1);
float4 f = 1;
float4 f = (float4)1;

Ваш пример,хотя синтаксически действителен, не дает ожидаемого результата, потому что этот синтаксис не означает, что вы думаете, что он делает.

...