GPU是高度并行的,

并行的读,并行的写,整个管线阶段也是并行执行的,

当对一个三角形着色时,在写到片元时,无法预测他们的顺序,所以图形管线实际上是一个一系列并行的阶段。

tiled gpu在光栅化时,每个tiled相互独立

一个tile的片元可能比之前进入的要更早着色(乱序)

vertex cache miss时,vertex shaders可能重复执行,但是但是。。在到了混合阶段,写入到frame buffer时可以保证顺序是按照vertex读入顺序的。。

 

 

Linear memory对于纹理并不高效。。

加入按照光栅顺序存储纹理,如果绘制三角形应用纹理,那么采样可能要跨多行。。每行读一点。以及读cache不友好。

如果按照8*8 tile 的存储那么无论是cache还是采样,换行更少。。

这就是每个gpu由自己的不同的做法,即iamge layout里的最优布局,这也就是为什么image layout是最优布局的转换无法保留之前的数据。。。

通过barrier可以变换iamge 的layout。

 

当两个subpass一个写入framebuffer,一个读时,要保证顺序,如果第二个pass等待第一个操作完所有framebuffer后显然是低效的(global access),只需要第二个pass等待对应的current pixel写入后就可以开始(local access)。。

例如vk里做延迟渲染,完全不用等到写入到内存里的g-buffer,在开始,可以在renderpass里配置好subpass之间的依赖,这样消耗更低,同时在移动端的tiler更高效。

 

 

Vulkanised 2018 的barrier笔记

pipeline barrier,在配置的点上执行完毕之前,都会阻塞之后的操作。

所以使用event,令其他独立的工作继续保持并行。。同时event在cpu端是可见的,可以在gpu端等待gpu的操作,注意的是视频里说:bear in mind if you make this the gpu wait for too long then everything will think in crashed and the whole system falls down,so don’t do that.

 

srcStageMask可以视为生产者,dstStageMask可以视为消耗者

 

多个barrier尽可能地batch。。

Vulkanised 2018 的barrier笔记

相关文章:

  • 2021-12-07
  • 2021-04-18
  • 2021-08-11
  • 2021-11-21
  • 2021-07-29
  • 2021-04-14
  • 2021-04-17
猜你喜欢
  • 2021-07-15
  • 2022-12-23
  • 2021-06-08
  • 2021-05-22
  • 2021-11-10
相关资源
相似解决方案