关于D3D12中多对象用不同像素着色器是否需创建多个PSO的确认
D3D12中不同像素着色器对应的PSO创建问题
没错,在D3D12里,只要渲染管线的状态(包括像素着色器)存在差异,就必须创建对应的PSO。因为D3D12的PSO是个包含完整管线状态的不可变对象——从顶点着色器、像素着色器,到输入布局、光栅化规则、深度模板设置等所有管线配置都打包在里面,一旦创建就没法修改。
针对你说的多对象用不同像素着色器的场景:
- 如果两个对象只是像素着色器不一样,其他管线状态(比如顶点着色器、输入布局、光栅化模式等)完全相同,那你得给每个不同的像素着色器单独建PSO。
- 要是除了像素着色器,还有其他管线状态的差异,那更得对应创建不同的PSO。
不过可以做些优化:
- 对相同管线状态组合的PSO做缓存,避免重复创建——比如多个对象用同一个像素着色器的话,直接复用已有的PSO就行。
- D3D12里切换PSO的开销很小,所以不用太担心多PSO带来的性能问题,这本来就是D3D12设计里的常规操作。
内容的提问来源于stack exchange,提问作者Gijahara
相关产品推荐
相关产品推荐

