Yes, that often works.
Anyway: to see full capabilities of the shaders, best is to read engine source (model_shared.c).
Some details in comparison to Q3:
- DP only REALLY cares for one stage.
- Lightmap stage is ignored and only checked if it exists. It is not counted as shader stage.
- There is ONE occasion where DP uses two shader stages. Namely, when the first stage uses no blendfunc, and the second stage uses alpha blending (blendfunc blend).
- The following DP specific shader keywords exist, with no explanation here: dpshadow, dpnoshadow, dpnortlight, dpreflectcube, dpmeshcollisions, dpshaderkillifcvarzero, dpshaderkillifcvar, dpnoshaderkillifcvarzero, dpnoshaderkillifcvar, dppolygonoffset, dprefract, dpreflect, dpcamera, dpwater, dpwaterscroll, dpglossintensitymod, dprtlightambient, dpoffsetmapping
- dppolygonoffset allows arbitrary offsets, and thus can be used to stack multiple shaders on one place