Subpass Shading
===============

随着游戏场景的复杂化，越来越多的光照效果被应用到游戏场景中，随之也带来大量的光照计算以及带宽消耗。目前通过Tile-Based Deferred Rendering（TBDR）和Forward+等方法可以解决大量光照的渲染时间消耗，但是大量带宽的占用问题还是没有解决，Subpass Shading能力主要减少计算过程中的读写从而减少带宽的占用。

下图说明Subpass Shading节省渲染通道1和Compute Pass从Device memory上面的一次读写带宽。

**图1** Forward+读取过程

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/cc/v3/QIv1_7ftTw-rauLhRAPP5A/zh-cn_image_0000002625188399.png?HW-CC-KV=V1&HW-CC-Date=20260612T073545Z&HW-CC-Expire=86400&HW-CC-Sign=F5FFCAD96FA323DFC5DEA56FD894975ACABB9590FE97214B929CEAE097895FAA)

**图2** Subpass Shading读取过程

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/55/v3/9XTZ9E-3Rnqi9P_aKPLbaw/zh-cn_image_0000002625108543.png?HW-CC-KV=V1&HW-CC-Date=20260612T073545Z&HW-CC-Expire=86400&HW-CC-Sign=57635EB749D53F26023B7C4A352D16CFD66563AC2BA40F9C5D542EAD27C60B4F)

#### 约束与限制

支持的设备类型：Phone，从5.0.2(14)版本开始，新增支持Tablet、PC/2in1设备，从5.1.0(18)版本开始新增支持TV设备。

#### 接口说明

通过Vulkan扩展接口[VK\_HUAWEI\_subpass\_shading](https://registry.khronos.org/vulkan/specs/latest/man/html/VK_HUAWEI_subpass_shading.html)提供Subpass Shading API，该扩展支持在Subpass中使用Compute Shader，并在Compute Shader中使用SubpassLoad从Tile buffer中直接读取数据，可用于降低DDR带宽，适用于TBDR和Forward+管线。

Subpass Shading能力具体使用请参见[Demo（GPU加速引擎-Subpass Shading）](https://gitcode.com/harmonyos_samples/xengine-samplecode-subpass-shading-demo-cpp)。