看起来在某个时候,Nvidia有一个扩展允许半浮点值用于OpenGL 1.1,但显然自那时以来,*现代GLSL规范已经在某个时候收回了half。
今天我可以毫无问题地使用CUDA中的16位浮点值(链接1),NVIDIA在硬件上支持16位浮点值不应该是问题,并且他们似乎在HLSL中支持它们,甚至相互矛盾地在HLSL交叉编译到SPIR-V时也支持它们,而GLSL则不支持。看起来,SPIR-V具有支持16位浮点数所需的所有基元(主要扩展名为KHR),因此没有理由禁止我使用它们。我不确定为什么,尽管我有一张Nvidia显卡,但我无法利用16位浮点运算,显然如果我想利用它,我必须使用AMD或完全切换API。一定有某种方法可以同时使用真正的16位浮点值吧?
我并不是在询问主机到设备分配的缓冲区(即顶点缓冲区)。是的,你可以使用KHR扩展将它们分配为16位浮点数,并且不会有太多问题,但我担心的是在实际着色器中使用16位浮点数,而不是被强制转换为32位浮点数的16位浮点数。