Freigeben über


Verwenden der minimalen HLSL-Genauigkeit

Ab Windows 8 können Grafiktreiber HLSL-Skalardatentypen mit minimaler Genauigkeit implementieren, indem eine beliebige Genauigkeit verwendet wird, die größer oder gleich der angegebenen Bitgenauigkeit ist. Wenn Ihr HLSL-Shadercode mit minimaler Genauigkeit auf Hardware verwendet wird, die hlSL-Mindestgenauigkeit implementiert, verwenden Sie weniger Arbeitsspeicherbandbreite und daher auch weniger Systemleistung.

Sie können die Mindestgenauigkeitsunterstützung abfragen, die der Grafiktreiber bietet, indem Sie ID3D11Device::CheckFeatureSupport mit dem D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT-Wert aufrufen. Weitere Informationen finden Sie unter HLSL-Unterstützung für minimale Genauigkeit.

Deklarieren von Variablen mit minimaler Genauigkeit von Datentypen

Um die minimale Genauigkeit im HLSL-Shadercode zu verwenden, deklarieren Sie einzelne Variablen mit Typen wie min16float (min16float4 für einen Vektor), min16int, min10float usw. Mit diesen Variablen gibt der Shadercode an, dass er keine höhere Genauigkeit erfordert, als die Variablen angeben. Hardware kann jedoch die Mindestgenauigkeitsindikatoren ignorieren und mit voller 32-Bit-Genauigkeit ausgeführt werden. Wenn Ihr Shadercode auf Hardware verwendet wird, die von minimaler Genauigkeit profitiert, verwenden Sie weniger Speicherbandbreite und daher auch weniger Systemleistung, solange Ihr Shadercode nicht mehr Genauigkeit als angegeben erwartet.

Sie müssen nicht mehrere Shader erstellen, die dies tun und keine Mindestgenauigkeit verwenden. Erstellen Sie stattdessen Shader mit minimaler Genauigkeit, und die Variablen mit minimaler Genauigkeit verhalten sich bei voller 32-Bit-Genauigkeit, wenn der Grafiktreiber meldet, dass er keine Mindestgenauigkeit unterstützt. HLSL-Shader mit minimaler Genauigkeit funktionieren nicht auf Betriebssystemen vor Windows 8 wenn Sie also frühere Betriebssysteme verwenden möchten, müssen Sie mehrere Shader erstellen, von denen einige und andere nicht die Mindestgenauigkeit verwenden.

Hinweis

Führen Sie keine Datenwechsel zwischen verschiedenen Genauigkeitsstufen innerhalb eines Shaders durch, da diese Arten von Konvertierungen verschwenderisch sind und die Leistung beeinträchtigen. Die Ausnahme ist, dass Shaderkonstanten immer noch 32 Bit sind, aber Anbieter können Grafikhardware entwerfen, die frei auf die niedrigere Genauigkeit konvertieren kann, die vom HLSL-Anweisungslesevorgang verwendet werden könnte.

 

Mithilfe der minimalen Genauigkeit können Sie die Genauigkeit von Berechnungen in verschiedenen Teilen Ihres Shadercodes steuern.

Die Regeln für die HLSL-Mindestgenauigkeit ähneln C/C++, bei dem die Typen in einem Ausdruck die Genauigkeit des Vorgangs bestimmen, nicht der Typ, in den schließlich geschrieben wird.

Testen des Shadercodes mit minimaler Genauigkeit

Der Referenzrasterizer (D3D_DRIVER_TYPE_REFERENCE) gibt Ihnen eine grobe Vorstellung davon, wie sich die Mindestgenauigkeit in Ihrem HLSL-Shadercode verhält, indem jede HLSL-Anweisung mit der angegebenen Genauigkeit quantisiert wird. Dies hilft Ihnen, Code zu ermitteln, der versehentlich mehr als die minimale Genauigkeit benötigt. Der Verweisrasterizer wird nicht schneller ausgeführt, wenn ihr HLSL-Shadercode die minimale Genauigkeit verwendet, aber Sie können ihn verwenden, um die Richtigkeit ihres Codes zu überprüfen. WARP (D3D_DRIVER_TYPE_WARP) unterstützt die Verwendung der minimalen Genauigkeit im HLSL-Shadercode nicht. WARP wird nur mit voller 32-Bit-Genauigkeit ausgeführt.

Programmieranleitung für HLSL