Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are there two brackets [ in the c++ vertex functions?

I am watching the introduction video's from Apple about Metal and MetalKit.

The sample code for the shaders has these double brackets like [[buffer(0)]] arguments. Why are there two brackets? Does it mean anything or is it just to indicate that there is keyword "buffer" following? There is no such construct in standard c++, is there?

vertex Vertex vertex_func(constant Vertex *vertices [[buffer(0)]],
                              constant Uniforms &uniforms [[buffer(1)]],
                              uint vid [[vertex_id]])

Also what would be a good 1 or 2 week fun project as an introduction into GP-GPU? Something manageable for a novice with good math skills but no artistic skills.

like image 580
user965972 Avatar asked Dec 04 '16 20:12

user965972


Video Answer


1 Answers

These are called attributes, and their syntax and behavior are defined in section 7.6.1 of the C++ standard, Attribute syntax and semantics. They look like this in the grammar:

attribute-specifier:
    [ [ attribute-list ] ]
    alignment-specifier

The Metal shading language defines numerous attributes that allow you to associate various semantics with variables, struct/class members, and function arguments (including argument table bindings as in your question).

The Metal Shading Language Specification defers to the C++ standard on this, so the C++ standard really is the reference to consult:

The Metal programming language is based on the C++14 Specification (a.k.a., the ISO/IEC JTC1/SC22/ WG21 N4431 Language Specification) with specific extensions and restrictions. Please refer to the C++14 Specification for a detailed description of the language grammar.

like image 165
warrenm Avatar answered Nov 10 '22 03:11

warrenm