Vulkan:描述符集兼容性
Vulkan: Descriptor set compatibility
在 Vulkan 规范的第 'Descriptor Set Binding' 章中作出以下声明:
A compatible descriptor set must be bound for all set numbers that any shaders in a pipeline access, at the time that a draw or dispatch command is recorded to execute using that pipeline.
'compatible descriptor'在哪里定义的?我没有在规范中找到定义。我想知道描述符集是否必须与着色器中的设置布局完全匹配,或者是否允许描述符集将资源绑定到着色器中不存在的绑定点。
这个问题的原因如下:假设我有两个几乎相同的着色器(考虑它们 'variations' 模板着色器),它们具有相同的布局,除了其中一个不使用一个特定的绑定点(即,这可能是一个 'fast path',通过 #ifdef 从通用路径派生,导致一个绑定点被优化掉)。假设我有两个绘制调用,第一个使用一个着色器,第二个使用另一个,并假设所需的资源是相同的,除了具有该特殊绑定点的那个着色器有一个额外的资源。还假设我使用相同的描述符集布局,它精确映射到一个具有附加绑定点的着色器。在这种情况下,我更愿意为两个着色器使用相同的描述符集,以减少 updates/binds 描述符集的数量。该集合将与一个着色器完全匹配,并且它将包含另一个着色器中不存在的资源绑定。
着色器没有布局; 管道有布局。当您构建管道时,VkPipelineLayout
必须在某种程度上与着色器中定义的内容一致。
也就是说,着色器声明的资源必须与 VkPipelineLayout
指定的资源相匹配。但是管道布局还可以定义其他资源,这些资源不会被该管道中的着色器使用。
使用管线渲染时绑定的描述符集必须与为该管线定义的描述符集布局完全匹配(您可以为高于管线使用的最高集的集绑定描述符,但最高集的所有内容管道使用的必须匹配)。所以如果你想做你想做的事,只需给两个管道相同的布局。
在 Vulkan 规范的第 'Descriptor Set Binding' 章中作出以下声明:
A compatible descriptor set must be bound for all set numbers that any shaders in a pipeline access, at the time that a draw or dispatch command is recorded to execute using that pipeline.
'compatible descriptor'在哪里定义的?我没有在规范中找到定义。我想知道描述符集是否必须与着色器中的设置布局完全匹配,或者是否允许描述符集将资源绑定到着色器中不存在的绑定点。
这个问题的原因如下:假设我有两个几乎相同的着色器(考虑它们 'variations' 模板着色器),它们具有相同的布局,除了其中一个不使用一个特定的绑定点(即,这可能是一个 'fast path',通过 #ifdef 从通用路径派生,导致一个绑定点被优化掉)。假设我有两个绘制调用,第一个使用一个着色器,第二个使用另一个,并假设所需的资源是相同的,除了具有该特殊绑定点的那个着色器有一个额外的资源。还假设我使用相同的描述符集布局,它精确映射到一个具有附加绑定点的着色器。在这种情况下,我更愿意为两个着色器使用相同的描述符集,以减少 updates/binds 描述符集的数量。该集合将与一个着色器完全匹配,并且它将包含另一个着色器中不存在的资源绑定。
着色器没有布局; 管道有布局。当您构建管道时,VkPipelineLayout
必须在某种程度上与着色器中定义的内容一致。
也就是说,着色器声明的资源必须与 VkPipelineLayout
指定的资源相匹配。但是管道布局还可以定义其他资源,这些资源不会被该管道中的着色器使用。
使用管线渲染时绑定的描述符集必须与为该管线定义的描述符集布局完全匹配(您可以为高于管线使用的最高集的集绑定描述符,但最高集的所有内容管道使用的必须匹配)。所以如果你想做你想做的事,只需给两个管道相同的布局。