使用着色器模型 5,但得到最大的vs_4_0_level_9_3误差

Using Shader model 5 but getting maximum vs_4_0_level_9_3 error

本文关键字:vs 误差 level 模型      更新时间:2023-10-16

基本上我有一个简单的寄存器,我在顶点着色器中用于动画目的

cbuffer cbSkinned : register(b3)
{
    float4x4 boneTransforms[96];
};

不幸的是,我无法编译我的着色器/应用程序,尽管我已经使用 _5_0 创建了我的顶点和着色器。Visual Studio是否以某种方式强迫我使用vs_4_0_xxx?

期待一些回复,谢谢。

Visual Studio默认将HLSL文件构建为适用于所有Direct3D功能级设备的xx_4_0_level_9_1。所有 10level9 着色器配置文件都通过生成相同的代码两次来工作:一次用于在 Direct3D 10.0 或更高版本设备上使用的着色器模型 4.0,一次用于 9.x 设备的着色器模型 2.0。由于 SM 2.0 的限制性要强得多,因此由于 SM 2.0 的限制,它经常失败。在这种情况下,您尝试使用 384 个着色器常量插槽(每个插槽都是一个 float4),而着色器模型 2.0 仅要求 256 个这样的着色器常量插槽。

如果将目标配置文件更改为着色器模型 4.0 或更高版本,则构建时可能会没有任何问题。请记住,如果使用着色器模型 5.0 配置文件,则它只能在 Direct3D 功能级别 11.0、11.1、12.0 或 12.1 设备上使用。

请参阅 Direct3D 功能级别和 HLSL、FXC 和 D3DCompile