[HLSL 5.0] Fragen zur Leistung
Verfasst: 01.07.2017, 02:58
Ich möchte optimieren, aber mein GPU Shader Analyzer ist kaputt und sowieso nicht mehr unterstützt, und naja, nun sitze ich hier. Meine Fragen:
- Was ist schneller – Texture.Sample() oder Texture.SampleLevel(), wenn die Textur sowieso keine Mip Levels hat? Mit Mip Levels ist SampleLevel() selbstverständlich schneller, weil ddx()/ddy() und die Mip-Auswahl entfallen. Aber haben Shader Compiler genug Informationen über die gebundenen Texturen, dass entsprechend optimiert wird? Mappt die Hardware alles zur selben Anweisung?
- Was ist schneller – frac(float), modf(float, 1.0f), oder float % 1.0f? Oder realisiert gängige Hardware sie alle durch die selbe Anweisung?
- Gibt es irgendeine Möglichkeit, Sample() mit Filterung direkt auf Texel-Indizes arbeiten zu lassen (à la Load()) statt auf normierten Koordinaten? Dann erledigt sich auch die Frage darunter:
Was ist schneller – Texture.GetDimensions() oder Shader-Konstanten mit den Werten? Konstanten sind anstrengend, weil ich dann CPU-seitig Code schreiben muss. Ich meine, mich zu erinnern, dass GetDimensions() deutlich mehr Code hinterlässt, bin aber nicht sicher.
Geklärt – Konstanten sind schneller. Fünf Mal so schnell im Einzelfall; doppelt so schnell in synthetischen Benchmarks. Der Unterschied dürfte bei echten großen Shadern gegen Null gehen; der Code ist aber ganz eindeutig größer und länger, und Code-Größe ist ja auch ein Faktor.