在Vulkan中使用HLSL着色器时,Buffer <float4>的正确描述符类型是什么?

时间:2017-10-16 17:50:16

标签: hlsl vulkan

我正在尝试在我的Vulkan渲染器中使用HLSL片段着色器。着色器读取缓冲区:

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

我不知道我应该为那个描述符槽使用什么样的描述符。我尝试使用VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,但验证层给出了以下错误:

  

描述符槽0.3上的类型不匹配(用作类型ptr到const   均匀图像(dim = 5,采样= 1))但是类型的描述符   VK_DESCRIPTOR_TYPE_STORAGE_BUFFER

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

1 个答案:

答案 0 :(得分:0)

经过一些快速谷歌搜索后,Buffer type in HLSL似乎代表了OpenGL称之为&#34;缓冲区纹理&#34;什么Vulkan称之为&#34; texel缓冲区&#34;。也就是说,一个缓冲区被解释为像素的一维数组&#34;特定格式(因此<float4>部分)。

编译器正在生成与此描述匹配的SPIR-V:uniform变量,其类型由OpTypeImage创建,维度为Buffer(因此,the "dim=5"部分错误)。期望这种变量用于类型VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER的描述符。您需要将VkBufferView绑定到此描述符,该视图的VkBuffer源必须允许VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT用法。

当然,VkBuffer必须允许这样使用的内存支持。