40 lines
1.8 KiB
Markdown
40 lines
1.8 KiB
Markdown
|
|
|||
|
## 视频地址
|
|||
|
https://www.bilibili.com/video/BV1ey4y1q7s4
|
|||
|
|
|||
|
## ComputerShadder
|
|||
|
### 支持原子操作
|
|||
|
InterLockedAdd(),Min()/Max(),Exchange()
|
|||
|

|
|||
|
|
|||
|
### 线程同步
|
|||
|
GroupMemoryBarrierWithGroupSync()
|
|||
|
|
|||
|
### Shader传入参数
|
|||
|
- GroupThreadID(SV_GroupThreadID)
|
|||
|
- GroupID(SV_GroupID)
|
|||
|
- DispatchThreadID(SV_DispatchThreadID)
|
|||
|
- GroupIndex(SV_GroupIndex)
|
|||
|
|
|||
|
可以在微软的文档中找到具体解释。
|
|||
|
|
|||
|
### ComputeShader对于PixelShader的优势
|
|||
|
PixelShader只能处理当前Shader,ComputeShader是任意位置可写。可以用于编写屏幕空间反射等需要将效果写入任意位置的效果。
|
|||
|
可以更好地利用显卡的并线单元。使用二分法循环计算:
|
|||
|
|
|||
|

|
|||
|
|
|||
|
共享内存:举个例子模糊、等需要多次采样各个像素的算法,使用共享内存就可以减少采样次数与消耗。
|
|||
|
|
|||
|
#### 工作组
|
|||
|
工作组会影响共享内存大小,从而影响多次采样像素的效率。但也会影响线程同步,同步速度变慢,也会影响原子操作次数。
|
|||
|
|
|||
|
### PixelShader对于ComputeShader的优势
|
|||
|
- PixelShader可以预加载贴图并且缓存UV,使得读取贴图的效率会非常高。而ComputeShader需要计算出UV,所以做不到这点。
|
|||
|
- PixelShader支持FrameBuffer压缩,减少带宽压力。
|
|||
|
- PixelShader支持更多的贴图格式。
|
|||
|
|
|||
|
## ComputeShader优化技巧
|
|||
|
- Optimizing Compute Shaders For L2 Locality Using Thread-Group ID Swizzling
|
|||
|
- DirectCompute Programming Guild
|
|||
|
- DirectCompute Optizations And Best Practices
|