VK_ACCESS_SHADER_READ_BIT与VK_ACCESS_MEMORY_READ_BIT的区别及使用疑问
着色器读取前数据传输的同步位选择
核心结论
针对着色器读取数据前的传输同步,需根据资源的访问场景选择对应标记,两者的适用场景不同:
不同资源类型的选择逻辑
- 索引缓冲区、顶点输入:这类资源由图形管线的固定功能阶段读取,并非着色器直接访问,需使用
MEMORY_READ确保传输完成后管线能获取到最新数据。 - 存储缓冲区、统一缓冲区:若仅由着色器(顶点/片段/计算着色器)读取,仅需使用
SHADER_READ标记;如果同时存在CPU端的读取需求,才需要额外搭配MEMORY_READ。 - 采样图像(纹理、采样器等):着色器通过采样器访问时,使用
SHADER_READ即可完成同步;只有当CPU需要读取该图像数据时,才需要补充MEMORY_READ。
计算着色器的规则
计算着色器遵循完全一致的同步规则:
- 当计算着色器读取存储缓冲区、统一缓冲区、采样图像时,使用
SHADER_READ同步传输操作即可; - 若涉及CPU读取计算着色器输出的缓冲区这类非着色器阶段的内存访问,才需要使用
MEMORY_READ。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

