ps_4_0_level_9_3不支持texlod(),在这种情况下如何做类似的操作?

对你们来说,我有一个有趣的问题

我试图编译一个像素着色器,我从GLSL中移植,而且我遇到了一个texCUBElod()函数,编译器认为在当前目标上不支持ps_4_0_level_9_3。

这是我试图编译的函数:

uniform samplerCUBE EnvMap; uniform float EnvMapLod; float4 FS():COLOR: { float4 color; float4 reflected; /* Processing values */ color = texCUBElod(EnvMap, float4(reflected, EnvMapLod)); return color } 

编译器返回这个错误:

 error X4532: texlod not supported on this target 

非常感谢你

是的,它在ps_4_0_level_9_3目标上不可用。

如果我们查看texCUBElod的文档,我们发现它只能在像素着色器中使用,并且只能用于Shader Model 3和4的目标; 对Shader Model 1和2目标来说,它根本不可用。

与ps_4_0_level_9_3的文档交叉检查,我们发现这实际上是一个Shader Model 2目标(具有less量附加function),而不是一个完整的Shader Model 3目标。

texCUBElod不是这些附加function之一,因此它不可用。

脚注2解释了这一点(我强调):

function级别9.3有效地要求硬件符合传统Direct3D 9着色器模型3.0的要求,但该function级别不使用vs_3_0或ps_3_0目标

解决scheme是使用传统的Direct3D 9 Shader Model 3.0目标 ,即ps_3_0 ,而不是ps_4_0_level_9_3。