metal shading language

specification link here

"The Metal programming language is a C++14-based Specification with extensions and restrictions"

stuff metal supports

vector constructors

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);

matrix constructors

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)

SIMD-group matrix data types

metal supports a matrix type simdgroup_matrix where operations on SIMD-group matrices are executed cooperatively by threads in the SIMD-group

address spaces

tile functions

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

------------------