为什么着色器编译器决定使用 ps_2_0 模型?

Why could shader compiler decide to use ps_2_0 model?

着色器编译器为我的着色器生成警告说

"error X5608: Compiled shader code uses too many arithmetic instruction slots (78). Max. allowed by the target (ps_2_0) is 64. Consider increasing optimization level to reduce instruction count."

但是,我使用的是着色器模型 4:

是什么让编译器认为我正在使用 ps_2_0?我错过了一些 options/preferences 吗?

您正在使用着色器模型,但具有级别 9_1 功能集,其设计用于在不支持 "real" 功能级别 4.0 的旧显卡上使用 Direct3D11 API,或者嵌入式设备(阅读此处,主要是手机)。

因此,即使您可以使用 Shader Model 4 语法,您的着色器仍然需要符合硬件功能(对于 9.1 级是 ps2.0)。

请参阅有关功能级别的 msdn 博客 here

如果您知道您的目标硬件适用于功能级别 4(现在几乎所有 laptop/desktop 都支持级别 11),您应该改用 Shader Model 4 (/4_0) 编译器选项。