4

ある時点で、Nvidia はOpenGL 1.1の半分の浮動小数点値を許可する拡張機能を持っていたようですが、それ以降、ある時点で世界の半分が最新の GLSL 仕様によって取り戻されたようです。

今日、私はCUDA で 16 ビット浮動小数点値を問題なく使用できます。NVIDIAが 16 ビット浮動小数点をサポートするハードウェアに問題はないはずです。HLSL でそれらをサポートしているように見えます SPIR-V は GLSL ではありませんが、Nvidia には対応していません。SPIR-V には、プライマリ拡張(KHR) に関係なく、16 ビット浮動小数点をサポートするために必要なすべてのプリミティブがあるように見えるので、それらの使用を禁止する理由はないようです。

Nvidia カードを持っているにもかかわらず、16 ビット浮動小数点演算を利用できない理由がわかりません。それを利用したい場合は、AMD を使用するか、API を完全に切り替える必要があるようです。確かに、両方に真の16ビット浮動小数点値を実際に使用する方法があるに違いありませんか?

ホストからデバイスに割り当てられたバッファー (IE 頂点バッファー) については質問していません。はい、それらを KHR 拡張を使用して 16 ビット浮動小数点数として割り当てることができ、大きな問題はありませんが、実際のシェーダー内では、16 ビット浮動小数点数を使用し、16 ビット浮動小数点数を 32 ビット浮動小数点数に強制するのではなく、心配しています。

4

1 に答える 1

5

GLSL を SPIR-V にコンパイルするために glslang コンパイラを使用していると思われます。そのコンパイラでは、GLSL に対するプラットフォーム固有の拡張機能は、実際には「プラットフォーム固有」ではありません。SPIR-V コードを受信するコンパイラと Vulkan が一般的に重要です。

GL_AMD_gpu_shader_half_float 機能は AMD 拡張機能ではなく SPIR-V 機能に直接マップされるため、glslang はこのFloat16機能を使用する SPIR-V コードを出力します。受信側の Vulkan 実装がそのFloat16機能を提供している限り、問題ありません。

もちろん、Vulkan の実装ではこの機能が提供されていないため、問題はありません。Vulkan の機能や拡張機能はなく、たとえ VK_AMD_gpu_shader_half_float であっても、この SPIR-V 機能を提供していません。また、Vulkan がその機能を提供しない場合、キャップを使用する SPIR-V シェーダーを Vulkan に渡すことはできません。

つまり、それを使用するシェーダーをコンパイルすることはできますが、現時点ではそれらのシェーダーを Vulkan に渡すことはできません。

于 2018-04-17T22:36:33.083 に答える