【问题标题】:What is the correct descriptor type for Buffer<float4> when using an HLSL shader in Vulkan?在 Vulkan 中使用 HLSL 着色器时,Buffer<float4> 的正确描述符类型是什么?
【发布时间】:2017-10-17 02:27:23
【问题描述】:

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

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

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

描述符槽 0.3 上的类型不匹配(用作类型 ptr 到 const 统一图像(暗淡= 5,采样= 1))但类型的描述符 VK_DESCRIPTOR_TYPE_STORAGE_BUFFER

Buffer&lt;float4&gt; 的正确描述符类型是什么?

【问题讨论】:

    标签: hlsl vulkan


    【解决方案1】:

    经过一些快速的谷歌搜索,Buffer type in HLSL 似乎代表了 OpenGL 所称的“缓冲区纹理”和 Vulkan 所称的“纹素缓冲区”。也就是说,一个缓冲区被解释为特定格式的“像素”的一维数组(因此是&lt;float4&gt; 部分)。

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多