specification link here
"The Metal programming language is a C++14-based Specification with extensions and restrictions"
you can use constructors to create vectors from a set of scalars or vectors
you can provide either a single scalar parameter like
float4(float x);
to create a vector where all components are set
to the scalar value
or provide multiple scalars like
float4(float x, float y, float z, float w);
creating a matrix with a single scalar results in a matrix where the diagonal
is set to the scalar value with the remaining set to 0.0, which looks like
float4x4(fval);
you can also use vector constructors in matrix constructors like
float2x2(float2, float2)
metal supports a matrix type simdgroup_matrix
a tile shading function is a special type of compute kernel or fragment function that can executre inline with graphics operations
with tile based deferred rendering commands are buffered until a large list of commands accumulates. the hardware divides the framebuffer into tiles and
tile shading function support performing compute operations in the middle of rendering, which can access memory more efficiently by reducing round trops to memory and utilizing high-bandwith local memory
a tile function launches a set of threads called a dispatch, which is organized into threadgroups and grids.
GPUs always process each tile and dispatch to completion
tile functions have access to 32 KB of threadgroup memory that may be divided between imageblock storage and threadgroup storage
------------------
directory------------------