在 Vulkan 中使用 HLSL 着色器时 Buffer<float4> 的正确描述符类型是什么?
What is the correct descriptor type for Buffer<float4> when using an HLSL shader in Vulkan?
我正在尝试在我的 Vulkan 渲染器中使用 HLSL 片段着色器。着色器读取缓冲区:
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>
的正确描述符类型是什么?
快速谷歌搜索后,Buffer
type in HLSL 似乎代表 OpenGL 所称的 "buffer texture" 和 Vulkan 所称的 "texel buffer"。也就是说,一个缓冲区被解释为特定格式的 "pixels" 的一维数组(因此是 <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
的内存支持必须允许这样的使用。
我正在尝试在我的 Vulkan 渲染器中使用 HLSL 片段着色器。着色器读取缓冲区:
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>
的正确描述符类型是什么?
快速谷歌搜索后,Buffer
type in HLSL 似乎代表 OpenGL 所称的 "buffer texture" 和 Vulkan 所称的 "texel buffer"。也就是说,一个缓冲区被解释为特定格式的 "pixels" 的一维数组(因此是 <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
的内存支持必须允许这样的使用。