微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

同时使用 VkSamplers?

如何解决同时使用 VkSamplers?

所以一个 VkSampler 是用一个 VkSamplerCreateInfo 创建的,它只有一堆配置设置,据我所知,它只是定义了一些输入图像的纯函数

它们被描述为:

VkSampler 对象表示图像采样器的状态,实现使用它来 读取图像数据并为着色器应用过滤和其他转换。

VkSampler 的一个用途(可能只是用途)是将它们写入描述符(例如 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER),以便在绑定到管道/着色器的描述符集中使用。

我的问题是:你能把同一个 VkSampler 写到多个不同的描述符上吗?来自相同或多个不同的描述符池?即使当前描述符之一正在某些当前正在执行的渲染通道中使用?

是否可以同时使用来自多个不同渲染通道/子通道/管道的同一个 VkSampler?

换句话说,VkSampler 是无状态的吗?还是它们代表设备上的一些有状态内存,因此您不应同时使用相同的内存?

解决方法

VkSampler 对象肯定有与之关联的数据,因此称它们为“无状态”是错误的。它们是不可变的。像VkRenderPassVkPipeline等类似的对象,一旦创建,其内容就无法更改。

访问之间的同步(通常)仅在访问之一是修改操作的情况下才需要。由于 VkSampler 是不可变的,因此没有 修改操作。因此,对于从不同线程、命令或其他内容访问 VkSampler 的情况,不需要同步。

唯一的例外是明显的例外:vkDestroySampler,它要求使用采样器的提交命令在调用函数之前已经完成。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。