шейдер — Почему в вершинных функциях c ++ есть две скобки?

Я смотрю вступительное видео от 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? Что-то управляемое для новичка с хорошими математическими навыками, но без художественных навыков.

6

Решение

Они называются атрибуты, и их синтаксис и поведение определены в разделе 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
Спецификация для подробного описания грамматики языка.

7

Другие решения

С этим [[x]] вы объявляете att, которые передаются между шейдерами и CPU

Я цитирую:

Синтаксис [[…]] используется для объявления таких атрибутов, как ресурс
местоположения, входы шейдеров и встроенные переменные, которые передаются обратно
и вперед между шейдерами и процессором

3

По вопросам рекламы [email protected]