读取效果文件始终不返回任何技术

时间:2014-05-29 08:29:02

标签: hlsl windows-api-code-pack

我有一个非常简单的测试效果文件,我尝试使用以下代码加载:

using D3D = Microsoft.WindowsAPICodePack.DirectX.Direct3D10;
...
var DxDevice = CreateDevice(D3D.DriverType.Hardware);
var stream = Application.GetResourceStream(Global.MakePackUri("Resources/Effects/Test.ps"));
var DxEffect = DxDevice.CreateEffectFromCompiledBinary(stream.Stream);
MessageBox.Show(DxEffect.Description.Techniques);

效果中的技术数量始终为零。

效果文件除了为位图着色以便于识别外什么都不做:

sampler2D input1 : register(S0);

float4 DoHorizontal(float2 uv : TEXCOORD) : COLOR
{
  return float4(1, 0, 1, 1);
}

float4 DoVertical(float2 uv : TEXCOORD) : COLOR
{
  return float4(1, 1, 0, 1);
}

technique Test
{
  pass P0
  {
    PixelShader = compile ps_4_0 DoHorizontal();
  }
  pass P1
  {
    PixelShader = compile ps_4_0 DoVertical();
  }
}

它编译时没有任何错误(使用fxc /T fx_4_0)。 Windows API代码包中是否存在可能导致这种奇怪行为的HLSL不兼容性?

1 个答案:

答案 0 :(得分:1)

你的效果仍然使用旧的DirectX9语法,你使用Shader Model 4,可能会产生问题。

更新版本,以适应DX10 +语法:

SamplerState input1 : register(S0);

float4 DoHorizontal(float2 uv : TEXCOORD) : SV_Target
{
    return float4(1, 0, 1, 1);
}

float4 DoVertical(float2 uv : TEXCOORD) : SV_Target
{
    return float4(1, 1, 0, 1);
}

technique10 Test
{
pass P0
{
    SetPixelShader( CompileShader( ps_4_0, DoHorizontal() ) );
}
pass P1
{
    SetPixelShader( CompileShader( ps_4_0, DoVertical() ) );
}
}

只是尝试在SlimDX和SharpDX中加载它,我得到了没有问题的技术,所以如果你还没有枚举技术,这肯定是Windows API Core Pack的一个问题。