我正在做一个内核大小为 64 的 SSAO 着色器。
SSAO 片段着色器:
const int kernelSize = 64;
for (int i = 0; i < kernelSize; i++) {
//Get sample position
vec3 s = tbn * ubo.kernel[i].xyz;
s = s * radius + origin;
vec4 offset = vec4(s, 1.0);
offset = ubo.projection * offset;
offset.xy /= offset.w;
offset.xy = offset.xy * 0.5 + 0.5;
float sampleDepth = texture(samplerposition, offset.xy).z;
float rangeCheck = abs(origin.z - sampleDepth) < radius ? 1.0 : 0.0;
occlusion += (sampleDepth >= s.z ? 1.0 : 0.0) * rangeCheck;
}
samplerposition 纹理具有格式VK_FORMAT_R16G16B16A16_SFLOAT
并与 flag 一起上传VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
。
我正在使用带有 nvidia K1100M 显卡的笔记本电脑。如果我在 renderdoc 中运行代码,这个着色器需要114 ms。如果我将其更改kernelSize
为 1,则需要1 ms。
这个纹理获取时间正常吗?还是我在某处设置了错误?
就像布局过渡没有经过,所以纹理是 inVK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
而不是VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
.