2017-10-16 137 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必須允許這種用法。