我正在尝试在 wgpu 中创建多个绑定组(每个纹理对应一个我必须加载的纹理),但我的设备似乎只能支持 4 个绑定组:每当我尝试使用更多绑定组时,都会收到错误“绑定组布局计数” 5 超出设备绑定组限制 4"。
从 wgpu 文档中,我不清楚这是否是硬件设备的实际限制,或者是否是软限制并且可以在软件中设置。在https://docs.piston.rs/conrod/wgpu/struct.Limits.html中,它提到 max_bind_groups 的默认值为 4,这与我得到的错误中的最大值相同。
我认为许多应用程序使用超过 4 个纹理,并且它们都可以在我的设备上运行(即使可能不使用 wgpu?),所以是否可以更改此限制并消除错误?
谢谢!
从 wgpu 文档中,我不清楚这是否是硬件设备的实际限制,或者是否是软限制并且可以在软件中设置。
wgpu
的设计是为了(当一切正常工作时)当您在新硬件上运行程序时不会出现令人惊讶的错误。因此,无论硬件支持什么,您传递给 Limits
的 request_device()
始终会被强制执行。但如果您指定的限制高于硬件支持,request_device()
将会失败。
因此,一般来说,您应该指定
Limits
,其数量与您的应用程序所需的数量完全相同。如果您的应用程序可以灵活,请咨询 Adapter::limits()
了解支持的内容,然后根据您的请求适当调整该限制。
我认为许多应用程序使用超过 4 个纹理,并且它们都可以在我的设备上运行(即使可能不使用 wgpu?)
有很多方法可以使
max_bind_groups
限制不是纹理的限制:
set_bind_group()
设置的不同绑定组 — max_bind_groups
是管道同时使用多少个绑定组的限制,而不是您可以创建多少个绑定组。
每个绑定组可以有多个绑定。Features::TEXTURE_BINDING_ARRAY
D2Array
),它存储大小相同但内容不同的“层”。纹理可以用作
(这是您在代码中创建的抽象,而不是图形 API 中的某些内容)——它使用的一个或多个纹理,也可能是其他控制绘图的参数。您为每种材质创建一个绑定组,然后在渲染时,为一种材质绘制 set_bind_group()
,绘制使用该材质的所有对象,然后再次
set_bind_group()
,依此类推。无论材质是什么,这仅使用管道中的one绑定组槽。您至少需要为相机使用另一个绑定组 - 这只是默认情况下可用的 4 个插槽中的 2 个。 当然,其他类型的渲染实际上可能需要同时访问许多纹理。这时您就可以使用上面列表中的其他技术。