并发使用 VkSamplers?
Concurrent use of VkSamplers?
因此,VkSampler 是使用 VkSamplerCreateInfo 创建的,它只有一堆配置设置,据我所知,它只会定义一些输入图像的纯函数。
他们被描述为:
VkSampler objects represent the state of an image sampler which is used by the implementation to
read image data and apply filtering and other transformations for the shader.
VkSampler 的一个用途(可能是唯一的用途)是将它们写入描述符(例如 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER),以便在绑定到 pipelines/shaders.
的描述符集中使用
我的问题是:你能为多个不同的描述符编写相同的 VkSampler 吗?来自相同或多个不同的描述符池?即使当前描述符之一正在某些当前正在执行的渲染通道中使用?
您能否从多个不同的渲染通道/子通道/管线同时使用同一个 VkSampler?
换句话说,VkSampler 是无状态的吗?还是它们代表了设备上的一些有状态内存,所以你不应该同时使用同一个内存?
VkSampler
对象肯定有与之关联的数据,因此称它们为“无状态”是错误的。它们是不可变的。像VkRenderPass
、VkPipeline
等类似的对象,一旦创建,其内容就无法更改。
访问之间的同步(通常)仅在其中一个访问是修改操作的情况下才需要。由于VkSampler
是不可变的,所以有没有个修改操作。因此,如果您从不同的线程、命令或其他内容访问 VkSampler
,则不需要同步。
唯一的例外是明显的例外:vkDestroySampler
,它要求使用采样器的提交命令在调用函数之前已经完成。
因此,VkSampler 是使用 VkSamplerCreateInfo 创建的,它只有一堆配置设置,据我所知,它只会定义一些输入图像的纯函数。
他们被描述为:
VkSampler objects represent the state of an image sampler which is used by the implementation to read image data and apply filtering and other transformations for the shader.
VkSampler 的一个用途(可能是唯一的用途)是将它们写入描述符(例如 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER),以便在绑定到 pipelines/shaders.
的描述符集中使用我的问题是:你能为多个不同的描述符编写相同的 VkSampler 吗?来自相同或多个不同的描述符池?即使当前描述符之一正在某些当前正在执行的渲染通道中使用?
您能否从多个不同的渲染通道/子通道/管线同时使用同一个 VkSampler?
换句话说,VkSampler 是无状态的吗?还是它们代表了设备上的一些有状态内存,所以你不应该同时使用同一个内存?
VkSampler
对象肯定有与之关联的数据,因此称它们为“无状态”是错误的。它们是不可变的。像VkRenderPass
、VkPipeline
等类似的对象,一旦创建,其内容就无法更改。
访问之间的同步(通常)仅在其中一个访问是修改操作的情况下才需要。由于VkSampler
是不可变的,所以有没有个修改操作。因此,如果您从不同的线程、命令或其他内容访问 VkSampler
,则不需要同步。
唯一的例外是明显的例外:vkDestroySampler
,它要求使用采样器的提交命令在调用函数之前已经完成。