2017-10-16 152 views
1

我想在我的Vulkan渲染器中使用HLSL片段着色器。着色器读取缓冲区:在Vulkan中使用HLSL着色器时,Buffer <float4>的正确描述符类型是什么?

layout(set=0, binding=3) Buffer<float4> pointLightBufferCenterAndRadius : register(t1); 

我不知道我应该使用哪种描述符来描述符槽。我试图用VK_DESCRIPTOR_TYPE_STORAGE_BUFFER但验证层给了我以下错误:

Type mismatch on descriptor slot 0.3 (used as type ptr to const uniform image(dim=5, sampled=1)) but descriptor of type VK_DESCRIPTOR_TYPE_STORAGE_BUFFER

什么是Buffer<float4>正确的描述符类型?

回答

0

经过一些快速的谷歌搜索之后,Buffer type in HLSL看起来代表了OpenGL称之为“缓冲纹理”和Vulkan称之为“纹理缓冲区”的东西。也就是说,缓冲区被解释为特定格式的“像素”的1D阵列(因此是<float4>部分)。

编译器产生,该描述相符SPIR-V:与由OpTypeImage创建的类型uniform可变的,Buffer(因此,the "dim=5"误差的一部分)的尺寸。这样的变量预计将用于VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER类型的描述符。您需要将VkBufferView绑定到此描述符,并且该视图的源必须允许使用VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT

当然,内存支持VkBuffer必须允许这种用法。