Я смотрю вступительное видео от Apple о Metal и MetalKit.
Пример кода для шейдеров имеет такие двойные скобки, как [[buffer(0)]]
аргументы. Почему есть две скобки? Означает ли это что-нибудь или это просто означает, что после ключевого слова «буфер»? В стандарте с ++ такой конструкции нет, не так ли?
vertex Vertex vertex_func(constant Vertex *vertices [[buffer(0)]],
constant Uniforms &uniforms [[buffer(1)]],
uint vid [[vertex_id]])
Кроме того, что будет хорошим 1 или 2-недельным увлекательным проектом в качестве введения в GP-GPU? Что-то управляемое для новичка с хорошими математическими навыками, но без художественных навыков.
Они называются атрибуты, и их синтаксис и поведение определены в разделе 7.6.1 стандарта C ++, Синтаксис и семантика атрибутов. Они выглядят так в грамматике:
attribute-specifier:
[ [ attribute-list ] ]
alignment-specifier
Язык затенения металла определяет многочисленные атрибуты, которые позволяют связывать различные семантики с переменными, struct
/class
члены и аргументы функции (включая привязки таблицы аргументов, как в вашем вопросе).
Спецификация языка затенения металла Относится к стандарту C ++ по этому вопросу, поэтому стандарт C ++ действительно является справочной информацией:
Язык программирования Metal основан на спецификации C ++ 14
(a.k.a., Спецификация языка ISO / IEC JTC1 / SC22 / WG21 N4431)
с конкретными расширениями и ограничениями. Пожалуйста, обратитесь к C ++ 14
Спецификация для подробного описания грамматики языка.
С этим [[x]] вы объявляете att, которые передаются между шейдерами и CPU
Я цитирую:
Синтаксис [[…]] используется для объявления таких атрибутов, как ресурс
местоположения, входы шейдеров и встроенные переменные, которые передаются обратно
и вперед между шейдерами и процессором