Uso della precisione minima HLSL

A partire da Windows 8, i driver grafici possono implementare tipi di dati scalari HLSL con precisione minima usando qualsiasi precisione maggiore o uguale alla precisione di bit specificata. Quando il codice dello shader di precisione minima HLSL viene usato nell'hardware che implementa la precisione minima HLSL, si usa meno larghezza di banda di memoria e di conseguenza si usa una minore potenza di sistema.

È possibile eseguire una query per ottenere il supporto di precisione minimo fornito dal driver grafico chiamando ID3D11Device::CheckFeatureSupport con il valore D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Per altre info, vedi Supporto della precisione minima HLSL.

Dichiarare variabili con tipi di dati di precisione minima

Per usare la precisione minima nel codice dello shader HLSL, dichiarare singole variabili con tipi come min16float (min16float4 per un vettore), min16int, min10float e così via. Con queste variabili, il codice dello shader indica che non richiede una maggiore precisione rispetto a quanto indicato dalle variabili. L'hardware può tuttavia ignorare gli indicatori di precisione minimi ed eseguire con precisione completa a 32 bit. Quando il codice shader viene usato nell'hardware che sfrutta la precisione minima, si usa una larghezza di banda di memoria inferiore e, di conseguenza, si usa una minore potenza di sistema purché il codice shader non preveda una maggiore precisione rispetto a quella specificata.

Non è necessario creare più shader che e non usano la precisione minima. Creare invece shader con precisione minima e le variabili di precisione minima si comportano con precisione completa a 32 bit se il driver grafico segnala che non supporta alcuna precisione minima. Gli shader di precisione minima HLSL non funzionano nei sistemi operativi precedenti a Windows 8, quindi se si prevede di usare sistemi operativi precedenti, è necessario creare più shader, alcuni che e altri che non usano la precisione minima.

Nota

Non fare cambi dati tra livelli di precisione diversi all'interno di uno shader perché questi tipi di conversioni sono sprecate e riducono le prestazioni. L'eccezione è che le costanti shader sono sempre a 32 bit, ma i fornitori possono progettare hardware grafico in grado di eseguire liberamente la conversione in modo da ridurre la precisione della lettura delle istruzioni HLSL.

 

Usando la precisione minima, è possibile controllare la precisione dei calcoli in varie parti del codice dello shader.

Le regole per la precisione minima HLSL sono simili a C/C++, in cui i tipi in un'espressione determinano la precisione dell'operazione, non il tipo in cui viene infine scritto.

Test del codice dello shader di precisione minimo

Il rasterizzatore di riferimento (D3D_DRIVER_TYPE_REFERENCE) offre un'idea approssimativa del comportamento minimo della precisione nel codice dello shader HLSL quantificando ogni istruzione HLSL alla precisione specificata. Ciò consente di individuare il codice che potrebbe basarsi accidentalmente su più della precisione minima. Il rasterizzatore di riferimento non viene eseguito più velocemente quando il codice dello shader HLSL usa la precisione minima, ma è possibile usarlo per verificare la correttezza del codice. WARP (D3D_DRIVER_TYPE_WARP) non supporta l'uso della precisione minima nel codice dello shader HLSL; WARP viene eseguito con precisione completa a 32 bit.

Guida alla programmazione per HLSL