Deklaráció:
StorageClass - Opcionálisan megadható.
Értéke az inline lehet. Ezzel minden függvényhívásnál generál egy másolatot a függvény törzséből fordításkor, ugyanúgy mint C++-nál, ezzel a tárgykód nő, de a program gyorsabb lehet, kisebb függvényhívásoknál javasoltReturn_Value – Visszatérési érték típusa, lehet void is.
Name – Függvény neve
ArgumentList – Opcionális, paraméterek listája. Ez eltérő a C++-hoz képest. Deklarációja:
InputModifier - ezzel adható meg hogy a paraméterünk input, output vagy mindkettő, hasonlóan az ADA-ban. In esetén csak input, Out esetén csak output, Inout esetén mindkettő, Uniform esetén pedig input lehet csak, és konstansnak kell lennie
InterpolationModifier – ezzel adhatjuk meg hogy milyen interpoláció végezhető el az adott típuson, ez alapból lineáris, ha nem adunk meg semmit.
Initializers – azonosítót adhatunk meg a paraméternek
Semantic – Opcionális. Ez fontos, hiszen ha a következő shader-nek akarunk adatot átadni, akkor itt meg kell adni, hogy ez a függvény milyen adatot fog visszaadni. Később lesz rá példa.
StatementBlock – Függvény törzse
Geometry shadereknél kicsit más a függvénydeklaráció, azt itt most nem részletezem. Lásd itt.
Visszatérési érték ugyanúgy működik mint C++-ban, tehát a return kulcsszóval.
HLSL-ben rengeteg beépített függvény van, ezek listája megtalálható itt.
Érdemes ezeket használni, mivel sok művelet már előre meg van írva, illetve ezek optimalizált kódok.
Példa:
Lehetőség van HLSL-ben a függvények túlterhelésére a visszatérési értékkel, névvel, paraméterek típusával, vagy számával, tehát ugyanúgy mint C++-ban.