【发布时间】:2018-04-07 19:03:37
【问题描述】:
有没有办法在 Vulkan 计算着色器中使用 16 位浮点?
我有一个矩阵乘法计算着色器,它带有一个用于矩阵 A、B 和 C 的缓冲区。在主机端,我使用 http://half.sourceforge.net/ 将 float32 转换为 float16。
half* matrixTmp;
vkMapMemory(device, bufferMemory, 0, matrixSize, 0, (void **) &matrixTmp));
int offset = 0;
for(int i = 0; i < M*K; i++) {
matrixTmp[offset+i] = half_cast<half>(matrixA[i]);
}
offset = (M*K);
for(int i = 0; i < K*N; i++) {
matrixTmp[offset+i] = half_cast<half>(matrixB[i]);
}
对于 float32,我使用以下计算着色器布局。
layout(binding = 0) buffer matrixBuffer {
vec4 matrixABC[];
};
如果缓冲区包含 16 位浮点,如何在计算着色器中使用缓冲区?
编辑: 我将 Vulkan 用于 Android 设备,我还需要我的着色器能够进行 16 位操作,而不仅仅是存储。
【问题讨论】:
标签: floating-point glsl vulkan