我正在尝试在我的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>
的正确描述符类型是什么?
答案 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
必须允许这样使用的内存支持。